Skip to content

Commit f9b3b7f

Browse files
Fix filter circuit by subject (#432)
1 parent f1e247e commit f9b3b7f

File tree

2 files changed

+38
-6
lines changed

2 files changed

+38
-6
lines changed

app/service/circuit.py

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,17 @@
4343
def _load(query: sa.Select):
4444
return query.options(
4545
joinedload(Circuit.license),
46-
joinedload(Circuit.subject).joinedload(Subject.species),
47-
joinedload(Circuit.subject).joinedload(Subject.strain),
46+
joinedload(Circuit.subject).options(
47+
joinedload(Subject.species),
48+
joinedload(Subject.strain),
49+
),
4850
joinedload(Circuit.brain_region),
4951
joinedload(Circuit.created_by),
5052
joinedload(Circuit.updated_by),
51-
selectinload(Circuit.contributions).joinedload(Contribution.agent),
52-
selectinload(Circuit.contributions).joinedload(Contribution.role),
53+
selectinload(Circuit.contributions).options(
54+
joinedload(Contribution.agent),
55+
joinedload(Contribution.role),
56+
),
5357
selectinload(Circuit.assets),
5458
raiseload("*"),
5559
)
@@ -141,22 +145,30 @@ def read_many(
141145
facets: FacetsDep,
142146
in_brain_region: InBrainRegionDep,
143147
) -> ListResponse[CircuitRead]:
148+
subject_alias = aliased(Subject, flat=True)
144149
agent_alias = aliased(Agent, flat=True)
145150
created_by_alias = aliased(Agent, flat=True)
146151
updated_by_alias = aliased(Agent, flat=True)
147152

148153
aliases: Aliases = {
154+
Subject: subject_alias,
149155
Agent: {
150156
"contribution": agent_alias,
151157
"created_by": created_by_alias,
152158
"updated_by": updated_by_alias,
153-
}
159+
},
154160
}
155-
facet_keys = filter_keys = [
161+
facet_keys = [
156162
"brain_region",
157163
"created_by",
158164
"updated_by",
159165
"contribution",
166+
"subject.species",
167+
"subject.strain",
168+
]
169+
filter_keys = [
170+
"subject",
171+
*facet_keys,
160172
]
161173
name_to_facet_query_params, filter_joins = query_params_factory(
162174
db_model_class=Circuit,

tests/test_circuit.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,3 +225,23 @@ def test_filtering(client, root_circuit, models):
225225
},
226226
).json()["data"]
227227
assert len(data) == 4
228+
229+
data = assert_request(
230+
client.get,
231+
url=ROUTE,
232+
params={
233+
"root_circuit_id": str(root_circuit.id),
234+
"subject__species__name": "Test Species",
235+
},
236+
).json()["data"]
237+
assert len(data) == len(models)
238+
239+
data = assert_request(
240+
client.get,
241+
url=ROUTE,
242+
params={
243+
"root_circuit_id": str(root_circuit.id),
244+
"subject__species__name": "Unknown",
245+
},
246+
).json()["data"]
247+
assert len(data) == 0

0 commit comments

Comments
 (0)