Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 13 additions & 2 deletions src/mavedb/lib/score_sets.py
Original file line number Diff line number Diff line change
Expand Up @@ -216,12 +216,12 @@ def build_search_score_sets_query_filter(
)
)

if search.keywords:
if search.controlled_keywords:
query = query.filter(
ScoreSet.experiment.has(
Experiment.keyword_objs.any(
ExperimentControlledKeywordAssociation.controlled_keyword.has(
ControlledKeyword.label.in_(search.keywords)
ControlledKeyword.label.in_(search.controlled_keywords)
)
)
)
Expand Down Expand Up @@ -334,6 +334,9 @@ def fetch_score_set_search_filter_options(
publication_author_name_counter: Counter[str] = Counter()
publication_db_name_counter: Counter[str] = Counter()
publication_journal_counter: Counter[str] = Counter()
# Controlled keywords related counters
controlled_keywords_label_counter: Counter[str] = Counter()


# --- PERFORMANCE NOTE ---
# The following counter construction loop is a bottleneck for large score set queries.
Expand Down Expand Up @@ -388,6 +391,13 @@ def fetch_score_set_search_filter_options(
if journal:
publication_journal_counter[journal] += 1

# Controlled keywords related options
for controlled_keyword in getattr(score_set.experiment, "keyword_objs", []):
keyword = getattr(controlled_keyword, "controlled_keyword", [])
label = getattr(keyword, "label", None)
if label:
controlled_keywords_label_counter[label] += 1

logger.debug(msg="Score set search filter options were fetched.", extra=logging_context())

return {
Expand All @@ -398,6 +408,7 @@ def fetch_score_set_search_filter_options(
"publication_author_names": score_set_search_filter_options_from_counter(publication_author_name_counter),
"publication_db_names": score_set_search_filter_options_from_counter(publication_db_name_counter),
"publication_journals": score_set_search_filter_options_from_counter(publication_journal_counter),
"controlled_keywords": score_set_search_filter_options_from_counter(controlled_keywords_label_counter),
}


Expand Down
3 changes: 2 additions & 1 deletion src/mavedb/view_models/search.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class ScoreSetsSearch(BaseModel):
databases: Optional[list[str]] = None
journals: Optional[list[str]] = None
publication_identifiers: Optional[list[str]] = None
keywords: Optional[list[str]] = None
controlled_keywords: Optional[list[str]] = None
text: Optional[str] = None
include_experiment_score_set_urns_and_count: Optional[bool] = True
offset: Optional[int] = None
Expand Down Expand Up @@ -56,6 +56,7 @@ class ScoreSetsSearchFilterOptionsResponse(BaseModel):
publication_author_names: list[ScoreSetsSearchFilterOption]
publication_db_names: list[ScoreSetsSearchFilterOption]
publication_journals: list[ScoreSetsSearchFilterOption]
controlled_keywords: list[ScoreSetsSearchFilterOption]

class Config:
from_attributes = True
Expand Down
2 changes: 1 addition & 1 deletion tests/helpers/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -2184,7 +2184,7 @@
"databases": ["uniprot"],
"journals": ["biomed"],
"publication_identifiers": ["12345678"],
"keywords": ["keyword"],
"controlled_keywords": ["keyword"],
"text": "testtesttest",
}

Expand Down
5 changes: 5 additions & 0 deletions tests/lib/test_score_set.py
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,7 @@ def test_fetch_score_set_search_filter_options_no_score_sets(setup_lib_db, sessi
filter_options = fetch_score_set_search_filter_options(session, None, None, score_set_search)

assert filter_options == {
"controlled_keywords": [],
"target_gene_categories": [],
"target_gene_names": [],
"target_organism_names": [],
Expand Down Expand Up @@ -437,6 +438,7 @@ def test_fetch_score_set_search_filter_options_with_score_set(setup_lib_db, sess
filter_options = fetch_score_set_search_filter_options(session, user_data, None, score_set_search)

assert filter_options == {
"controlled_keywords": [],
"target_gene_categories": [{"value": TargetCategory.protein_coding, "count": 1}],
"target_gene_names": [{"value": "TEST2", "count": 1}],
"target_organism_names": [],
Expand Down Expand Up @@ -511,6 +513,7 @@ def test_fetch_score_set_search_filter_options_with_partial_filtered_score_sets(
user_data = UserData(user=requesting_user, active_roles=[])
filter_options = fetch_score_set_search_filter_options(session, user_data, None, score_set_search)
assert filter_options == {
"controlled_keywords": [],
"target_gene_categories": [{"value": TargetCategory.protein_coding, "count": 1}],
"target_gene_names": [{"value": "TEST1", "count": 1}],
"target_organism_names": [{"count": 1, "value": "Organism name"}],
Expand All @@ -528,6 +531,7 @@ def test_fetch_score_set_search_filter_options_with_no_matching_score_sets(setup
filter_options = fetch_score_set_search_filter_options(session, user_data, None, score_set_search)

assert filter_options == {
"controlled_keywords": [],
"target_gene_categories": [],
"target_gene_names": [],
"target_organism_names": [],
Expand All @@ -543,6 +547,7 @@ def test_fetch_score_set_search_filter_options_with_no_permitted_score_sets(setu
filter_options = fetch_score_set_search_filter_options(session, None, None, score_set_search)

assert filter_options == {
"controlled_keywords": [],
"target_gene_categories": [],
"target_gene_names": [],
"target_organism_names": [],
Expand Down
Loading