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