Skip to content
Snippets Groups Projects
Commit d8b05e53 authored by Jeremy M Fee's avatar Jeremy M Fee
Browse files

Merge branch 'webserviceQuery' into 'master'

Webservice query

See merge request !46
parents d71af8ba c32bb4b6
No related branches found
No related tags found
2 merge requests!146Release CMO metadata to production,!46Webservice query
Pipeline #27523 failed
...@@ -83,8 +83,8 @@ async def create_metadata(meta: Metadata) -> Metadata: ...@@ -83,8 +83,8 @@ async def create_metadata(meta: Metadata) -> Metadata:
query = metadata.insert() query = metadata.insert()
values = meta.datetime_dict(exclude={"id"}, exclude_none=True) values = meta.datetime_dict(exclude={"id"}, exclude_none=True)
query = query.values(**values) query = query.values(**values)
metadata.id = await database.execute(query) meta.id = await database.execute(query)
return metadata return meta
async def delete_metadata(id: int) -> None: async def delete_metadata(id: int) -> None:
...@@ -102,21 +102,24 @@ async def get_metadata( ...@@ -102,21 +102,24 @@ async def get_metadata(
category: MetadataCategory = None, category: MetadataCategory = None,
starttime: datetime = None, starttime: datetime = None,
endtime: datetime = None, endtime: datetime = None,
created_after: datetime = None,
created_before: datetime = None,
data_valid: bool = None, data_valid: bool = None,
metadata_valid: bool = None, metadata_valid: bool = None,
): ):
query = metadata.select() query = metadata.select()
if id is not None: if id:
query = query.where(metadata.c.id == id) query = query.where(metadata.c.id == id)
if category: if category:
query = query.where(metadata.c.category == category) query = query.where(metadata.c.category == category)
if network or station or channel or location: if network:
query = ( query = query.where(metadata.c.network == network)
query.where(metadata.c.network.like(network or "%")) if station:
.where(metadata.c.station.like(station or "%")) query = query.where(metadata.c.station == station)
.where(metadata.c.channel.like(channel or "%")) if channel:
.where(metadata.c.location.like(location or "%")) query = query.where(metadata.c.channel.like(channel))
) if location:
query = query.where(metadata.c.location.like(location))
if starttime: if starttime:
query = query.where( query = query.where(
or_(metadata.c.endtime == None, metadata.c.endtime > starttime) or_(metadata.c.endtime == None, metadata.c.endtime > starttime)
...@@ -125,6 +128,10 @@ async def get_metadata( ...@@ -125,6 +128,10 @@ async def get_metadata(
query = query.where( query = query.where(
or_(metadata.c.starttime == None, metadata.c.starttime < endtime) 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: if data_valid is not None:
query = query.where(metadata.c.data_valid == data_valid) query = query.where(metadata.c.data_valid == data_valid)
if metadata_valid is not None: if metadata_valid is not None:
......
...@@ -12,6 +12,8 @@ class MetadataQuery(BaseModel): ...@@ -12,6 +12,8 @@ class MetadataQuery(BaseModel):
category: MetadataCategory = None category: MetadataCategory = None
starttime: UTCDateTime = None starttime: UTCDateTime = None
endtime: UTCDateTime = None endtime: UTCDateTime = None
created_after: UTCDateTime = None
created_before: UTCDateTime = None
network: str = None network: str = None
station: str = None station: str = None
channel: str = None channel: str = None
...@@ -21,11 +23,7 @@ class MetadataQuery(BaseModel): ...@@ -21,11 +23,7 @@ class MetadataQuery(BaseModel):
def datetime_dict(self, **kwargs): def datetime_dict(self, **kwargs):
values = self.dict(**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: if key in values and values[key] is not None:
values[key] = values[key].datetime.replace(tzinfo=timezone.utc) values[key] = values[key].datetime.replace(tzinfo=timezone.utc)
return values 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( ...@@ -36,7 +36,7 @@ async def create_metadata(
user: User = Depends(require_user()), user: User = Depends(require_user()),
): ):
metadata = await metadata_table.create_metadata(metadata) 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}") @router.delete("/metadata/{id}")
...@@ -51,6 +51,8 @@ async def get_metadata( ...@@ -51,6 +51,8 @@ async def get_metadata(
category: MetadataCategory = None, category: MetadataCategory = None,
starttime: UTCDateTime = None, starttime: UTCDateTime = None,
endtime: UTCDateTime = None, endtime: UTCDateTime = None,
created_after: UTCDateTime = None,
created_before: UTCDateTime = None,
network: str = None, network: str = None,
station: str = None, station: str = None,
channel: str = None, channel: str = None,
...@@ -62,6 +64,8 @@ async def get_metadata( ...@@ -62,6 +64,8 @@ async def get_metadata(
category=category, category=category,
starttime=starttime, starttime=starttime,
endtime=endtime, endtime=endtime,
created_after=created_after,
created_before=created_before,
network=network, network=network,
station=station, station=station,
channel=channel, channel=channel,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment