Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • ghsc/geomag/geomag-algorithms
1 result
Show changes
Commits on Source (11)
......@@ -83,8 +83,8 @@ async def create_metadata(meta: Metadata) -> Metadata:
query = metadata.insert()
values = meta.datetime_dict(exclude={"id"}, exclude_none=True)
query = query.values(**values)
metadata.id = await database.execute(query)
return metadata
meta.id = await database.execute(query)
return meta
async def delete_metadata(id: int) -> None:
......@@ -102,21 +102,24 @@ async def get_metadata(
category: MetadataCategory = None,
starttime: datetime = None,
endtime: datetime = None,
created_after: datetime = None,
created_before: datetime = None,
data_valid: bool = None,
metadata_valid: bool = None,
):
query = metadata.select()
if id is not None:
if id:
query = query.where(metadata.c.id == id)
if category:
query = query.where(metadata.c.category == category)
if network or station or channel or location:
query = (
query.where(metadata.c.network.like(network or "%"))
.where(metadata.c.station.like(station or "%"))
.where(metadata.c.channel.like(channel or "%"))
.where(metadata.c.location.like(location or "%"))
)
if network:
query = query.where(metadata.c.network == network)
if station:
query = query.where(metadata.c.station == station)
if channel:
query = query.where(metadata.c.channel.like(channel))
if location:
query = query.where(metadata.c.location.like(location))
if starttime:
query = query.where(
or_(metadata.c.endtime == None, metadata.c.endtime > starttime)
......@@ -125,6 +128,10 @@ async def get_metadata(
query = query.where(
or_(metadata.c.starttime == None, metadata.c.starttime < endtime)
)
if created_after:
query = query.where(metadata.c.created_time > created_after)
if created_before:
query = query.where(metadata.c.created_time < created_before)
if data_valid is not None:
query = query.where(metadata.c.data_valid == data_valid)
if metadata_valid is not None:
......
......@@ -12,6 +12,8 @@ class MetadataQuery(BaseModel):
category: MetadataCategory = None
starttime: UTCDateTime = None
endtime: UTCDateTime = None
created_after: UTCDateTime = None
created_before: UTCDateTime = None
network: str = None
station: str = None
channel: str = None
......@@ -21,11 +23,7 @@ class MetadataQuery(BaseModel):
def datetime_dict(self, **kwargs):
values = self.dict(**kwargs)
for key in ["starttime", "endtime"]:
for key in ["starttime", "endtime", "created_after", "created_before"]:
if key in values and values[key] is not None:
values[key] = values[key].datetime.replace(tzinfo=timezone.utc)
return values
@validator("starttime")
def set_default_starttime(cls, starttime: UTCDateTime = None) -> UTCDateTime:
return starttime or UTCDateTime() - 30 * 86400
......@@ -36,7 +36,7 @@ async def create_metadata(
user: User = Depends(require_user()),
):
metadata = await metadata_table.create_metadata(metadata)
return Response(metadata, status_code=201, media_type="application/json")
return Response(metadata.json(), status_code=201, media_type="application/json")
@router.delete("/metadata/{id}")
......@@ -51,6 +51,8 @@ async def get_metadata(
category: MetadataCategory = None,
starttime: UTCDateTime = None,
endtime: UTCDateTime = None,
created_after: UTCDateTime = None,
created_before: UTCDateTime = None,
network: str = None,
station: str = None,
channel: str = None,
......@@ -62,6 +64,8 @@ async def get_metadata(
category=category,
starttime=starttime,
endtime=endtime,
created_after=created_after,
created_before=created_before,
network=network,
station=station,
channel=channel,
......