Source code for action0.open_meteo.seasonal.operations
# generated by action0-client-openapi v0.1.2 from seasonal.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 GetV1SeasonalCellSelection
from .models import GetV1SeasonalDailyItem
from .models import GetV1SeasonalHourlyItem
from .models import GetV1SeasonalModelsItem
from .models import GetV1SeasonalMonthlyItem
from .models import GetV1SeasonalPrecipitationUnit
from .models import GetV1SeasonalResponse
from .models import GetV1SeasonalTemperatureUnit
from .models import GetV1SeasonalTimeformat
from .models import GetV1SeasonalWeeklyItem
from .models import GetV1SeasonalWindSpeedUnit
from .models import get_v1_seasonal_error_from_json
from .models import get_v1_seasonal_response_from_json
[docs]
class GetV1Seasonal(JsonOperation[GetV1SeasonalResponse]):
"""
``GET /v1/seasonal`` — Seasonal weather forecast up to 9 months
Long-range seasonal forecasts from multiple ensemble models with 6-hourly and daily data.
"""
method = Method.GET
path = "/v1/seasonal"
latitude: str = query()
longitude: str = query()
#: A list of weather variables (6-hourly resolution).
hourly: list[GetV1SeasonalHourlyItem] | None = query(
default=None, serialize=lambda values: ",".join(str(item.value) for item in values)
)
#: A list of daily weather variables.
daily: list[GetV1SeasonalDailyItem] | None = query(
default=None, serialize=lambda values: ",".join(str(item.value) for item in values)
)
#: A list of weekly weather variables.
weekly: list[GetV1SeasonalWeeklyItem] | None = query(
default=None, serialize=lambda values: ",".join(str(item.value) for item in values)
)
#: A list of monthly weather variables.
monthly: list[GetV1SeasonalMonthlyItem] | None = query(
default=None, serialize=lambda values: ",".join(str(item.value) for item in values)
)
temperature_unit: GetV1SeasonalTemperatureUnit = query(
default=GetV1SeasonalTemperatureUnit.CELSIUS
)
wind_speed_unit: GetV1SeasonalWindSpeedUnit = query(default=GetV1SeasonalWindSpeedUnit.KMH)
precipitation_unit: GetV1SeasonalPrecipitationUnit = query(
default=GetV1SeasonalPrecipitationUnit.MM
)
timeformat: GetV1SeasonalTimeformat = query(default=GetV1SeasonalTimeformat.ISO8601)
timezone: str | None = query(default=None)
past_days: int = query(default=0)
#: Number of forecast days. Up to 217 days (7 months).
forecast_days: int = query(default=183)
#: 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: GetV1SeasonalCellSelection | None = query(default=None)
#: Manually select one or more weather models.
models: list[GetV1SeasonalModelsItem] | 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_seasonal_error_from_json(data),
)
super().check(response)
[docs]
def load_json(self, data: Any) -> GetV1SeasonalResponse:
"""
:param data: the decoded JSON payload
:return: the parsed result
"""
return get_v1_seasonal_response_from_json(data)