diff --git a/geomagio/api/db/metadata_table.py b/geomagio/api/db/metadata_table.py index 211a18044c4f675c3f659cad71ae6c2204bfbf33..69f2eb173e308324b8119534ca9d50e37009d286 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 e619c66362b8b4e960dd92cba5b5d88ff493b6b2..86fad54558903b4fb786e7f92416110ecb3e1530 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 655c33e59f0ec84b4329e5e3c6642c6dbe24882c..730c9a13afe19e8d3782a0736adf1767049b6237 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 ce2ad5211ac07c5023c4821396a8abe1ed1fd4f5..4dede4eeec2778f67a03b740bc465c7fb0325aad 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 36e6c3ebe3cd20d880c25ff0d683757c84a2d833..dd80ae06729915a6a04a2531bd7eb3d548180fd0 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 79cf886baa37a048046498d67b2bb785a9d21473..fee2df7f3a64f56b5bd642dd4a6c4ea40c9b4182 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 6f4eab2e8b8277a42774e2bc417c92a1fdaa7170..3f4f6c1bcab0b68a6bcd1fa1ab37ddc60010a5ee 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(), + ) )