From a223a325df6a77e20abe24ee40b5a00a2b5353a8 Mon Sep 17 00:00:00 2001 From: ayobi Date: Fri, 30 Aug 2024 21:21:06 -0400 Subject: [PATCH 01/12] addresses #579 --- .../admin/sample_summary.py | 9 +++++--- .../repo/tests/test_vioscreen_sessions.py | 21 +++++++++++-------- microsetta_private_api/repo/vioscreen_repo.py | 16 +++++++------- 3 files changed, 26 insertions(+), 20 deletions(-) diff --git a/microsetta_private_api/admin/sample_summary.py b/microsetta_private_api/admin/sample_summary.py index a64f00e2a..48c3b4589 100644 --- a/microsetta_private_api/admin/sample_summary.py +++ b/microsetta_private_api/admin/sample_summary.py @@ -80,9 +80,12 @@ def per_sample(project, barcodes, strip_sampleid): sample_date = None sample_time = None - ffq_complete, ffq_taken, _ = vs_repo.get_ffq_status_by_sample( - sample.id - ) + if source: + ffq_complete, ffq_taken, _ = \ + vs_repo.get_ffq_status_by_source(source.id) + else: + ffq_complete = False + ffq_taken = False summary = { "sampleid": None if strip_sampleid else barcode, diff --git a/microsetta_private_api/repo/tests/test_vioscreen_sessions.py b/microsetta_private_api/repo/tests/test_vioscreen_sessions.py index 172ffc05e..8d39a36be 100644 --- a/microsetta_private_api/repo/tests/test_vioscreen_sessions.py +++ b/microsetta_private_api/repo/tests/test_vioscreen_sessions.py @@ -18,6 +18,9 @@ def _to_dt(mon, day, year): # in ag_test db, this uuid corresponds to VIOSCREEN_USERNAME1 BARCODE_UUID_FOR_VIOSESSION = '66ec7d9a-400d-4d71-bce8-fdf79d2be554' BARCODE_UUID_NOTIN_REGISTRY = 'edee4af9-65b2-4ed1-ba66-5bf58383005e' +SOURCE_ID_FOR_VIOSESSION = 'f1978151-d3b8-4638-a633-ff6bd56a52c1' +SOURCE_ID_NOTIN_REGISTRY = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa' + today = date.today() VIOSCREEN_SESSION = VioscreenSession(sessionId='a session', @@ -265,7 +268,7 @@ def test_get_ffq_status_by_sample(self): r.upsert_session(session_copy) session = r.get_sessions_by_username(VIOSCREEN_USERNAME1)[0] - obs = r.get_ffq_status_by_sample(BARCODE_UUID_NOTIN_REGISTRY) + obs = r.get_ffq_status_by_source(SOURCE_ID_NOTIN_REGISTRY) self.assertEqual(obs, (False, False, None)) session.status = 'Finished' @@ -274,25 +277,25 @@ def test_get_ffq_status_by_sample(self): # enumerate the empirically observed states from vioscreen # (is_complete, has_taken, exact_status) - obs = r.get_ffq_status_by_sample(BARCODE_UUID_FOR_VIOSESSION) - self.assertEqual(obs, (True, True, 'Finished')) + obs = r.get_ffq_status_by_source(SOURCE_ID_FOR_VIOSESSION) + self.assertEqual(obs, [(True, True, 'Finished'), (True, True, 'Finished')]) session.status = 'Started' session.endDate = None r.upsert_session(session) - obs = r.get_ffq_status_by_sample(BARCODE_UUID_FOR_VIOSESSION) - self.assertEqual(obs, (False, True, 'Started')) + obs = r.get_ffq_status_by_source(SOURCE_ID_FOR_VIOSESSION) + self.assertEqual(obs, [(False, True, 'Started'), (False, True, 'Started')]) session.status = 'New' r.upsert_session(session) - obs = r.get_ffq_status_by_sample(BARCODE_UUID_FOR_VIOSESSION) - self.assertEqual(obs, (False, False, 'New')) + obs = r.get_ffq_status_by_source(SOURCE_ID_FOR_VIOSESSION) + self.assertEqual(obs, [(False, False, 'New'), (False, False, 'New')]) session.status = 'Review' r.upsert_session(session) - obs = r.get_ffq_status_by_sample(BARCODE_UUID_FOR_VIOSESSION) - self.assertEqual(obs, (False, True, 'Review')) + obs = r.get_ffq_status_by_source(SOURCE_ID_FOR_VIOSESSION) + self.assertEqual(obs, [(False, True, 'Review'), (False, True, 'Review')]) if __name__ == '__main__': diff --git a/microsetta_private_api/repo/vioscreen_repo.py b/microsetta_private_api/repo/vioscreen_repo.py index 57bf4f407..0a8f7fbfa 100644 --- a/microsetta_private_api/repo/vioscreen_repo.py +++ b/microsetta_private_api/repo/vioscreen_repo.py @@ -168,7 +168,7 @@ def get_unfinished_sessions(self): return not_in_vioscreen_sessions + incomplete_sessions - def get_ffq_status_by_sample(self, sample_uuid): + def get_ffq_status_by_source(self, source_uuid): """Obtain the FFQ status for a given sample Parameters @@ -190,17 +190,17 @@ def get_ffq_status_by_sample(self, sample_uuid): FROM ag.vioscreen_sessions AS vs JOIN ag.vioscreen_registry AS vr ON vs.username=vr.vio_id - WHERE sample_id=%s""", (sample_uuid, )) + WHERE source_id=%s""", (source_uuid, )) res = cur.fetchall() if len(res) == 0: return (False, False, None) - elif len(res) == 1: - status = res[0][0] - is_complete = status == 'Finished' - is_taken = status in ('Started', 'Review', 'Finished') - return (is_complete, is_taken, status) else: - raise ValueError("A sample should not have multiple FFQs") + results = [] + for status in res: + is_complete = status[0] == 'Finished' + is_taken = status[0] in ('Started', 'Review', 'Finished') + results.append((is_complete, is_taken, status[0])) + return results def get_missing_ffqs(self): """The set of valid sessions which lack FFQ data From a8409b7f25f770f2452fe3af90f031dba5a9b051 Mon Sep 17 00:00:00 2001 From: ayobi Date: Fri, 30 Aug 2024 21:33:11 -0400 Subject: [PATCH 02/12] lint and update tests --- .../repo/tests/test_vioscreen_sessions.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/microsetta_private_api/repo/tests/test_vioscreen_sessions.py b/microsetta_private_api/repo/tests/test_vioscreen_sessions.py index 8d39a36be..bfeeffa4f 100644 --- a/microsetta_private_api/repo/tests/test_vioscreen_sessions.py +++ b/microsetta_private_api/repo/tests/test_vioscreen_sessions.py @@ -278,24 +278,24 @@ def test_get_ffq_status_by_sample(self): # enumerate the empirically observed states from vioscreen # (is_complete, has_taken, exact_status) obs = r.get_ffq_status_by_source(SOURCE_ID_FOR_VIOSESSION) - self.assertEqual(obs, [(True, True, 'Finished'), (True, True, 'Finished')]) + self.assertEqual(obs, (True, True, 'Finished')) session.status = 'Started' session.endDate = None r.upsert_session(session) obs = r.get_ffq_status_by_source(SOURCE_ID_FOR_VIOSESSION) - self.assertEqual(obs, [(False, True, 'Started'), (False, True, 'Started')]) + self.assertEqual(obs, (False, True, 'Started')) session.status = 'New' r.upsert_session(session) obs = r.get_ffq_status_by_source(SOURCE_ID_FOR_VIOSESSION) - self.assertEqual(obs, [(False, False, 'New'), (False, False, 'New')]) + self.assertEqual(obs, (False, False, 'New')) session.status = 'Review' r.upsert_session(session) obs = r.get_ffq_status_by_source(SOURCE_ID_FOR_VIOSESSION) - self.assertEqual(obs, [(False, True, 'Review'), (False, True, 'Review')]) + self.assertEqual(obs, (False, True, 'Review')) if __name__ == '__main__': From 60a84f183b1fdf356e1a58ea833817136bd1c481 Mon Sep 17 00:00:00 2001 From: ayobi Date: Tue, 10 Sep 2024 16:51:07 -0300 Subject: [PATCH 03/12] update source id for vioscreen test --- .../repo/tests/test_vioscreen_sessions.py | 14 +++++++++----- microsetta_private_api/repo/vioscreen_repo.py | 4 ++-- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/microsetta_private_api/repo/tests/test_vioscreen_sessions.py b/microsetta_private_api/repo/tests/test_vioscreen_sessions.py index bfeeffa4f..36af5b2fd 100644 --- a/microsetta_private_api/repo/tests/test_vioscreen_sessions.py +++ b/microsetta_private_api/repo/tests/test_vioscreen_sessions.py @@ -18,7 +18,7 @@ def _to_dt(mon, day, year): # in ag_test db, this uuid corresponds to VIOSCREEN_USERNAME1 BARCODE_UUID_FOR_VIOSESSION = '66ec7d9a-400d-4d71-bce8-fdf79d2be554' BARCODE_UUID_NOTIN_REGISTRY = 'edee4af9-65b2-4ed1-ba66-5bf58383005e' -SOURCE_ID_FOR_VIOSESSION = 'f1978151-d3b8-4638-a633-ff6bd56a52c1' +SOURCE_ID_FOR_VIOSESSION = '6d343527-ab68-4e01-9ef7-16943dc5cee0' SOURCE_ID_NOTIN_REGISTRY = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa' @@ -278,24 +278,28 @@ def test_get_ffq_status_by_sample(self): # enumerate the empirically observed states from vioscreen # (is_complete, has_taken, exact_status) obs = r.get_ffq_status_by_source(SOURCE_ID_FOR_VIOSESSION) - self.assertEqual(obs, (True, True, 'Finished')) + self.assertEqual(obs, [(True, True, 'Finished'), + (True, True, 'Finished')]) session.status = 'Started' session.endDate = None r.upsert_session(session) obs = r.get_ffq_status_by_source(SOURCE_ID_FOR_VIOSESSION) - self.assertEqual(obs, (False, True, 'Started')) + self.assertEqual(obs, [(False, True, 'Started'), + (False, True, 'Started')]) session.status = 'New' r.upsert_session(session) obs = r.get_ffq_status_by_source(SOURCE_ID_FOR_VIOSESSION) - self.assertEqual(obs, (False, False, 'New')) + self.assertEqual(obs, [(False, False, 'New'), + (False, False, 'New')]) session.status = 'Review' r.upsert_session(session) obs = r.get_ffq_status_by_source(SOURCE_ID_FOR_VIOSESSION) - self.assertEqual(obs, (False, True, 'Review')) + self.assertEqual(obs, [(False, True, 'Review'), + (False, True, 'Review')]) if __name__ == '__main__': diff --git a/microsetta_private_api/repo/vioscreen_repo.py b/microsetta_private_api/repo/vioscreen_repo.py index 0a8f7fbfa..4a9aa36e0 100644 --- a/microsetta_private_api/repo/vioscreen_repo.py +++ b/microsetta_private_api/repo/vioscreen_repo.py @@ -169,11 +169,11 @@ def get_unfinished_sessions(self): return not_in_vioscreen_sessions + incomplete_sessions def get_ffq_status_by_source(self, source_uuid): - """Obtain the FFQ status for a given sample + """Obtain the FFQ status for a given source Parameters ---------- - sample_uuid : UUID4 + source_uuid : UUID4 The UUID to check the status of Returns From 321ce4dc79b7c0529447684826bba796d9863027 Mon Sep 17 00:00:00 2001 From: ayobi Date: Tue, 10 Sep 2024 17:15:28 -0300 Subject: [PATCH 04/12] update exp --- .../repo/tests/test_vioscreen_sessions.py | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/microsetta_private_api/repo/tests/test_vioscreen_sessions.py b/microsetta_private_api/repo/tests/test_vioscreen_sessions.py index 36af5b2fd..8d69efcd6 100644 --- a/microsetta_private_api/repo/tests/test_vioscreen_sessions.py +++ b/microsetta_private_api/repo/tests/test_vioscreen_sessions.py @@ -278,28 +278,24 @@ def test_get_ffq_status_by_sample(self): # enumerate the empirically observed states from vioscreen # (is_complete, has_taken, exact_status) obs = r.get_ffq_status_by_source(SOURCE_ID_FOR_VIOSESSION) - self.assertEqual(obs, [(True, True, 'Finished'), - (True, True, 'Finished')]) + self.assertEqual(obs, (True, True, 'Finished')) session.status = 'Started' session.endDate = None r.upsert_session(session) obs = r.get_ffq_status_by_source(SOURCE_ID_FOR_VIOSESSION) - self.assertEqual(obs, [(False, True, 'Started'), - (False, True, 'Started')]) + self.assertEqual(obs, (False, True, 'Started')) session.status = 'New' r.upsert_session(session) obs = r.get_ffq_status_by_source(SOURCE_ID_FOR_VIOSESSION) - self.assertEqual(obs, [(False, False, 'New'), - (False, False, 'New')]) + self.assertEqual(obs, (False, False, 'New')) session.status = 'Review' r.upsert_session(session) obs = r.get_ffq_status_by_source(SOURCE_ID_FOR_VIOSESSION) - self.assertEqual(obs, [(False, True, 'Review'), - (False, True, 'Review')]) + self.assertEqual(obs, (False, True, 'Review')) if __name__ == '__main__': From 6084b95c8ad4d5c10d9ec1c6661d7fedbdf5a30e Mon Sep 17 00:00:00 2001 From: ayobi Date: Tue, 10 Sep 2024 17:33:49 -0300 Subject: [PATCH 05/12] test --- microsetta_private_api/repo/vioscreen_repo.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/microsetta_private_api/repo/vioscreen_repo.py b/microsetta_private_api/repo/vioscreen_repo.py index 4a9aa36e0..6b11e7672 100644 --- a/microsetta_private_api/repo/vioscreen_repo.py +++ b/microsetta_private_api/repo/vioscreen_repo.py @@ -55,6 +55,10 @@ def upsert_session(self, session): {doupdateset} """, tuple([getattr(session, attr) for attr in self.COLS])) + cur.execute("SELECT * FROM ag.vioscreen_sessions " + "WHERE sessionId = %s", (session.sessionId,)) + row = cur.fetchone() + print("Upserted row:", row) return cur.rowcount == 1 def get_session(self, sessionId): From b7810353ea6f9c13e929550a4eb8f25aec7f4d05 Mon Sep 17 00:00:00 2001 From: ayobi Date: Tue, 10 Sep 2024 17:48:05 -0300 Subject: [PATCH 06/12] update vioscreen test --- .../repo/tests/test_vioscreen_sessions.py | 8 ++++---- microsetta_private_api/repo/vioscreen_repo.py | 4 ---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/microsetta_private_api/repo/tests/test_vioscreen_sessions.py b/microsetta_private_api/repo/tests/test_vioscreen_sessions.py index 8d69efcd6..87434ebc0 100644 --- a/microsetta_private_api/repo/tests/test_vioscreen_sessions.py +++ b/microsetta_private_api/repo/tests/test_vioscreen_sessions.py @@ -278,24 +278,24 @@ def test_get_ffq_status_by_sample(self): # enumerate the empirically observed states from vioscreen # (is_complete, has_taken, exact_status) obs = r.get_ffq_status_by_source(SOURCE_ID_FOR_VIOSESSION) - self.assertEqual(obs, (True, True, 'Finished')) + self.assertEqual(obs[1], (True, True, 'Finished')) session.status = 'Started' session.endDate = None r.upsert_session(session) obs = r.get_ffq_status_by_source(SOURCE_ID_FOR_VIOSESSION) - self.assertEqual(obs, (False, True, 'Started')) + self.assertEqual(obs[1], (False, True, 'Started')) session.status = 'New' r.upsert_session(session) obs = r.get_ffq_status_by_source(SOURCE_ID_FOR_VIOSESSION) - self.assertEqual(obs, (False, False, 'New')) + self.assertEqual(obs[1], (False, False, 'New')) session.status = 'Review' r.upsert_session(session) obs = r.get_ffq_status_by_source(SOURCE_ID_FOR_VIOSESSION) - self.assertEqual(obs, (False, True, 'Review')) + self.assertEqual(obs[1], (False, True, 'Review')) if __name__ == '__main__': diff --git a/microsetta_private_api/repo/vioscreen_repo.py b/microsetta_private_api/repo/vioscreen_repo.py index 6b11e7672..4a9aa36e0 100644 --- a/microsetta_private_api/repo/vioscreen_repo.py +++ b/microsetta_private_api/repo/vioscreen_repo.py @@ -55,10 +55,6 @@ def upsert_session(self, session): {doupdateset} """, tuple([getattr(session, attr) for attr in self.COLS])) - cur.execute("SELECT * FROM ag.vioscreen_sessions " - "WHERE sessionId = %s", (session.sessionId,)) - row = cur.fetchone() - print("Upserted row:", row) return cur.rowcount == 1 def get_session(self, sessionId): From 8ffe0a6052c6e23fe1f40a915fe26417d9da99d5 Mon Sep 17 00:00:00 2001 From: ayobi Date: Tue, 10 Sep 2024 17:57:04 -0300 Subject: [PATCH 07/12] test2 --- microsetta_private_api/repo/vioscreen_repo.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/microsetta_private_api/repo/vioscreen_repo.py b/microsetta_private_api/repo/vioscreen_repo.py index 4a9aa36e0..4bc467e3e 100644 --- a/microsetta_private_api/repo/vioscreen_repo.py +++ b/microsetta_private_api/repo/vioscreen_repo.py @@ -55,6 +55,10 @@ def upsert_session(self, session): {doupdateset} """, tuple([getattr(session, attr) for attr in self.COLS])) + cur.execute("SELECT * FROM ag.vioscreen_sessions " + "WHERE sessionId = %s", (session.sessionId,)) + rows = cur.fetchall() + print("Upserted rows:", rows) return cur.rowcount == 1 def get_session(self, sessionId): From a2908e49a5dd329436b82c632bd1a73ba36999af Mon Sep 17 00:00:00 2001 From: ayobi Date: Tue, 10 Sep 2024 18:13:18 -0300 Subject: [PATCH 08/12] test3 --- microsetta_private_api/repo/tests/test_vioscreen_sessions.py | 1 + 1 file changed, 1 insertion(+) diff --git a/microsetta_private_api/repo/tests/test_vioscreen_sessions.py b/microsetta_private_api/repo/tests/test_vioscreen_sessions.py index 87434ebc0..3f09c529d 100644 --- a/microsetta_private_api/repo/tests/test_vioscreen_sessions.py +++ b/microsetta_private_api/repo/tests/test_vioscreen_sessions.py @@ -278,6 +278,7 @@ def test_get_ffq_status_by_sample(self): # enumerate the empirically observed states from vioscreen # (is_complete, has_taken, exact_status) obs = r.get_ffq_status_by_source(SOURCE_ID_FOR_VIOSESSION) + print("obs", obs) self.assertEqual(obs[1], (True, True, 'Finished')) session.status = 'Started' From 9102276fafff77708b0bcb6ddc0c443d3c6e3268 Mon Sep 17 00:00:00 2001 From: ayobi Date: Tue, 10 Sep 2024 20:30:47 -0300 Subject: [PATCH 09/12] test4 --- .../repo/tests/test_vioscreen_sessions.py | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/microsetta_private_api/repo/tests/test_vioscreen_sessions.py b/microsetta_private_api/repo/tests/test_vioscreen_sessions.py index 3f09c529d..e0a14f957 100644 --- a/microsetta_private_api/repo/tests/test_vioscreen_sessions.py +++ b/microsetta_private_api/repo/tests/test_vioscreen_sessions.py @@ -267,6 +267,15 @@ def test_get_ffq_status_by_sample(self): r = VioscreenSessionRepo(t) r.upsert_session(session_copy) session = r.get_sessions_by_username(VIOSCREEN_USERNAME1)[0] + + cur = t.cursor() + query = """ + SELECT source_id + FROM ag.vioscreen_registry + WHERE sample_id = %s + """ + cur.execute(query, (BARCODE_UUID_FOR_VIOSESSION,)) + source_id = cur.fetchone() obs = r.get_ffq_status_by_source(SOURCE_ID_NOTIN_REGISTRY) self.assertEqual(obs, (False, False, None)) @@ -277,26 +286,25 @@ def test_get_ffq_status_by_sample(self): # enumerate the empirically observed states from vioscreen # (is_complete, has_taken, exact_status) - obs = r.get_ffq_status_by_source(SOURCE_ID_FOR_VIOSESSION) - print("obs", obs) - self.assertEqual(obs[1], (True, True, 'Finished')) + obs = r.get_ffq_status_by_source(source_id) + self.assertEqual(obs, (True, True, 'Finishedd')) session.status = 'Started' session.endDate = None r.upsert_session(session) - obs = r.get_ffq_status_by_source(SOURCE_ID_FOR_VIOSESSION) - self.assertEqual(obs[1], (False, True, 'Started')) + obs = r.get_ffq_status_by_source(source_id) + self.assertEqual(obs, (False, True, 'Started')) session.status = 'New' r.upsert_session(session) - obs = r.get_ffq_status_by_source(SOURCE_ID_FOR_VIOSESSION) - self.assertEqual(obs[1], (False, False, 'New')) + obs = r.get_ffq_status_by_source(source_id) + self.assertEqual(obs, (False, False, 'New')) session.status = 'Review' r.upsert_session(session) - obs = r.get_ffq_status_by_source(SOURCE_ID_FOR_VIOSESSION) - self.assertEqual(obs[1], (False, True, 'Review')) + obs = r.get_ffq_status_by_source(source_id) + self.assertEqual(obs, (False, True, 'Review')) if __name__ == '__main__': From 101667dcc0a3fbb48b8c5132b1c6205b82afac1b Mon Sep 17 00:00:00 2001 From: ayobi Date: Tue, 10 Sep 2024 20:53:41 -0300 Subject: [PATCH 10/12] fix vioscreen test --- .../repo/tests/test_vioscreen_sessions.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/microsetta_private_api/repo/tests/test_vioscreen_sessions.py b/microsetta_private_api/repo/tests/test_vioscreen_sessions.py index e0a14f957..12480f90d 100644 --- a/microsetta_private_api/repo/tests/test_vioscreen_sessions.py +++ b/microsetta_private_api/repo/tests/test_vioscreen_sessions.py @@ -267,14 +267,14 @@ def test_get_ffq_status_by_sample(self): r = VioscreenSessionRepo(t) r.upsert_session(session_copy) session = r.get_sessions_by_username(VIOSCREEN_USERNAME1)[0] - + cur = t.cursor() - query = """ + source_id_query = """ SELECT source_id FROM ag.vioscreen_registry WHERE sample_id = %s """ - cur.execute(query, (BARCODE_UUID_FOR_VIOSESSION,)) + cur.execute(source_id_query, (BARCODE_UUID_FOR_VIOSESSION,)) source_id = cur.fetchone() obs = r.get_ffq_status_by_source(SOURCE_ID_NOTIN_REGISTRY) @@ -287,24 +287,28 @@ def test_get_ffq_status_by_sample(self): # enumerate the empirically observed states from vioscreen # (is_complete, has_taken, exact_status) obs = r.get_ffq_status_by_source(source_id) - self.assertEqual(obs, (True, True, 'Finishedd')) + self.assertEqual(obs, [(True, True, 'Finished'), + (True, True, 'Finished')]) session.status = 'Started' session.endDate = None r.upsert_session(session) obs = r.get_ffq_status_by_source(source_id) - self.assertEqual(obs, (False, True, 'Started')) + self.assertEqual(obs, [(False, True, 'Started'), + (False, True, 'Started')]) session.status = 'New' r.upsert_session(session) obs = r.get_ffq_status_by_source(source_id) - self.assertEqual(obs, (False, False, 'New')) + self.assertEqual(obs, [(False, False, 'New'), + (False, False, 'New')]) session.status = 'Review' r.upsert_session(session) obs = r.get_ffq_status_by_source(source_id) - self.assertEqual(obs, (False, True, 'Review')) + self.assertEqual(obs, [(False, True, 'Review'), + (False, True, 'Review')]) if __name__ == '__main__': From 34cda807e982e4f49373d650e8f923e1eab7d5eb Mon Sep 17 00:00:00 2001 From: ayobi Date: Mon, 16 Sep 2024 18:28:17 -0300 Subject: [PATCH 11/12] update per_sample based on feedback --- .../admin/sample_summary.py | 23 ++++++++++++------- microsetta_private_api/repo/vioscreen_repo.py | 4 ---- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/microsetta_private_api/admin/sample_summary.py b/microsetta_private_api/admin/sample_summary.py index 48c3b4589..ae2339da6 100644 --- a/microsetta_private_api/admin/sample_summary.py +++ b/microsetta_private_api/admin/sample_summary.py @@ -49,10 +49,24 @@ def per_sample(project, barcodes, strip_sampleid): barcode_project = '; '.join(sorted(all_projects)) if source is not None and source_type == Source.SOURCE_TYPE_HUMAN: - vio_id = template_repo.get_vioscreen_id_if_exists(account.id, source.id, sample.id) + # fall back on matching with source id + if not vio_id: + vio_id = \ + template_repo.get_vioscreen_id_if_exists(account.id, + source.id, + None) + if source: + ffq_complete, ffq_taken, _ = \ + vs_repo.get_ffq_status_by_source(source.id) + else: + ffq_complete = False + ffq_taken = False + else: + ffq_complete = False + ffq_taken = False # at least one sample has been observed that "is_microsetta", # described in the barcodes.project_barcode table, but which is @@ -80,13 +94,6 @@ def per_sample(project, barcodes, strip_sampleid): sample_date = None sample_time = None - if source: - ffq_complete, ffq_taken, _ = \ - vs_repo.get_ffq_status_by_source(source.id) - else: - ffq_complete = False - ffq_taken = False - summary = { "sampleid": None if strip_sampleid else barcode, "project": barcode_project, diff --git a/microsetta_private_api/repo/vioscreen_repo.py b/microsetta_private_api/repo/vioscreen_repo.py index 4bc467e3e..4a9aa36e0 100644 --- a/microsetta_private_api/repo/vioscreen_repo.py +++ b/microsetta_private_api/repo/vioscreen_repo.py @@ -55,10 +55,6 @@ def upsert_session(self, session): {doupdateset} """, tuple([getattr(session, attr) for attr in self.COLS])) - cur.execute("SELECT * FROM ag.vioscreen_sessions " - "WHERE sessionId = %s", (session.sessionId,)) - rows = cur.fetchall() - print("Upserted rows:", rows) return cur.rowcount == 1 def get_session(self, sessionId): From c0c97c2c63ff70335ba8be71b9e492fe6bc129b6 Mon Sep 17 00:00:00 2001 From: ayobi Date: Tue, 17 Sep 2024 16:57:34 -0300 Subject: [PATCH 12/12] use vio_id instead of source, update query --- .../admin/sample_summary.py | 4 +- .../repo/tests/test_vioscreen_sessions.py | 33 +++++---------- microsetta_private_api/repo/vioscreen_repo.py | 41 +++++++++++++------ 3 files changed, 41 insertions(+), 37 deletions(-) diff --git a/microsetta_private_api/admin/sample_summary.py b/microsetta_private_api/admin/sample_summary.py index ae2339da6..5b3312571 100644 --- a/microsetta_private_api/admin/sample_summary.py +++ b/microsetta_private_api/admin/sample_summary.py @@ -58,9 +58,9 @@ def per_sample(project, barcodes, strip_sampleid): template_repo.get_vioscreen_id_if_exists(account.id, source.id, None) - if source: + if vio_id: ffq_complete, ffq_taken, _ = \ - vs_repo.get_ffq_status_by_source(source.id) + vs_repo.get_ffq_status_by_vio_id(vio_id) else: ffq_complete = False ffq_taken = False diff --git a/microsetta_private_api/repo/tests/test_vioscreen_sessions.py b/microsetta_private_api/repo/tests/test_vioscreen_sessions.py index 12480f90d..51e5781b0 100644 --- a/microsetta_private_api/repo/tests/test_vioscreen_sessions.py +++ b/microsetta_private_api/repo/tests/test_vioscreen_sessions.py @@ -268,17 +268,8 @@ def test_get_ffq_status_by_sample(self): r.upsert_session(session_copy) session = r.get_sessions_by_username(VIOSCREEN_USERNAME1)[0] - cur = t.cursor() - source_id_query = """ - SELECT source_id - FROM ag.vioscreen_registry - WHERE sample_id = %s - """ - cur.execute(source_id_query, (BARCODE_UUID_FOR_VIOSESSION,)) - source_id = cur.fetchone() - - obs = r.get_ffq_status_by_source(SOURCE_ID_NOTIN_REGISTRY) - self.assertEqual(obs, (False, False, None)) + obs = r.get_ffq_status_by_vio_id(VIOSCREEN_USERNAME1) + self.assertEqual(obs, (False, False, 'something')) session.status = 'Finished' session.endDate = _to_dt(2, 1, 1970) @@ -286,29 +277,25 @@ def test_get_ffq_status_by_sample(self): # enumerate the empirically observed states from vioscreen # (is_complete, has_taken, exact_status) - obs = r.get_ffq_status_by_source(source_id) - self.assertEqual(obs, [(True, True, 'Finished'), - (True, True, 'Finished')]) + obs = r.get_ffq_status_by_vio_id(VIOSCREEN_USERNAME1) + self.assertEqual(obs, (True, True, 'Finished')) session.status = 'Started' session.endDate = None r.upsert_session(session) - obs = r.get_ffq_status_by_source(source_id) - self.assertEqual(obs, [(False, True, 'Started'), - (False, True, 'Started')]) + obs = r.get_ffq_status_by_vio_id(VIOSCREEN_USERNAME1) + self.assertEqual(obs, (False, True, 'Started')) session.status = 'New' r.upsert_session(session) - obs = r.get_ffq_status_by_source(source_id) - self.assertEqual(obs, [(False, False, 'New'), - (False, False, 'New')]) + obs = r.get_ffq_status_by_vio_id(VIOSCREEN_USERNAME1) + self.assertEqual(obs, (False, False, 'New')) session.status = 'Review' r.upsert_session(session) - obs = r.get_ffq_status_by_source(source_id) - self.assertEqual(obs, [(False, True, 'Review'), - (False, True, 'Review')]) + obs = r.get_ffq_status_by_vio_id(VIOSCREEN_USERNAME1) + self.assertEqual(obs, (False, True, 'Review')) if __name__ == '__main__': diff --git a/microsetta_private_api/repo/vioscreen_repo.py b/microsetta_private_api/repo/vioscreen_repo.py index 4a9aa36e0..55f3f1e4c 100644 --- a/microsetta_private_api/repo/vioscreen_repo.py +++ b/microsetta_private_api/repo/vioscreen_repo.py @@ -168,7 +168,7 @@ def get_unfinished_sessions(self): return not_in_vioscreen_sessions + incomplete_sessions - def get_ffq_status_by_source(self, source_uuid): + def get_ffq_status_by_vio_id(self, vio_id): """Obtain the FFQ status for a given source Parameters @@ -186,21 +186,38 @@ def get_ffq_status_by_source(self, source_uuid): if there is no FFQ associated with the sample. """ with self._transaction.cursor() as cur: - cur.execute("""SELECT status + cur.execute("""SELECT source_id + FROM ag.vioscreen_registry + WHERE vio_id = %s""", (vio_id, )) + + source_res = cur.fetchone() + + if source_res is None: + return (False, False, None) + + source_id = source_res[0] + + cur.execute("""SELECT vs.status, akb.sample_date, + akb.sample_time, vs.startdate FROM ag.vioscreen_sessions AS vs JOIN ag.vioscreen_registry AS vr - ON vs.username=vr.vio_id - WHERE source_id=%s""", (source_uuid, )) - res = cur.fetchall() - if len(res) == 0: + ON vs.username = vr.vio_id + LEFT JOIN ag.ag_kit_barcodes AS akb + ON vr.source_id = akb.source_id + WHERE vr.source_id = %s + ORDER BY ABS(EXTRACT(EPOCH FROM + (akb.sample_date - vs.startdate))) + LIMIT 1""", (source_id, )) + + res = cur.fetchone() + + if res is None: return (False, False, None) else: - results = [] - for status in res: - is_complete = status[0] == 'Finished' - is_taken = status[0] in ('Started', 'Review', 'Finished') - results.append((is_complete, is_taken, status[0])) - return results + status = res[0] + is_complete = status == 'Finished' + is_taken = status in ('Started', 'Review', 'Finished') + return is_complete, is_taken, status def get_missing_ffqs(self): """The set of valid sessions which lack FFQ data