From 374d88f3f9d95a9ec1e11d932fd96f5ad4184519 Mon Sep 17 00:00:00 2001
From: pcain-usgs <pcain@usgs.gov>
Date: Tue, 2 Mar 2021 14:50:48 -0700
Subject: [PATCH] Get factory from interval update get_data's usage of
 get_data_factory

---
 geomagio/api/ws/DataApiQuery.py    | 14 ++++-----
 geomagio/api/ws/data.py            | 49 ++++++++++++++----------------
 setup.py                           |  2 +-
 test/api_test/ws_test/data_test.py |  2 --
 4 files changed, 30 insertions(+), 37 deletions(-)

diff --git a/geomagio/api/ws/DataApiQuery.py b/geomagio/api/ws/DataApiQuery.py
index 8e831f658..8202c6b6e 100644
--- a/geomagio/api/ws/DataApiQuery.py
+++ b/geomagio/api/ws/DataApiQuery.py
@@ -39,6 +39,13 @@ class SamplingPeriod(float, enum.Enum):
     HOUR = 3600.0
     DAY = 86400.0
 
+    @property
+    def input_factory(self):
+        if self in [SamplingPeriod.TEN_HERTZ, SamplingPeriod.HOUR, SamplingPeriod.DAY]:
+            return "miniseed"
+        else:
+            return "edge"
+
 
 class DataApiQuery(BaseModel):
     id: str
@@ -48,7 +55,6 @@ class DataApiQuery(BaseModel):
     sampling_period: SamplingPeriod = SamplingPeriod.MINUTE
     data_type: Union[DataType, str] = DataType.VARIATION
     format: OutputFormat = OutputFormat.IAGA2002
-    factory: Optional[str] = "edge"
 
     @validator("data_type")
     def validate_data_type(
@@ -75,12 +81,6 @@ class DataApiQuery(BaseModel):
                 )
         return elements
 
-    @validator("factory")
-    def validate_factory(cls, factory: str):
-        if factory not in ["edge", "miniseed"]:
-            raise ValueError("Unsupported factory")
-        return factory
-
     @validator("id")
     def validate_id(cls, id: str) -> str:
         if id not in OBSERVATORY_INDEX:
diff --git a/geomagio/api/ws/data.py b/geomagio/api/ws/data.py
index 360130c84..a8cc3d827 100644
--- a/geomagio/api/ws/data.py
+++ b/geomagio/api/ws/data.py
@@ -18,6 +18,27 @@ from .DataApiQuery import (
 )
 
 
+def get_data_factory(
+    query: DataApiQuery,
+) -> TimeseriesFactory:
+    """Reads environment variable to determine the factory to be used
+
+    Returns
+    -------
+    data_factory
+        Edge or miniseed factory object
+    """
+    host = os.getenv("DATA_HOST", "cwbpub.cr.usgs.gov")
+    port = int(os.getenv("DATA_PORT", "2060"))
+    factory = query.sampling_period.input_factory
+    if factory == "edge":
+        return EdgeFactory(host=host, port=port)
+    elif factory == "miniseed":
+        return MiniSeedFactory(host=host, port=port)
+    else:
+        return None
+
+
 def get_data_query(
     id: str = Query(..., title="Observatory code"),
     starttime: UTCDateTime = Query(
@@ -49,11 +70,6 @@ def get_data_query(
         " For example: R0 is 'internet variation'",
     ),
     format: OutputFormat = Query(OutputFormat.IAGA2002),
-    factory: str = Query(
-        "edge",
-        title="data factory",
-        description="Data source. NOTE: Only edge and miniseed factories are supported",
-    ),
 ) -> DataApiQuery:
     """Define query parameters used for webservice requests.
 
@@ -87,31 +103,10 @@ def get_data_query(
         sampling_period=sampling_period,
         data_type=data_type,
         format=format,
-        factory=factory,
     )
     return query
 
 
-def get_data_factory(
-    query: DataApiQuery = Depends(get_data_query),
-) -> TimeseriesFactory:
-    """Reads environment variable to determine the factory to be used
-
-    Returns
-    -------
-    data_factory
-        Edge or miniseed factory object
-    """
-    host = os.getenv("DATA_HOST", "cwbpub.cr.usgs.gov")
-    port = int(os.getenv("DATA_PORT", "2060"))
-    if query.factory == "edge":
-        return EdgeFactory(host=host, port=port)
-    elif query.factory == "miniseed":
-        return MiniSeedFactory(host=host, port=port)
-    else:
-        return None
-
-
 def format_timeseries(
     timeseries: Stream, format: OutputFormat, elements: List[str]
 ) -> Response:
@@ -159,8 +154,8 @@ router = APIRouter()
 @router.get("/data/")
 def get_data(
     query: DataApiQuery = Depends(get_data_query),
-    data_factory: TimeseriesFactory = Depends(get_data_factory),
 ) -> Response:
+    data_factory = get_data_factory(query=query)
     # read data
     timeseries = get_timeseries(data_factory, query)
     # output response
diff --git a/setup.py b/setup.py
index 8f1ff47f4..6216d647e 100644
--- a/setup.py
+++ b/setup.py
@@ -26,8 +26,8 @@ setuptools.setup(
     entry_points={
         "console_scripts": [
             "magproc-prepfiles=geomagio.processing.magproc:main",
-            "filter-realtime=geomagio.processing.obsrio:main",
             "generate-matrix=geomagio.processing.adjusted:main",
+            "obsrio-filter=geomagio.processing.obsrio:main",
         ],
     },
 )
diff --git a/test/api_test/ws_test/data_test.py b/test/api_test/ws_test/data_test.py
index e862a2953..800b0cd78 100644
--- a/test/api_test/ws_test/data_test.py
+++ b/test/api_test/ws_test/data_test.py
@@ -14,7 +14,6 @@ def test_get_data_query():
         data_type="R1",
         sampling_period=60,
         format="iaga2002",
-        factory="edge",
     )
     assert_equal(query.id, "BOU")
     assert_equal(query.starttime, UTCDateTime("2020-09-01T00:00:01"))
@@ -23,4 +22,3 @@ def test_get_data_query():
     assert_equal(query.sampling_period, SamplingPeriod.MINUTE)
     assert_equal(query.format, OutputFormat.IAGA2002)
     assert_equal(query.data_type, "R1")
-    assert_equal(query.factory, "edge")
-- 
GitLab