diff --git a/geomagio/api/ws/app.py b/geomagio/api/ws/app.py index 6f2c49e555bd6913befc73169dd22539089d56cb..e599c664275a494624ce913d01298d0da85cc0af 100644 --- a/geomagio/api/ws/app.py +++ b/geomagio/api/ws/app.py @@ -7,7 +7,7 @@ from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import JSONResponse, PlainTextResponse, RedirectResponse from obspy import UTCDateTime -from . import algorithms, data, elements, observatories +from . import algorithms, data, elements, metadata, observatories ERROR_CODE_MESSAGES = { @@ -20,6 +20,7 @@ ERROR_CODE_MESSAGES = { 503: "Service Unavailable", } +METADATA_ENDPOINT = bool(os.getenv("METADATA_ENDPOINT", False)) VERSION = os.getenv("GEOMAG_VERSION", "version") @@ -30,6 +31,9 @@ app.include_router(data.router) app.include_router(elements.router) app.include_router(observatories.router) +if METADATA_ENDPOINT: + app.include_router(metadata.router) + @app.middleware("http") async def add_headers(request: Request, call_next): diff --git a/geomagio/api/ws/metadata.py b/geomagio/api/ws/metadata.py new file mode 100644 index 0000000000000000000000000000000000000000..7c95aaa3669afcfe27b9e984b945f7c0dc067243 --- /dev/null +++ b/geomagio/api/ws/metadata.py @@ -0,0 +1,37 @@ +from typing import List + +from fastapi import APIRouter, Body, Response +from obspy import UTCDateTime + +from ...metadata import Metadata, MetadataCategory +from ..secure.MetadataQuery import MetadataQuery +from ..db import metadata_table + +router = APIRouter() + + +@router.get("/metadata", response_model=List[Metadata]) +async def get_metadata( + category: MetadataCategory = None, + starttime: UTCDateTime = None, + endtime: UTCDateTime = None, + network: str = None, + station: str = None, + channel: str = None, + location: str = None, + data_valid: bool = None, + metadata_valid: bool = True, +): + query = MetadataQuery( + category=category, + starttime=starttime, + endtime=endtime, + network=network, + station=station, + channel=channel, + location=location, + data_valid=data_valid, + metadata_valid=metadata_valid, + ) + metas = await metadata_table.get_metadata(**query.datetime_dict(exclude={"id"})) + return metas