Skip to content
Snippets Groups Projects
Commit d8f4dc57 authored by Erin (Josh) Rigler's avatar Erin (Josh) Rigler
Browse files

Merge branch 'add-api-data-host-option' into 'master'

Add option `data_host` to /ws/data endpoint.

See merge request !278
parents 2137cae8 7cee7440
No related branches found
No related tags found
1 merge request!278Add option `data_host` to /ws/data endpoint.
Pipeline #340976 passed
...@@ -40,6 +40,18 @@ class SamplingPeriod(float, enum.Enum): ...@@ -40,6 +40,18 @@ class SamplingPeriod(float, enum.Enum):
DAY = 86400.0 DAY = 86400.0
class DataHost(str, enum.Enum):
# recognized public Edge data hosts, plus one user-specified
DEFAULT = os.getenv("DATA_HOST", "edgecwb.usgs.gov")
EDGECWB = "edgecwb.usgs.gov"
CWBPUB = "cwbpub.cr.usgs.gov"
CWBPUB2 = "cwbp2.cr.usgs.gov"
@classmethod
def values(cls) -> List[str]:
return [t.value for t in cls]
class DataApiQuery(BaseModel): class DataApiQuery(BaseModel):
id: str id: str
starttime: UTCDateTime = None starttime: UTCDateTime = None
...@@ -47,7 +59,8 @@ class DataApiQuery(BaseModel): ...@@ -47,7 +59,8 @@ class DataApiQuery(BaseModel):
elements: List[str] = DEFAULT_ELEMENTS elements: List[str] = DEFAULT_ELEMENTS
sampling_period: SamplingPeriod = SamplingPeriod.MINUTE sampling_period: SamplingPeriod = SamplingPeriod.MINUTE
data_type: Union[DataType, str] = DataType.VARIATION data_type: Union[DataType, str] = DataType.VARIATION
format: OutputFormat = OutputFormat.IAGA2002 format: Union[OutputFormat, str] = OutputFormat.IAGA2002
data_host: Union[DataHost, str] = DataHost.DEFAULT
@validator("data_type") @validator("data_type")
def validate_data_type( def validate_data_type(
...@@ -60,6 +73,17 @@ class DataApiQuery(BaseModel): ...@@ -60,6 +73,17 @@ class DataApiQuery(BaseModel):
) )
return data_type return data_type
@validator("data_host")
def validate_data_host(
cls, data_host: Union[DataHost, str]
) -> Union[DataHost, str]:
if data_host not in DataHost.values():
raise ValueError(
# don't advertise acceptable hosts
f"Bad data_host value '{data_host}'."
)
return data_host
@validator("elements", pre=True, always=True) @validator("elements", pre=True, always=True)
def validate_elements(cls, elements: List[str]) -> List[str]: def validate_elements(cls, elements: List[str]) -> List[str]:
if not elements: if not elements:
......
...@@ -28,6 +28,9 @@ app = FastAPI( ...@@ -28,6 +28,9 @@ app = FastAPI(
docs_url="/docs", docs_url="/docs",
root_path="/ws", root_path="/ws",
title="Geomagnetism Data Web Service", title="Geomagnetism Data Web Service",
swagger_ui_parameters={
"defaultModelsExpandDepth": 0,
},
) )
app.include_router(algorithms.router) app.include_router(algorithms.router)
......
...@@ -16,6 +16,7 @@ from .DataApiQuery import ( ...@@ -16,6 +16,7 @@ from .DataApiQuery import (
DataType, DataType,
OutputFormat, OutputFormat,
SamplingPeriod, SamplingPeriod,
DataHost,
) )
...@@ -29,7 +30,7 @@ def get_data_factory( ...@@ -29,7 +30,7 @@ def get_data_factory(
data_factory data_factory
Edge or miniseed factory object Edge or miniseed factory object
""" """
host = os.getenv("DATA_HOST", "edgecwb.usgs.gov") host = query.data_host or DataHost.DEFAULT
sampling_period = query.sampling_period sampling_period = query.sampling_period
if query.id in ASL_OBSERVATORY_INDEX: if query.id in ASL_OBSERVATORY_INDEX:
factory = IRISFactory(network="IU", locationCode="40") factory = IRISFactory(network="IU", locationCode="40")
...@@ -81,7 +82,16 @@ def get_data_query( ...@@ -81,7 +82,16 @@ def get_data_query(
" NOTE: the USGS web service also supports specific EDGE location codes." " NOTE: the USGS web service also supports specific EDGE location codes."
" For example: R0 is 'internet variation'", " For example: R0 is 'internet variation'",
), ),
format: OutputFormat = Query(OutputFormat.IAGA2002), format: Union[OutputFormat, str] = Query(
OutputFormat.IAGA2002,
title="Output Format",
description="Format of returned time series data.",
),
data_host: Union[DataHost, str] = Query(
DataHost.DEFAULT,
title="Data Host",
description="Edge host to pull data from.",
),
) -> DataApiQuery: ) -> DataApiQuery:
"""Define query parameters used for webservice requests. """Define query parameters used for webservice requests.
...@@ -114,6 +124,7 @@ def get_data_query( ...@@ -114,6 +124,7 @@ def get_data_query(
"sampling_period", "sampling_period",
"type", "type",
"format", "format",
"data_host",
] ]
invalid_params = [] invalid_params = []
for param in request.query_params.keys(): for param in request.query_params.keys():
...@@ -131,6 +142,7 @@ def get_data_query( ...@@ -131,6 +142,7 @@ def get_data_query(
sampling_period=sampling_period, sampling_period=sampling_period,
data_type=data_type, data_type=data_type,
format=format, format=format,
data_host=data_host,
) )
return query return query
......
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