Skip to content

Commit 7da4f69

Browse files
authored
fix the has_images,has_coordinates query (#1170)
1 parent 82046ec commit 7da4f69

File tree

2 files changed

+32
-30
lines changed

2 files changed

+32
-30
lines changed

store/backend/neurostore/resources/base.py

Lines changed: 19 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -162,45 +162,34 @@ def update_base_studies(self, base_studies):
162162

163163
# Subquery for new_has_coordinates
164164
new_has_coordinates_subquery = (
165-
sa.select(
166-
sa.func.coalesce(
167-
sa.func.bool_and(Point.analysis_id != None), False # noqa E711
168-
) # noqa E711
169-
)
170-
.where(Point.analysis_id == Analysis.id)
171-
.correlate(Study)
165+
sa.select(sa.func.count(Point.id) > 0)
166+
.select_from(Study)
167+
.join(Analysis, Analysis.study_id == Study.id)
168+
.join(Point, Point.analysis_id == Analysis.id)
169+
.where(Study.base_study_id == BaseStudy.id)
170+
.correlate(BaseStudy)
172171
.scalar_subquery()
173172
)
174173

175174
# Subquery for new_has_images
176175
new_has_images_subquery = (
177-
sa.select(
178-
sa.func.coalesce(
179-
sa.func.bool_and(Image.analysis_id != None), False # noqa E711
180-
) # noqa E711
181-
)
182-
.where(Image.analysis_id == Analysis.id)
183-
.correlate(Study)
176+
sa.select(sa.func.count(Image.id) > 0)
177+
.select_from(Study)
178+
.join(Analysis, Analysis.study_id == Study.id)
179+
.join(Image, Image.analysis_id == Analysis.id)
180+
.where(Study.base_study_id == BaseStudy.id)
181+
.correlate(BaseStudy)
184182
.scalar_subquery()
185183
)
186184

187185
# Main query
188-
query = (
189-
sa.select(
190-
BaseStudy.id,
191-
BaseStudy.has_images,
192-
BaseStudy.has_coordinates,
193-
new_has_coordinates_subquery.label("new_has_coordinates"),
194-
new_has_images_subquery.label("new_has_images"),
195-
)
196-
.distinct()
197-
.select_from(BaseStudy)
198-
.join(Study, Study.base_study_id == BaseStudy.id)
199-
.outerjoin(Analysis, Analysis.study_id == Study.id)
200-
.where(
201-
BaseStudy.id.in_(base_studies),
202-
)
203-
)
186+
query = sa.select(
187+
BaseStudy.id,
188+
BaseStudy.has_images,
189+
BaseStudy.has_coordinates,
190+
new_has_coordinates_subquery.label("new_has_coordinates"),
191+
new_has_images_subquery.label("new_has_images"),
192+
).where(BaseStudy.id.in_(base_studies))
204193

205194
affected_base_studies = db.session.execute(query).fetchall()
206195
update_base_studies = []

store/backend/neurostore/tests/api/test_base_studies.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,19 @@ def test_has_coordinates_images(auth_client, session):
340340
assert base_study_2.has_coordinates is True
341341
assert base_study_2.has_images is True
342342

343+
# adding an analysis without media should not flip the flags back to False
344+
empty_analysis_resp = auth_client.post(
345+
"/api/analyses/",
346+
data={
347+
"study": create_full_study.json()["id"],
348+
"name": "empty analysis",
349+
},
350+
)
351+
assert empty_analysis_resp.status_code == 200
352+
session.refresh(base_study_2)
353+
assert base_study_2.has_coordinates is True
354+
assert base_study_2.has_images is True
355+
343356
# delete analysis a
344357
analysis_ids = create_full_study.json()["analyses"]
345358
analyses = [Analysis.query.filter_by(id=id_).one() for id_ in analysis_ids]

0 commit comments

Comments
 (0)