From 9c4ea80c2785ddf60d49a6279affead6dba080d6 Mon Sep 17 00:00:00 2001 From: Kelsey Smuczynski Date: Tue, 27 Jan 2026 20:31:30 -0700 Subject: [PATCH 1/7] feat: enhance Chemistry Sample Info admin view with additional fields and configurations - Keep existing field order/labels aligned with legacy model - Set ThingAdmin.identity to thing for stable linking - Add HasOne("thing") relationship link in Chemistry Sample Info list/detail --- admin/views/chemistry_sampleinfo.py | 75 ++++++++++++++++++++--------- admin/views/thing.py | 1 + 2 files changed, 54 insertions(+), 22 deletions(-) diff --git a/admin/views/chemistry_sampleinfo.py b/admin/views/chemistry_sampleinfo.py index d2179d4a..b40c79a7 100644 --- a/admin/views/chemistry_sampleinfo.py +++ b/admin/views/chemistry_sampleinfo.py @@ -27,6 +27,10 @@ FK Change (2026-01): - thing_id: Integer FK to Thing.id """ +import uuid + +from starlette.requests import Request +from starlette_admin.fields import HasOne from admin.views.base import OcotilloModelView @@ -38,39 +42,73 @@ class ChemistrySampleInfoAdmin(OcotilloModelView): # ========== Basic Configuration ========== - name = "Chemistry Sample Info" - label = "Chemistry Sample Info" + name = "NMA Chemistry Sample Info" + label = "NMA Chemistry Sample Info" icon = "fa fa-flask" # Integer PK pk_attr = "id" pk_type = int + def can_create(self, request: Request) -> bool: + return False + + def can_edit(self, request: Request) -> bool: + return False + + def can_delete(self, request: Request) -> bool: + return False + # ========== List View ========== - sortable_fields = [ + list_fields = [ "id", "nma_sample_pt_id", - "nma_object_id", + "nma_wclab_id", "nma_sample_point_id", + "nma_object_id", + "nma_location_id", + "thing_id", + HasOne("thing", identity="thing"), + "collection_date", + "collection_method", + "collected_by", + "analyses_agency", + "sample_type", + "sample_material_not_h2o", + "water_type", + "study_sample", + "data_source", + "data_quality", + "public_release", + "added_day_to_date", + "added_month_day_to_date", + "sample_notes", + ] + + sortable_fields = [ + "id", + "nma_sample_pt_id", "nma_wclab_id", + "nma_sample_point_id", + "nma_object_id", "collection_date", "sample_type", "data_source", "data_quality", "public_release", + ] fields_default_sort = [("collection_date", True)] searchable_fields = [ - "nma_sample_point_id", "nma_sample_pt_id", "nma_wclab_id", + "nma_sample_point_id", + "collection_date", "collected_by", "analyses_agency", - "sample_notes", - "collection_date", "sample_type", "sample_material_not_h2o", "water_type", @@ -78,6 +116,7 @@ class ChemistrySampleInfoAdmin(OcotilloModelView): "data_source", "data_quality", "public_release", + "sample_notes", ] page_size = 50 @@ -86,13 +125,14 @@ class ChemistrySampleInfoAdmin(OcotilloModelView): # ========== Form View ========== fields = [ - "id", + "id" "nma_sample_pt_id", + "nma_wclab_id", "nma_sample_point_id", "nma_object_id", - "nma_wclab_id", "nma_location_id", "thing_id", + HasOne("thing", identity="thing"), "collection_date", "collection_method", "collected_by", @@ -109,30 +149,21 @@ class ChemistrySampleInfoAdmin(OcotilloModelView): "sample_notes", ] - exclude_fields_from_create = [ - "id", - "nma_object_id", - ] - - exclude_fields_from_edit = [ - "id", - "nma_object_id", - ] field_labels = { "id": "ID", "nma_sample_pt_id": "NMA SamplePtID (Legacy)", - "nma_sample_point_id": "NMA SamplePointID (Legacy)", - "nma_object_id": "NMA OBJECTID (Legacy)", "nma_wclab_id": "NMA WCLab_ID (Legacy)", - "nma_location_id": "NMA LocationId (Legacy)", + "sample_point_id": "NMA SamplePointID (Legacy)", + "nma_object_id": "NMA OBJECTID (Legacy)", + "location_id": "NMA LocationId (Legacy)", "thing_id": "Thing ID", "collection_date": "Collection Date", "collection_method": "Collection Method", "collected_by": "Collected By", "analyses_agency": "Analyses Agency", "sample_type": "Sample Type", - "sample_material_not_h2o": "Sample Material (Not H2O)", + "sample_material_not_h2o": "Sample Material Not H2O", "water_type": "Water Type", "study_sample": "Study Sample", "data_source": "Data Source", diff --git a/admin/views/thing.py b/admin/views/thing.py index db4a0914..e7c413fb 100644 --- a/admin/views/thing.py +++ b/admin/views/thing.py @@ -36,6 +36,7 @@ class ThingAdmin(OcotilloModelView): # ========== Basic Configuration ========== + identity = "thing" name = "Things" label = "Things (Wells/Springs)" icon = "fa fa-tint" From 42cfb064eabccd95fb732db13a4c83603db606a6 Mon Sep 17 00:00:00 2001 From: Kelsey Smuczynski Date: Mon, 2 Feb 2026 14:53:42 -0700 Subject: [PATCH 2/7] Update admin/views/chemistry_sampleinfo.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- admin/views/chemistry_sampleinfo.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/admin/views/chemistry_sampleinfo.py b/admin/views/chemistry_sampleinfo.py index b40c79a7..1d5aff00 100644 --- a/admin/views/chemistry_sampleinfo.py +++ b/admin/views/chemistry_sampleinfo.py @@ -125,7 +125,7 @@ def can_delete(self, request: Request) -> bool: # ========== Form View ========== fields = [ - "id" + "id", "nma_sample_pt_id", "nma_wclab_id", "nma_sample_point_id", From 4923ea289a9c9e39677bec66091464e018ca6234 Mon Sep 17 00:00:00 2001 From: Kelsey Smuczynski Date: Mon, 2 Feb 2026 14:56:50 -0700 Subject: [PATCH 3/7] Update admin/views/chemistry_sampleinfo.py Add missing "nma_" prefix Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- admin/views/chemistry_sampleinfo.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/admin/views/chemistry_sampleinfo.py b/admin/views/chemistry_sampleinfo.py index 1d5aff00..b863c9e5 100644 --- a/admin/views/chemistry_sampleinfo.py +++ b/admin/views/chemistry_sampleinfo.py @@ -154,9 +154,9 @@ def can_delete(self, request: Request) -> bool: "id": "ID", "nma_sample_pt_id": "NMA SamplePtID (Legacy)", "nma_wclab_id": "NMA WCLab_ID (Legacy)", - "sample_point_id": "NMA SamplePointID (Legacy)", + "nma_sample_point_id": "NMA SamplePointID (Legacy)", "nma_object_id": "NMA OBJECTID (Legacy)", - "location_id": "NMA LocationId (Legacy)", + "nma_location_id": "NMA LocationId (Legacy)", "thing_id": "Thing ID", "collection_date": "Collection Date", "collection_method": "Collection Method", From 5410c4e1834bcc1d20b1036bd29fe62341624940 Mon Sep 17 00:00:00 2001 From: ksmuczynski Date: Tue, 3 Feb 2026 17:09:44 +0000 Subject: [PATCH 4/7] Formatting changes --- admin/views/chemistry_sampleinfo.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/admin/views/chemistry_sampleinfo.py b/admin/views/chemistry_sampleinfo.py index b863c9e5..5430715e 100644 --- a/admin/views/chemistry_sampleinfo.py +++ b/admin/views/chemistry_sampleinfo.py @@ -27,6 +27,7 @@ FK Change (2026-01): - thing_id: Integer FK to Thing.id """ + import uuid from starlette.requests import Request @@ -97,7 +98,6 @@ def can_delete(self, request: Request) -> bool: "data_source", "data_quality", "public_release", - ] fields_default_sort = [("collection_date", True)] @@ -149,7 +149,6 @@ def can_delete(self, request: Request) -> bool: "sample_notes", ] - field_labels = { "id": "ID", "nma_sample_pt_id": "NMA SamplePtID (Legacy)", From 240ae84e835faf583942242dc1840d30a5e7e358 Mon Sep 17 00:00:00 2001 From: Jake Ross Date: Wed, 4 Feb 2026 22:02:03 +1100 Subject: [PATCH 5/7] Apply suggestions from code review Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- admin/views/chemistry_sampleinfo.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/admin/views/chemistry_sampleinfo.py b/admin/views/chemistry_sampleinfo.py index 5430715e..eb2f7236 100644 --- a/admin/views/chemistry_sampleinfo.py +++ b/admin/views/chemistry_sampleinfo.py @@ -28,7 +28,7 @@ - thing_id: Integer FK to Thing.id """ -import uuid + from starlette.requests import Request from starlette_admin.fields import HasOne From 23ec192371da370b2b81db5c3275dc080743c517 Mon Sep 17 00:00:00 2001 From: jirhiker Date: Wed, 4 Feb 2026 11:02:22 +0000 Subject: [PATCH 6/7] Formatting changes --- admin/views/chemistry_sampleinfo.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/admin/views/chemistry_sampleinfo.py b/admin/views/chemistry_sampleinfo.py index eb2f7236..b588da03 100644 --- a/admin/views/chemistry_sampleinfo.py +++ b/admin/views/chemistry_sampleinfo.py @@ -28,8 +28,6 @@ - thing_id: Integer FK to Thing.id """ - - from starlette.requests import Request from starlette_admin.fields import HasOne From a2cd28260c351c703c6bb7e3ba16cea22e0369e7 Mon Sep 17 00:00:00 2001 From: Jake Ross Date: Wed, 4 Feb 2026 22:03:17 +1100 Subject: [PATCH 7/7] Update admin/views/chemistry_sampleinfo.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- admin/views/chemistry_sampleinfo.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/admin/views/chemistry_sampleinfo.py b/admin/views/chemistry_sampleinfo.py index b588da03..9aa6654e 100644 --- a/admin/views/chemistry_sampleinfo.py +++ b/admin/views/chemistry_sampleinfo.py @@ -28,8 +28,6 @@ - thing_id: Integer FK to Thing.id """ -from starlette.requests import Request -from starlette_admin.fields import HasOne from admin.views.base import OcotilloModelView