Source code for action0.open_meteo.marine.operations
# generated by action0-client-openapi v0.1.2 from marine.yml — do not edit
from __future__ import annotations
import datetime
from typing import Any
from action0.client import JsonOperation
from action0.client import query
from action0.req import Method
from action0.req import Response
from .errors import BadRequestError
from .errors import decode_error
from .models import GetV1MarineCellSelection
from .models import GetV1MarineCurrentItem
from .models import GetV1MarineDailyItem
from .models import GetV1MarineHourlyItem
from .models import GetV1MarineLengthUnit
from .models import GetV1MarineMinutely15Item
from .models import GetV1MarineModelsItem
from .models import GetV1MarineResponse
from .models import GetV1MarineTemperatureUnit
from .models import GetV1MarineTimeformat
from .models import GetV1MarineWindSpeedUnit
from .models import get_v1_marine_error_from_json
from .models import get_v1_marine_response_from_json
[docs]
class GetV1Marine(JsonOperation[GetV1MarineResponse]):
"""
``GET /v1/marine`` — Hourly marine weather forecast
Marine weather forecasts with wave conditions, ocean currents, and sea surface temperature.
"""
method = Method.GET
path = "/v1/marine"
latitude: str = query()
longitude: str = query()
#: A list of marine weather variables.
hourly: list[GetV1MarineHourlyItem] | None = query(
default=None, serialize=lambda values: ",".join(str(item.value) for item in values)
)
#: A list of daily marine weather variables.
daily: list[GetV1MarineDailyItem] | None = query(
default=None, serialize=lambda values: ",".join(str(item.value) for item in values)
)
#: A list of variables for the current marine conditions.
current: list[GetV1MarineCurrentItem] | None = query(
default=None, serialize=lambda values: ",".join(str(item.value) for item in values)
)
#: A list of marine variables at 15-minute intervals.
minutely_15: list[GetV1MarineMinutely15Item] | None = query(
default=None, serialize=lambda values: ",".join(str(item.value) for item in values)
)
temperature_unit: GetV1MarineTemperatureUnit = query(
default=GetV1MarineTemperatureUnit.CELSIUS
)
wind_speed_unit: GetV1MarineWindSpeedUnit = query(default=GetV1MarineWindSpeedUnit.KMH)
#: Wave height and sea level unit.
length_unit: GetV1MarineLengthUnit = query(default=GetV1MarineLengthUnit.METRIC)
timeformat: GetV1MarineTimeformat = query(default=GetV1MarineTimeformat.ISO8601)
timezone: str | None = query(default=None)
past_days: int = query(default=0)
forecast_days: int = query(default=7)
#: Start date in ISO 8601 format.
start_date: datetime.date | None = query(default=None)
#: End date in ISO 8601 format.
end_date: datetime.date | None = query(default=None)
cell_selection: GetV1MarineCellSelection | None = query(default=None)
#: Manually select one or more weather models.
models: list[GetV1MarineModelsItem] | None = query(
default=None, serialize=lambda values: ",".join(str(item.value) for item in values)
)
#: Only required for commercial subscriptions.
apikey: str | None = query(default=None)
[docs]
def check(self, response: Response) -> None:
"""
:param response: the response the backend produced
:raises BadRequestError: for the documented ``400`` answer
:raises APIError: for any other non-2xx status
"""
if response.status == 400:
data = decode_error(response)
if isinstance(data, dict):
message = f"{type(self).__name__}: unexpected status {response.status}"
raise BadRequestError(
f"{message} {response.phrase}".rstrip(),
response=response,
error=get_v1_marine_error_from_json(data),
)
super().check(response)
[docs]
def load_json(self, data: Any) -> GetV1MarineResponse:
"""
:param data: the decoded JSON payload
:return: the parsed result
"""
return get_v1_marine_response_from_json(data)