Пример #1
0
def test_get_latest_results():
    db = _get_test_db()
    models = ['aml', 'luad']

    # Fill up the database.
    for query in test_queries:
        db.put_queries('joshua', 1, query, models)
    for model in models:
        db.put_results(model, [(query, 'pysb', _get_random_result())
                               for query in test_queries])

    # Add the same statements over again
    time.sleep(10)
    for model in models:
        db.put_results(model, [(query, 'pysb', _get_random_result())
                               for query in test_queries])

    # Try to get the results. Make sure we only get the one set.
    results = db.get_results('joshua')
    assert len(results) == len(test_queries) * len(models), len(results)
    assert all(isinstance(result, tuple) for result in results)
    assert all(result[0] in models for result in results)
    assert any(results[0][1].matches(q) for q in test_queries)
    assert all(isinstance(result[2], str) for result in results)
    assert all(isinstance(result[3], dict) for result in results)
Пример #2
0
def test_get_subscribed_users():
    db = _get_test_db()
    db.put_queries('*****@*****.**', 1, test_queries[0], ['aml'], True)
    db.put_queries('*****@*****.**', 2, test_queries[1], ['aml'], False)
    # Only return users that subscribed for something
    emails = db.get_subscribed_users()
    assert len(emails) == 1
    assert emails[0] == '*****@*****.**'
Пример #3
0
def test_get_subscribed_queries():
    db = _get_test_db()
    db.put_queries('*****@*****.**', 1, test_queries[0], ['aml'], True)
    db.put_queries('*****@*****.**', 1, test_queries[1], ['aml'], False)
    # Only return queries for which subscription is True
    queries = db.get_subscribed_queries('*****@*****.**')
    assert len(queries) == 1
    assert queries[0][2] == test_queries[0].get_hash_with_model('aml')
Пример #4
0
def test_answer_get_registered_queries():
    db = _get_test_db()
    qm = QueryManager(db=db, model_managers=[test_mm])
    # Put all types of queries in db, answer together
    qm.db.put_queries(test_email, 1, query_object, ['test'], subscribe=True)
    qm.db.put_queries(test_email, 1, dyn_query, ['test'], subscribe=True)
    qm.db.put_queries(test_email, 1, open_query, ['test'], subscribe=True)
    qm.db.put_queries(test_email, 1, interv_query, ['test'], subscribe=True)
    qm.answer_registered_queries('test')
    # Retrieve results for path query
    results = qm.get_registered_queries(test_email, 'path_property')
    qh = query_object.get_hash_with_model('test')
    assert qh in results
    assert len(results) == 1
    assert results[qh]['model'] == 'test'
    assert results[qh]['query'] == simple_query
    assert isinstance(results[qh]['date'], str)
    assert results[qh]['pysb'] == ['Pass', [test_response['3801854542']]], \
        (results[qh]['pysb'], test_response['3801854542'])
    assert results[qh]['pybel'] == ['Pass', [test_response['3801854542']]]
    assert results[qh]['signed_graph'][0] == 'Pass'
    assert results[qh]['unsigned_graph'][0] == 'Pass'
    # Retrieve results for dynamic query
    results = qm.get_registered_queries(test_email, 'dynamic_property')
    qh = dyn_query.get_hash_with_model('test')
    assert qh in results
    assert results[qh]['model'] == 'test'
    assert results[qh]['query'] == 'Active MAP2K1 is eventually high.'
    assert isinstance(results[qh]['date'], str)
    assert results[qh]['result'] == [
        'Pass', 'Satisfaction rate is 100% after 2 simulations.'
    ]
    assert isinstance(results[qh]['image'], str)
    # Retrieve results for open query
    results = qm.get_registered_queries(test_email, 'open_search_query')
    qh = open_query.get_hash_with_model('test')
    assert qh in results
    assert results[qh]['model'] == 'test'
    assert results[qh]['query'] == 'What does BRAF activate?'
    assert isinstance(results[qh]['date'], str)
    for mc_type in ['pysb', 'pybel', 'signed_graph', 'unsigned_graph']:
        assert results[qh][mc_type][0] == 'Pass'
        assert isinstance(results[qh][mc_type][1], list)
        assert test_response['3801854542']['path'] in [
            res['path'] for res in results[qh][mc_type][1]
        ]
    # Retrieve results for intervention query
    results = qm.get_registered_queries(test_email,
                                        'simple_intervention_property')
    qh = interv_query.get_hash_with_model('test')
    assert qh in results, results
    assert results[qh]['model'] == 'test'
    assert results[qh]['query'] == 'BRAF increases active MAP2K1.'
    assert isinstance(results[qh]['date'], str)
    assert results[qh]['result'] == [
        'Pass', 'Yes, the amount of target entity increased.'
    ]
    assert isinstance(results[qh]['image'], str)
Пример #5
0
def test_put_results():
    db = _get_test_db()
    db.put_queries('joshua', 1, test_queries[0], ['aml', 'luad'])
    queries = db.get_queries('aml')
    results = [(query, '', _get_random_result()) for query in queries]
    db.put_results('aml', results)
    with db.get_session() as sess:
        db_results = sess.query(Result).all()
    assert len(db_results) == len(results)
Пример #6
0
def test_get_number_results():
    db = _get_test_db()
    db.put_queries('*****@*****.**', 1, test_queries[0], ['aml'])
    db.put_results('aml', [(test_queries[0], 'pysb', _get_random_result())])
    time.sleep(1)
    db.put_results('aml', [(test_queries[0], 'pysb', _get_random_result())])
    time.sleep(1)
    db.put_results('aml', [(test_queries[0], 'pysb', _get_random_result())])
    qh = test_queries[0].get_hash_with_model('aml')
    assert db.get_number_of_results(qh, 'pysb') == 3
Пример #7
0
def test_put_queries():
    db = _get_test_db()
    db.put_queries('joshua', 1, test_queries[0], ['aml', 'luad'])
    with db.get_session() as sess:
        queries = sess.query(Query).all()
    assert len(queries) == 2, len(queries)
    # Not logged in user
    db.put_queries(None, None, test_queries[1], ['aml'])
    with db.get_session() as sess:
        queries = sess.query(Query).all()
    assert len(queries) == 3, len(queries)
Пример #8
0
def test_get_queries():
    db = _get_test_db()
    for query in test_queries:
        db.put_queries('joshua', 1, query, ['aml', 'luad'])
        db.put_queries('test_user', 2, query, ['aml'])
    # We should only get distinct queries, independent of number of users
    queries = db.get_queries('aml')
    assert len(queries) == 2, len(queries)
    assert all(isinstance(query, PathProperty) for query in queries)
    queries = db.get_queries('luad')
    assert len(queries) == 2, len(queries)
    assert all(isinstance(query, PathProperty) for query in queries)
Пример #9
0
def test_user_query_delta():
    db = _get_test_db()
    # Using results from db
    db.put_queries(test_email, 1, query_object, ['test'], subscribe=True)
    db.put_results('test', [(query_object, 'pysb', test_response)])
    db.put_results('test', [(query_object, 'pysb', query_not_appl)])
    str_rep, html_rep = get_user_query_delta(db, user_email=test_email)
    assert str_rep, print(str_rep)
    assert html_rep, print(html_rep)
    assert '</html>' in html_rep
    assert '</body>' in html_rep
    assert 'pysb' in html_rep
    assert 'unsubscribe' in html_rep
Пример #10
0
def test_model_subscription():
    db = _get_test_db()
    db.subscribe_to_model('*****@*****.**', 1, 'aml')
    db.subscribe_to_model('*****@*****.**', 1, 'paad')
    db.subscribe_to_model('*****@*****.**', 2, 'aml')
    aml_users = db.get_model_users('aml')
    paad_users = db.get_model_users('paad')
    ms_users = db.get_model_users('ms')
    assert len(aml_users) == 2
    assert set(aml_users) == {'*****@*****.**', '*****@*****.**'}
    assert len(paad_users) == 1
    assert paad_users == ['*****@*****.**']
    assert ms_users == []
Пример #11
0
def test_answer_queries_from_s3():
    # Local imports are recommended when using moto
    from emmaa.answer_queries import answer_queries_from_s3
    db = _get_test_db()
    client = setup_bucket(add_mm=True)
    db.put_queries('*****@*****.**',
                   1,
                   query_object, ['test'],
                   subscribe=True)
    answer_queries_from_s3('test', db=db, bucket=TEST_BUCKET_NAME)
    results = db.get_results('*****@*****.**', latest_order=1)
    # Each model type has its own result
    assert len(results) == 4, len(results)
Пример #12
0
def test_update_email_subscription():
    db = _get_test_db()
    db.put_queries('*****@*****.**', 1, test_queries[0], ['aml'], True)
    qh = test_queries[0].get_hash_with_model('aml')
    with db.get_session() as sess:
        q = sess.query(UserQuery.subscription).filter(
            UserQuery.user_id == 1, UserQuery.query_hash == qh)
    assert [q[0] for q in q.all()][0]  # True
    db.update_email_subscription('*****@*****.**', [qh], [], False)
    with db.get_session() as sess:
        q = sess.query(UserQuery.subscription).filter(
            UserQuery.user_id == 1,
            UserQuery.query_hash == test_queries[0].get_hash_with_model('aml'))
    assert not [q[0] for q in q.all()][0]  # new subscription status is False
Пример #13
0
def test_user_query_delta():
    db = _get_test_db()
    qm = QueryManager(db=db, model_managers=[test_mm])
    # Using results from db
    qm.db.put_queries(test_email, 1, query_object, ['test'],
                      subscribe=True)
    qm.db.put_results('test', [(query_object, 'pysb', test_response)])
    qm.db.put_results('test', [(query_object, 'pysb', query_not_appl)])
    str_rep, html_rep = qm.get_user_query_delta(user_email=test_email)
    assert str_rep, print(str_rep)
    assert html_rep, print(html_rep)
    assert '</html>' in html_rep
    assert '</body>' in html_rep
    assert 'pysb' in html_rep
    assert 'unsubscribe' in html_rep
Пример #14
0
def test_immediate_dynamic():
    db = _get_test_db()
    qm = QueryManager(db=db, model_managers=[test_mm])
    query_hashes = qm.answer_immediate_query(
        test_email, 1, dyn_query, ['test'], subscribe=False)[
            'dynamic_property']
    assert query_hashes == [-27775603206605897], query_hashes
    results = qm.retrieve_results_from_hashes(query_hashes, 'dynamic_property')
    assert len(results) == 1, results
    assert query_hashes[0] in results
    result_values = results[query_hashes[0]]
    assert result_values['model'] == 'test'
    assert result_values['query'] == 'Active MAP2K1 is eventually high.'
    assert isinstance(result_values['date'], str)
    assert result_values['result'] == [
        'Pass', 'Satisfaction rate is 100% after 2 simulations.']
    assert isinstance(result_values['image'], str)
Пример #15
0
def test_path_counts():
    db = _get_test_db('stmt')
    # Put statements in the database
    model_id = 'test'
    date = '2021-01-01'
    stmts = [
        Activation(Agent('A', db_refs={'HGNC': '1234'}),
                   Agent('B', db_refs={'HGNC': '2345'}),
                   evidence=[
                       Evidence(text='A activates B.',
                                source_api='assertion',
                                text_refs={'TRID': '1234'}),
                       Evidence(text='A activates B.',
                                source_api='assertion',
                                text_refs={'TRID': '1235'})
                   ]),
        Phosphorylation(Agent('B', db_refs={'HGNC': '2345'}),
                        Agent('C', db_refs={'HGNC': '3456'}),
                        evidence=[
                            Evidence(text='B phosphorylates C.',
                                     source_api='assertion',
                                     text_refs={'TRID': '2345'})
                        ])
    ]
    hash0 = str(stmts[0].get_hash())
    hash1 = str(stmts[1].get_hash())
    stmt_jsons = stmts_to_json(stmts)
    db.add_statements(model_id, date, stmt_jsons)
    # All path counts should be 0
    path_counts = db.get_path_counts(model_id, date)
    assert len(path_counts) == 0
    # Can update path counts multiple times, can be a subset of hashes
    db.update_statements_path_counts(model_id, date, {hash0: 7})
    path_counts = db.get_path_counts(model_id, date)
    assert len(path_counts) == 1, path_counts
    assert path_counts[hash0] == 7
    db.update_statements_path_counts(model_id, date, {hash0: 1, hash1: 5})
    path_counts = db.get_path_counts(model_id, date)
    assert len(path_counts) == 2
    assert path_counts[hash0] == 8  # 7 + 1
    assert path_counts[hash1] == 5
    db.update_statements_path_counts(model_id, date, {hash0: 3})
    path_counts = db.get_path_counts(model_id, date)
    assert len(path_counts) == 2
    assert path_counts[hash0] == 11  # 7 + 1 + 3
    assert path_counts[hash1] == 5  # Only added 5
Пример #16
0
def test_immediate_intervention():
    db = _get_test_db()
    qm = QueryManager(db=db, model_managers=[test_mm])
    query_hashes = qm.answer_immediate_query(
        test_email, 1, interv_query, ['test'],
        subscribe=False)['simple_intervention_property']
    assert query_hashes == [14834228758745381], query_hashes
    results = qm.retrieve_results_from_hashes(query_hashes,
                                              'simple_intervention_property')
    assert len(results) == 1, results
    assert query_hashes[0] in results
    result_values = results[query_hashes[0]]
    assert result_values['model'] == 'test'
    assert result_values['query'] == 'BRAF increases active MAP2K1.'
    assert isinstance(result_values['date'], str)
    assert result_values['result'] == [
        'Pass', 'Yes, the amount of target entity increased.'
    ]
    assert isinstance(result_values['image'], str)
Пример #17
0
def test_answer_immediate_query():
    db = _get_test_db()
    qm = QueryManager(db=db, model_managers=[test_mm])
    query_hashes = qm.answer_immediate_query(
        test_email, 1, query_object, ['test'], subscribe=False)[
            'path_property']
    assert query_hashes == [35683418474694258], query_hashes
    results = qm.retrieve_results_from_hashes(query_hashes)
    assert len(results) == 1
    assert query_hashes[0] in results
    result_values = results[query_hashes[0]]
    assert result_values['model'] == 'test'
    assert result_values['query'] == simple_query
    assert isinstance(result_values['date'], str)
    assert result_values['pysb'] == ['Pass', [test_response['3801854542']]], \
        result_values['pysb']
    assert result_values['pybel'] == ['Pass', [test_response['3801854542']]]
    assert result_values['signed_graph'][0] == 'Pass'
    assert result_values['unsigned_graph'][0] == 'Pass'
Пример #18
0
def test_get_dates_and_delete():
    db = _get_test_db('stmt')
    model_id = 'test'
    # At first there are no statements in the database
    assert db.get_number_of_dates(model_id) == 0
    assert db.get_oldest_date(model_id) is None
    # Put statements in the database
    date = '2021-01-01'
    stmts = [
        Activation(Agent('A', db_refs={'HGNC': '1234'}),
                   Agent('B', db_refs={'HGNC': '2345'}),
                   evidence=[
                       Evidence(text='A activates B.',
                                source_api='assertion',
                                text_refs={'TRID': '1234'}),
                       Evidence(text='A activates B.',
                                source_api='assertion',
                                text_refs={'TRID': '1235'})
                   ]),
        Phosphorylation(Agent('B', db_refs={'HGNC': '2345'}),
                        Agent('C', db_refs={'HGNC': '3456'}),
                        evidence=[
                            Evidence(text='B phosphorylates C.',
                                     source_api='assertion',
                                     text_refs={'TRID': '2345'})
                        ])
    ]
    stmt_jsons = stmts_to_json(stmts)
    db.add_statements(model_id, date, stmt_jsons)
    # There should be one date
    assert db.get_number_of_dates(model_id) == 1
    assert db.get_oldest_date(model_id) == date
    # Add another date
    date2 = '2022-01-01'
    db.add_statements(model_id, date2, stmt_jsons)
    assert db.get_number_of_dates(model_id) == 2
    # Oldest date is still the first one
    assert db.get_oldest_date(model_id) == date
    # Delete statements from the first date
    db.delete_statements(model_id, date)
    # There should be one date left
    assert db.get_number_of_dates(model_id) == 1
    assert db.get_oldest_date(model_id) == date2
Пример #19
0
def test_immediate_open():
    db = _get_test_db()
    qm = QueryManager(db=db, model_managers=[test_mm])
    query_hashes = qm.answer_immediate_query(
        test_email, 1, open_query, ['test'], subscribe=False)[
            'open_search_query']
    assert query_hashes == [-13552944417558866], query_hashes
    results = qm.retrieve_results_from_hashes(query_hashes)
    assert len(results) == 1
    assert query_hashes[0] in results
    result_values = results[query_hashes[0]]
    assert result_values['model'] == 'test'
    assert result_values['query'] == 'What does BRAF activate?'
    assert isinstance(result_values['date'], str)
    for mc_type in ['pysb', 'pybel', 'signed_graph', 'unsigned_graph']:
        assert result_values[mc_type][0] == 'Pass'
        assert isinstance(result_values[mc_type][1], list)
        assert test_response['3801854542']['path'] in [
            res['path'] for res in result_values[mc_type][1]]
Пример #20
0
def test_get_all_result_hashes_and_delta():
    db = _get_test_db()
    db.put_queries('*****@*****.**', 1, test_queries[0], ['aml'])
    qh = test_queries[0].get_hash_with_model('aml')
    # If there are no older results, all hashes is None
    assert db.get_all_result_hashes(qh, 'pysb') is None
    db.put_results('aml', [(test_queries[0], 'pysb', {'1234': 'result'})])
    assert db.get_all_result_hashes(qh, 'pysb') == {'1234'}
    # First result is not delta
    results = db.get_results_from_hashes([qh])
    assert results[0][4] == [], results[0]
    # All hashes keeps growing
    time.sleep(1)
    db.put_results('aml', [(test_queries[0], 'pysb', {'345': 'other'})])
    assert db.get_all_result_hashes(qh, 'pysb') == {'1234', '345'}
    results = db.get_results_from_hashes([qh])
    assert results[0][4] == ['345'], results[0]
    # When we go to previous result, it's not delta
    time.sleep(1)
    db.put_results('aml', [(test_queries[0], 'pysb', {'1234': 'result'})])
    assert db.get_all_result_hashes(qh, 'pysb') == {'1234', '345'}
    results = db.get_results_from_hashes([qh])
    assert results[0][4] == [], results[0]
Пример #21
0
def test_get_statements_by_hash():
    db = _get_test_db('stmt')
    # Put statements in the database
    model_id = 'test'
    date = '2021-01-01'
    stmts = [
        Activation(Agent('A', db_refs={'HGNC': '1234'}),
                   Agent('B', db_refs={'HGNC': '2345'}),
                   evidence=[
                       Evidence(text='A activates B.',
                                source_api='assertion',
                                text_refs={'TRID': '1234'}),
                       Evidence(text='A activates B.',
                                source_api='assertion',
                                text_refs={'TRID': '1235'})
                   ]),
        Phosphorylation(Agent('B', db_refs={'HGNC': '2345'}),
                        Agent('C', db_refs={'HGNC': '3456'}),
                        evidence=[
                            Evidence(text='B phosphorylates C.',
                                     source_api='assertion',
                                     text_refs={'TRID': '2345'})
                        ])
    ]
    hash0 = stmts[0].get_hash()
    hash1 = stmts[1].get_hash()
    stmt_jsons = stmts_to_json(stmts)
    db.add_statements(model_id, date, stmt_jsons)

    # Load statements by hash
    stmts_loaded = db.get_statements_by_hash(model_id, date, [hash0, hash1])
    assert len(stmts_loaded) == 2
    assert stmts_loaded[0].get_hash() == hash0
    assert stmts_loaded[1].get_hash() == hash1
    stmts_loaded = db.get_statements_by_hash(model_id, date, [hash0])
    assert len(stmts_loaded) == 1
    assert stmts_loaded[0].get_hash() == hash0
Пример #22
0
def test_instantiation():
    db = _get_test_db()
    assert db
    return
Пример #23
0
def test_get_statements():
    db = _get_test_db('stmt')
    # Put statements and path counts in the database
    model_id = 'test'
    date = '2021-01-01'
    stmts = [
        Activation(Agent('A', db_refs={'HGNC': '1234'}),
                   Agent('B', db_refs={'HGNC': '2345'}),
                   evidence=[
                       Evidence(text='A activates B.',
                                source_api='assertion',
                                text_refs={'TRID': '1234'}),
                       Evidence(text='A activates B.',
                                source_api='assertion',
                                text_refs={'TRID': '1235'})
                   ]),
        Phosphorylation(Agent('B', db_refs={'HGNC': '2345'}),
                        Agent('C', db_refs={'HGNC': '3456'}),
                        evidence=[
                            Evidence(text='B phosphorylates C.',
                                     source_api='assertion',
                                     text_refs={'TRID': '2345'})
                        ]),
        IncreaseAmount(Agent('A', db_refs={'HGNC': '1234'}),
                       Agent('C', db_refs={'HGNC': '3456'}))
    ]
    stmts[0].belief = 0.8
    stmts[1].belief = 0.9
    stmts[2].belief = 0.5
    hash0 = stmts[0].get_hash()
    hash1 = stmts[1].get_hash()
    hash2 = stmts[2].get_hash()
    stmt_jsons = stmts_to_json(stmts)
    db.add_statements(model_id, date, stmt_jsons)
    db.update_statements_path_counts(model_id, date, {
        str(hash0): 1,
        str(hash1): 5
    })

    # Load statements with different sort/filter options

    # Sort by evidence count
    stmts_loaded = db.get_statements(model_id, date, sort_by='evidence')
    assert len(stmts_loaded) == 3
    assert stmts_loaded[0].get_hash() == hash0, len(stmts_loaded[0].evidence)
    assert stmts_loaded[1].get_hash() == hash1, len(stmts_loaded[1].evidence)
    assert stmts_loaded[2].get_hash() == hash2  # stmt with no evidence is last
    # Sort by belief
    stmts_loaded = db.get_statements(model_id, date, sort_by='belief')
    assert len(stmts_loaded) == 3
    assert stmts_loaded[0].get_hash() == hash1
    assert stmts_loaded[1].get_hash() == hash0
    # Sort by path count
    stmts_loaded = db.get_statements(model_id, date, sort_by='paths')
    assert len(stmts_loaded) == 3
    assert stmts_loaded[0].get_hash() == hash1, stmts_loaded
    assert stmts_loaded[1].get_hash() == hash0

    # Filter by statement type
    stmts_loaded = db.get_statements(model_id, date, stmt_types=['Activation'])
    assert len(stmts_loaded) == 1
    assert stmts_loaded[0].get_hash() == hash0
    stmts_loaded = db.get_statements(model_id,
                                     date,
                                     stmt_types=['Phosphorylation'])
    assert len(stmts_loaded) == 1
    assert stmts_loaded[0].get_hash() == hash1

    # Filter by belief
    stmts_loaded = db.get_statements(model_id, date, min_belief=0.85)
    assert len(stmts_loaded) == 1
    assert stmts_loaded[0].get_hash() == hash1
    stmts_loaded = db.get_statements(model_id, date, max_belief=0.85)
    assert len(stmts_loaded) == 2
    assert set([stmt.get_hash() for stmt in stmts_loaded]) == {hash0, hash2}
    stmts_loaded = db.get_statements(model_id,
                                     date,
                                     min_belief=0.85,
                                     max_belief=0.85)
    assert len(stmts_loaded) == 0

    # Use offset and limit
    stmts_loaded = db.get_statements(model_id, date)
    assert len(stmts_loaded) == 3
    stmts_loaded = db.get_statements(model_id, date, offset=1)
    assert len(stmts_loaded) == 2, stmts_loaded
    stmts_loaded = db.get_statements(model_id, date, limit=1)
    assert len(stmts_loaded) == 1
    # Returns only remaining statements after upset even if limit is larger
    stmts_loaded = db.get_statements(model_id, date, offset=1, limit=5)
    assert len(stmts_loaded) == 2