From d4503891abf776a2aa59a0c8764fdbb2c87d7562 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Tue, 8 Sep 2020 14:12:49 -0600
Subject: [PATCH 1/4] add readonly, public metadata service

---
 geomagio/api/ws/app.py      |  3 ++-
 geomagio/api/ws/metadata.py | 37 +++++++++++++++++++++++++++++++++++++
 2 files changed, 39 insertions(+), 1 deletion(-)
 create mode 100644 geomagio/api/ws/metadata.py

diff --git a/geomagio/api/ws/app.py b/geomagio/api/ws/app.py
index 6f2c49e55..911d3150d 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 = {
@@ -28,6 +28,7 @@ app = FastAPI(docs_url="/docs", root_path="/ws")
 app.include_router(algorithms.router)
 app.include_router(data.router)
 app.include_router(elements.router)
+app.include_router(metadata.router)
 app.include_router(observatories.router)
 
 
diff --git a/geomagio/api/ws/metadata.py b/geomagio/api/ws/metadata.py
new file mode 100644
index 000000000..7c95aaa36
--- /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
-- 
GitLab


From 07965f6cec77fdc84444961e8a47c2b38d3cf4e2 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Tue, 8 Sep 2020 17:33:17 -0600
Subject: [PATCH 2/4] add METADATA_ENDPOINT env for public metadata endpoint

---
 geomagio/api/ws/app.py | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/geomagio/api/ws/app.py b/geomagio/api/ws/app.py
index 911d3150d..58fa6d409 100644
--- a/geomagio/api/ws/app.py
+++ b/geomagio/api/ws/app.py
@@ -20,6 +20,7 @@ ERROR_CODE_MESSAGES = {
     503: "Service Unavailable",
 }
 
+metadata_endpoint = os.getenv("METADATA_ENDPOINT", False)
 VERSION = os.getenv("GEOMAG_VERSION", "version")
 
 
@@ -28,9 +29,11 @@ app = FastAPI(docs_url="/docs", root_path="/ws")
 app.include_router(algorithms.router)
 app.include_router(data.router)
 app.include_router(elements.router)
-app.include_router(metadata.router)
 app.include_router(observatories.router)
 
+if metadata_endpoint == True:
+    app.include_router(metadata.router)
+
 
 @app.middleware("http")
 async def add_headers(request: Request, call_next):
-- 
GitLab


From 95bd17d3b19d0aea96e96c5576985735249043d4 Mon Sep 17 00:00:00 2001
From: Travis Rivers <trivers@contractor.usgs.gov>
Date: Tue, 8 Sep 2020 17:40:37 -0600
Subject: [PATCH 3/4] upper case metadata endpoint variable

---
 geomagio/api/ws/app.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/geomagio/api/ws/app.py b/geomagio/api/ws/app.py
index 58fa6d409..63b838480 100644
--- a/geomagio/api/ws/app.py
+++ b/geomagio/api/ws/app.py
@@ -20,7 +20,7 @@ ERROR_CODE_MESSAGES = {
     503: "Service Unavailable",
 }
 
-metadata_endpoint = os.getenv("METADATA_ENDPOINT", False)
+METADATA_ENDPOINT = os.getenv("METADATA_ENDPOINT", False)
 VERSION = os.getenv("GEOMAG_VERSION", "version")
 
 
@@ -31,7 +31,7 @@ app.include_router(data.router)
 app.include_router(elements.router)
 app.include_router(observatories.router)
 
-if metadata_endpoint == True:
+if METADATA_ENDPOINT == True:
     app.include_router(metadata.router)
 
 
-- 
GitLab


From eb899b5684190864ebe5084cd5e2cf5a59f71ec6 Mon Sep 17 00:00:00 2001
From: Jeremy M Fee <jmfee@usgs.gov>
Date: Tue, 8 Sep 2020 23:52:43 +0000
Subject: [PATCH 4/4] Treat METADATA_ENDPOINT as boolean

---
 geomagio/api/ws/app.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/geomagio/api/ws/app.py b/geomagio/api/ws/app.py
index 63b838480..e599c6642 100644
--- a/geomagio/api/ws/app.py
+++ b/geomagio/api/ws/app.py
@@ -20,7 +20,7 @@ ERROR_CODE_MESSAGES = {
     503: "Service Unavailable",
 }
 
-METADATA_ENDPOINT = os.getenv("METADATA_ENDPOINT", False)
+METADATA_ENDPOINT = bool(os.getenv("METADATA_ENDPOINT", False))
 VERSION = os.getenv("GEOMAG_VERSION", "version")
 
 
@@ -31,7 +31,7 @@ app.include_router(data.router)
 app.include_router(elements.router)
 app.include_router(observatories.router)
 
-if METADATA_ENDPOINT == True:
+if METADATA_ENDPOINT:
     app.include_router(metadata.router)
 
 
-- 
GitLab