Skip to content

Commit

Permalink
Add /List/* endpoints
Browse files Browse the repository at this point in the history
  • Loading branch information
William Heyman Krill committed May 19, 2023
1 parent 17b3ed1 commit 2b621c0
Show file tree
Hide file tree
Showing 2 changed files with 123 additions and 35 deletions.
73 changes: 73 additions & 0 deletions tests/test_datafarm.py
Original file line number Diff line number Diff line change
Expand Up @@ -173,3 +173,76 @@ def test_parse_datetime_object():
result = _parse_datetime(dt)
expected = "2023-05-15T14:30:00Z"
assert result == expected


@requires_DATAFARM_API_KEY()
def test_units(repo):
units = repo.units
assert units is not None
assert isinstance(units, pd.DataFrame)
assert "IDName" in units.columns.tolist()
assert "l/min" in units["IDName"].tolist()


@requires_DATAFARM_API_KEY()
def test_time_series_source_descriptions(repo):
time_series_source_descriptions = repo.time_series_source_descriptions
assert time_series_source_descriptions is not None
assert isinstance(time_series_source_descriptions, pd.DataFrame)
assert "IDName" in time_series_source_descriptions.columns.tolist()
assert "LEG_wl_RWS" in time_series_source_descriptions["IDName"].tolist()


@requires_DATAFARM_API_KEY()
def test_time_series_types(repo):
time_series_types = repo.time_series_types
assert time_series_types is not None
assert isinstance(time_series_types, pd.DataFrame)
assert "IDName" in time_series_types.columns.tolist()
assert "BSH-dat-meteo" in time_series_types["IDName"].tolist()


@requires_DATAFARM_API_KEY()
def test_time_series_status(repo):
time_series_status = repo.time_series_status
assert time_series_status is not None
assert isinstance(time_series_status, pd.DataFrame)
assert "IDName" in time_series_status.columns.tolist()
assert "new" in time_series_status["IDName"].tolist()


@requires_DATAFARM_API_KEY()
def test_qualities(repo):
qualities = repo.qualities
assert qualities is not None
assert isinstance(qualities, pd.DataFrame)
assert "IDName" in qualities.columns.tolist()
assert "ok" in qualities["IDName"].tolist()


@requires_DATAFARM_API_KEY()
def test_parameters(repo):
parameters = repo.parameters
assert parameters is not None
assert isinstance(parameters, pd.DataFrame)
assert "IDName" in parameters.columns.tolist()
assert "Lat" in parameters["IDName"].tolist()
assert "Lon" in parameters["IDName"].tolist()


@requires_DATAFARM_API_KEY()
def test_medias(repo):
medias = repo.medias
assert medias is not None
assert isinstance(medias, pd.DataFrame)
assert "IDName" in medias.columns.tolist()
assert "waves" in medias["IDName"].tolist()


@requires_DATAFARM_API_KEY()
def test_locations(repo):
locations = repo.locations
assert locations is not None
assert isinstance(locations, pd.DataFrame)
assert "IDName" in locations.columns.tolist()
assert "Bor1" in locations["IDName"].tolist()
85 changes: 50 additions & 35 deletions watobs/datafarm.py
Original file line number Diff line number Diff line change
Expand Up @@ -147,14 +147,49 @@ def get_data(

@property
def time_series_metadata(self):
r = requests.get(
self.API_URL + "/MetaData/Entity",
headers=self.headers,
params={"aClassId": "Timeseries"},
)
r.raise_for_status()
data = r.json()
return to_pandas_df(json.dumps(data))
endpoint = "/MetaData/Entity"
params = {"aClassId": "Timeseries"}
return self._get_pandas_df(endpoint, params)

@property
def time_series_source_descriptions(self):
endpoint = "/List/TimeSeriesSourceDescriptions"
return self._get_pandas_df(endpoint)

@property
def units(self):
endpoint = "/List/Units"
return self._get_pandas_df(endpoint)

@property
def time_series_types(self):
endpoint = "/List/TimeSeriesTypes"
return self._get_pandas_df(endpoint)

@property
def time_series_status(self):
endpoint = "/List/TimeSeriesStatus"
return self._get_pandas_df(endpoint)

@property
def qualities(self):
endpoint = "/List/Qualities"
return self._get_pandas_df(endpoint)

@property
def parameters(self):
endpoint = "/List/Parameters"
return self._get_pandas_df(endpoint)

@property
def medias(self):
endpoint = "/List/Medias"
return self._get_pandas_df(endpoint)

@property
def locations(self):
endpoint = "/List/Locations"
return self._get_pandas_df(endpoint)

def connect(self):
"""Connect to the Datafarm API."""
Expand All @@ -178,36 +213,16 @@ def close(self):
self.access_token = None
self.headers = None

def _get_pandas_df(self, endpoint, params=None):
url = self.API_URL + endpoint
r = requests.get(url, headers=self.headers, params=params)
r.raise_for_status()
data = r.json()
return to_pandas_df(json.dumps(data))

def __enter__(self):
self.connect()
return self

def __exit__(self, exc_type, exc_value, traceback):
self.close()


if __name__ == "__main__":
import os

import dotenv

dotenv.load_dotenv()
api_key = os.getenv("DATAFARM_API_KEY")
assert api_key is not None

with DatafarmRepository(api_key) as dfr:
assert dfr.access_token is not None
print(dfr.list_time_series())
print(dfr.time_series_metadata)
time_series = "TNWB_wind_RVO-FUGRO_unfiltered_WS-130"
data = dfr.get_data(
time_series_id=[
# "Bor1_currents_RVO-FUGRO_derived_CS",
"TNWB_wind_RVO-FUGRO_unfiltered_WS-130",
],
iso8601_timestamp=False,
start="2015-03-24T10:16:45.034Z",
end="2023-03-24T10:16:45.034Z",
limit=10,
)
print(data)

0 comments on commit 2b621c0

Please sign in to comment.