From 5460867f2d716d79b2c41fe5bfa082b1e65426e0 Mon Sep 17 00:00:00 2001 From: pcain-usgs <pcain@usgs.gov> Date: Wed, 31 Mar 2021 11:10:18 -0600 Subject: [PATCH] Add update, reviewed, and metadata_id parameters to metadata --- geomagio/api/db/metadata_table.py | 14 ++++++++++---- geomagio/api/secure/metadata.py | 2 ++ geomagio/api/ws/metadata.py | 2 ++ geomagio/metadata/Metadata.py | 12 ++++++++---- geomagio/metadata/MetadataQuery.py | 1 + geomagio/metadata/main.py | 2 ++ test_metadata.py | 9 +++++++-- 7 files changed, 32 insertions(+), 10 deletions(-) diff --git a/geomagio/api/db/metadata_table.py b/geomagio/api/db/metadata_table.py index 211a18044..69f2eb173 100644 --- a/geomagio/api/db/metadata_table.py +++ b/geomagio/api/db/metadata_table.py @@ -24,9 +24,9 @@ metadata = Table( default=sqlalchemy_utc.utcnow(), index=True, ), - # reviewer - Column("reviewed_by", String(length=255), index=True, nullable=True), - Column("reviewed_time", sqlalchemy_utc.UtcDateTime, index=True, nullable=True), + # editor + Column("updated_by", String(length=255), index=True, nullable=True), + Column("updated_time", sqlalchemy_utc.UtcDateTime, index=True, nullable=True), # time range Column("starttime", sqlalchemy_utc.UtcDateTime, index=True, nullable=True), Column("endtime", sqlalchemy_utc.UtcDateTime, index=True, nullable=True), @@ -43,6 +43,8 @@ metadata = Table( Column("data_valid", Boolean, default=True, index=True), # whether metadata is valid (based on review) Column("metadata_valid", Boolean, default=True, index=True), + # whether metadata has been reviewed + Column("reviewed", Boolean, default=True, index=True), # metadata json blob Column("metadata", JSON, nullable=True), # general comment @@ -65,6 +67,7 @@ metadata = Table( # valid "metadata_valid", "data_valid", + "reviewed", ), Index( "index_category_time", @@ -104,6 +107,7 @@ async def get_metadata( created_before: datetime = None, data_valid: bool = None, metadata_valid: bool = None, + reviewed: bool = None, ): query = metadata.select() if id: @@ -134,12 +138,14 @@ async def get_metadata( query = query.where(metadata.c.data_valid == data_valid) if metadata_valid is not None: query = query.where(metadata.c.metadata_valid == metadata_valid) + if reviewed is not None: + query = query.where(metadata.c.reviewed == reviewed) rows = await database.fetch_all(query) return [Metadata(**row) for row in rows] async def update_metadata(meta: Metadata) -> None: query = metadata.update().where(metadata.c.id == meta.id) - values = meta.datetime_dict(exclude={"id"}) + values = meta.datetime_dict(exclude={"id", "metadata_id"}) query = query.values(**values) await database.execute(query) diff --git a/geomagio/api/secure/metadata.py b/geomagio/api/secure/metadata.py index e619c6636..86fad5455 100644 --- a/geomagio/api/secure/metadata.py +++ b/geomagio/api/secure/metadata.py @@ -58,6 +58,7 @@ async def get_metadata( location: str = None, data_valid: bool = None, metadata_valid: bool = True, + reviewed: bool = None, ): query = MetadataQuery( category=category, @@ -71,6 +72,7 @@ async def get_metadata( location=location, data_valid=data_valid, metadata_valid=metadata_valid, + reviewed=reviewed, ) metas = await metadata_table.get_metadata(**query.datetime_dict(exclude={"id"})) return metas diff --git a/geomagio/api/ws/metadata.py b/geomagio/api/ws/metadata.py index 655c33e59..730c9a13a 100644 --- a/geomagio/api/ws/metadata.py +++ b/geomagio/api/ws/metadata.py @@ -20,6 +20,7 @@ async def get_metadata( location: str = None, data_valid: bool = None, metadata_valid: bool = True, + reviewed: bool = None, ): query = MetadataQuery( category=category, @@ -31,6 +32,7 @@ async def get_metadata( location=location, data_valid=data_valid, metadata_valid=metadata_valid, + reviewed=reviewed, ) metas = await metadata_table.get_metadata(**query.datetime_dict(exclude={"id"})) return metas diff --git a/geomagio/metadata/Metadata.py b/geomagio/metadata/Metadata.py index ce2ad5211..4dede4eee 100644 --- a/geomagio/metadata/Metadata.py +++ b/geomagio/metadata/Metadata.py @@ -48,12 +48,14 @@ class Metadata(BaseModel): # database id id: int = None + # metadata history id referencing database id + metadata_id: int = None # author created_by: str = None created_time: UTCDateTime = None - # reviewer - reviewed_by: str = None - reviewed_time: UTCDateTime = None + # editor + updated_by: str = None + updated_time: UTCDateTime = None # time range starttime: UTCDateTime = None endtime: UTCDateTime = None @@ -70,6 +72,8 @@ class Metadata(BaseModel): data_valid: bool = True # whether metadata is valid (based on review) metadata_valid: bool = True + # whether metadata has been reviewed + reviewed: bool = False # metadata json blob metadata: Dict = None # general comment @@ -79,7 +83,7 @@ class Metadata(BaseModel): def datetime_dict(self, **kwargs): values = self.dict(**kwargs) - for key in ["created_time", "reviewed_time", "starttime", "endtime"]: + for key in ["created_time", "updated_time", "starttime", "endtime"]: if key in values and values[key] is not None: values[key] = values[key].datetime.replace(tzinfo=timezone.utc) return values diff --git a/geomagio/metadata/MetadataQuery.py b/geomagio/metadata/MetadataQuery.py index 36e6c3ebe..dd80ae067 100644 --- a/geomagio/metadata/MetadataQuery.py +++ b/geomagio/metadata/MetadataQuery.py @@ -21,6 +21,7 @@ class MetadataQuery(BaseModel): location: str = None data_valid: Optional[bool] = None metadata_valid: Optional[bool] = None + reviewed: Optional[bool] = None def datetime_dict(self, **kwargs): values = self.dict(**kwargs) diff --git a/geomagio/metadata/main.py b/geomagio/metadata/main.py index 79cf886ba..fee2df7f3 100644 --- a/geomagio/metadata/main.py +++ b/geomagio/metadata/main.py @@ -148,6 +148,7 @@ def get( location: Optional[str] = None, metadata_valid: Optional[bool] = None, network: Optional[str] = None, + reviewed: Optional[bool] = None, starttime: Optional[str] = None, station: Optional[str] = None, url: str = GEOMAG_API_URL, @@ -163,6 +164,7 @@ def get( location=location, metadata_valid=metadata_valid, network=network, + reviewed=reviewed, starttime=UTCDateTime(starttime) if starttime else None, station=station, ) diff --git a/test_metadata.py b/test_metadata.py index 6f4eab2e8..3f4f6c1bc 100644 --- a/test_metadata.py +++ b/test_metadata.py @@ -137,7 +137,7 @@ for reading in readings: category=MetadataCategory.READING, created_by="test_metadata.py", network="NT", - reviewed_by=reviewer, + updated_by=reviewer, starttime=reading.time, endtime=reading.time, station=reading.metadata["station"], @@ -164,7 +164,12 @@ adjusted_matrix = AdjustedMatrix( ) test_metadata.append( - Metadata(station="FRD", network="NT", metadata=adjusted_matrix.dict()) + Metadata( + category="adjusted-matrix", + station="FRD", + network="NT", + metadata=adjusted_matrix.dict(), + ) ) -- GitLab