From d915cbbf9790cb803e9830db12a022a5af4498b6 Mon Sep 17 00:00:00 2001 From: Tyler Adam Martinez Date: Fri, 23 Jan 2026 14:09:31 -0600 Subject: [PATCH 1/2] [admin/views/soil_rock_results] Add the SoilRockResultsAdmin pg --- admin/config.py | 83 ++++++++++++++++---------------- admin/views/__init__.py | 2 + admin/views/soil_rock_results.py | 70 +++++++++++++++++++++++++++ transfers/profiling.py | 6 ++- 4 files changed, 118 insertions(+), 43 deletions(-) create mode 100644 admin/views/soil_rock_results.py diff --git a/admin/config.py b/admin/config.py index df196ab0..c738fa6c 100644 --- a/admin/config.py +++ b/admin/config.py @@ -23,64 +23,62 @@ from admin.auth import NMSampleLocationsAuthProvider from admin.views import ( - LocationAdmin, - ThingAdmin, - ObservationAdmin, + AquiferSystemAdmin, + AquiferTypeAdmin, + AssetAdmin, + ChemistrySampleInfoAdmin, ContactAdmin, - SensorAdmin, + DataProvenanceAdmin, DeploymentAdmin, - LexiconTermAdmin, - LexiconCategoryAdmin, - AssetAdmin, - AquiferTypeAdmin, - AquiferSystemAdmin, + FieldActivityAdmin, + FieldEventAdmin, + GeologicFormationAdmin, GroupAdmin, - NotesAdmin, - SampleAdmin, HydraulicsDataAdmin, - ChemistrySampleInfoAdmin, - RadionuclidesAdmin, + LexiconCategoryAdmin, + LexiconTermAdmin, + LocationAdmin, MinorTraceChemistryAdmin, - GeologicFormationAdmin, - DataProvenanceAdmin, - TransducerObservationAdmin, - FieldEventAdmin, - FieldActivityAdmin, + NotesAdmin, + ObservationAdmin, ParameterAdmin, - SurfaceWaterDataAdmin, + RadionuclidesAdmin, + SampleAdmin, + SensorAdmin, + SoilRockResultsAdmin, StratigraphyAdmin, -) - -from db.engine import engine -from db.location import Location -from db.thing import Thing -from db.observation import Observation -from db.contact import Contact -from db.sensor import Sensor -from db.deployment import Deployment -from db.lexicon import ( - LexiconTerm, - LexiconCategory, + SurfaceWaterDataAdmin, + ThingAdmin, + TransducerObservationAdmin, ) from db.asset import Asset -from db.aquifer_type import AquiferType from db.aquifer_system import AquiferSystem +from db.aquifer_type import AquiferType +from db.contact import Contact +from db.data_provenance import DataProvenance +from db.deployment import Deployment +from db.engine import engine +from db.field import FieldActivity, FieldEvent +from db.geologic_formation import GeologicFormation from db.group import Group -from db.notes import Notes -from db.sample import Sample +from db.lexicon import LexiconCategory, LexiconTerm +from db.location import Location from db.nma_legacy import ( ChemistrySampleInfo, - NMAHydraulicsData, - NMARadionuclides, NMAMinorTraceChemistry, - SurfaceWaterData, + NMARadionuclides, + NMAHydraulicsData, + SoilRockResults, Stratigraphy, + SurfaceWaterData, ) -from db.geologic_formation import GeologicFormation -from db.data_provenance import DataProvenance -from db.transducer import TransducerObservation -from db.field import FieldEvent, FieldActivity +from db.notes import Notes +from db.observation import Observation from db.parameter import Parameter +from db.sample import Sample +from db.sensor import Sensor +from db.thing import Thing +from db.transducer import TransducerObservation def create_admin(app): @@ -173,6 +171,9 @@ def create_admin(app): # Stratigraphy admin.add_view(StratigraphyAdmin(Stratigraphy)) + # SoilRockResults + admin.add_view(SoilRockResultsAdmin(SoilRockResults)) + # Future: Add more views here as they are implemented # admin.add_view(SampleAdmin) # admin.add_view(GroupAdmin) diff --git a/admin/views/__init__.py b/admin/views/__init__.py index bbff75a7..5061ba72 100644 --- a/admin/views/__init__.py +++ b/admin/views/__init__.py @@ -43,6 +43,7 @@ from admin.views.radionuclides import RadionuclidesAdmin from admin.views.sample import SampleAdmin from admin.views.sensor import SensorAdmin +from admin.views.soil_rock_results import SoilRockResultsAdmin from admin.views.stratigraphy import StratigraphyAdmin from admin.views.surface_water import SurfaceWaterDataAdmin from admin.views.thing import ThingAdmin @@ -72,6 +73,7 @@ "RadionuclidesAdmin", "SampleAdmin", "SensorAdmin", + "SoilRockResultsAdmin", "StratigraphyAdmin", "SurfaceWaterDataAdmin", "ThingAdmin", diff --git a/admin/views/soil_rock_results.py b/admin/views/soil_rock_results.py new file mode 100644 index 00000000..00786058 --- /dev/null +++ b/admin/views/soil_rock_results.py @@ -0,0 +1,70 @@ +""" +SoilRockResultsAdmin view for legacy NMA_Soil_Rock_Results. +""" + +from admin.views.base import OcotilloModelView + + +class SoilRockResultsAdmin(OcotilloModelView): + """ + Read-only admin view for SoilRockResults legacy model. + """ + + # ========== Basic Configuration ========== + name = "NMA Soil Rock Results" + label = "NMA Soil Rock Results" + icon = "fa fa-mountain" + + # Pagination + page_size = 50 + page_size_options = [25, 50, 100, 200] + + # ========== List View ========== + list_fields = [ + "id", + "point_id", + "sample_type", + "date_sampled", + "d13c", + "d18o", + "sampled_by", + "thing_id", + ] + + sortable_fields = [ + "id", + "point_id", + ] + + searchable_fields = [ + "point_id", + "sample_type", + "date_sampled", + "sampled_by", + ] + + fields_default_sort = [("id", True)] + + # ========== Detail View ========== + fields = [ + "id", + "point_id", + "sample_type", + "date_sampled", + "d13c", + "d18o", + "sampled_by", + "thing_id", + ] + + # ========== Legacy Field Labels ========== + field_labels = { + "id": "id", + "point_id": "Point_ID", + "sample_type": "Sample Type", + "date_sampled": "Date Sampled", + "d13c": "d13C", + "d18o": "d18O", + "sampled_by": "Sampled by", + "thing_id": "ThingID", + } diff --git a/transfers/profiling.py b/transfers/profiling.py index f3ec5048..b8ae36bf 100644 --- a/transfers/profiling.py +++ b/transfers/profiling.py @@ -20,7 +20,7 @@ from dataclasses import dataclass from datetime import datetime from pathlib import Path -from typing import Callable, Iterable, Any +from typing import Callable, Iterable, Any, Optional from services.gcs_helper import get_storage_bucket from transfers.logger import logger @@ -84,8 +84,10 @@ def run( return result, artifact -def upload_profile_artifacts(artifacts: Iterable[ProfileArtifact]) -> None: +def upload_profile_artifacts(artifacts: Optional[Iterable[ProfileArtifact]]) -> None: """Upload generated profiling artifacts to the configured storage bucket.""" + if not artifacts: + return artifacts = list(artifacts) if not artifacts: From 7a16bc027ce6902770ad7f28cbdc2dca740bfea7 Mon Sep 17 00:00:00 2001 From: Tyler Adam Martinez Date: Fri, 23 Jan 2026 14:44:43 -0600 Subject: [PATCH 2/2] Undo changes in this file from last commit --- transfers/profiling.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/transfers/profiling.py b/transfers/profiling.py index b8ae36bf..f3ec5048 100644 --- a/transfers/profiling.py +++ b/transfers/profiling.py @@ -20,7 +20,7 @@ from dataclasses import dataclass from datetime import datetime from pathlib import Path -from typing import Callable, Iterable, Any, Optional +from typing import Callable, Iterable, Any from services.gcs_helper import get_storage_bucket from transfers.logger import logger @@ -84,10 +84,8 @@ def run( return result, artifact -def upload_profile_artifacts(artifacts: Optional[Iterable[ProfileArtifact]]) -> None: +def upload_profile_artifacts(artifacts: Iterable[ProfileArtifact]) -> None: """Upload generated profiling artifacts to the configured storage bucket.""" - if not artifacts: - return artifacts = list(artifacts) if not artifacts: