from dataclasses import dataclass from enum import Enum import requests class _StrEnum(Enum): def __str__(self): return self.value class Model(_StrEnum): AROME = "arome" GEOS5 = "geos5" GFS = "gfs" GFSWAVE = "gfsWave" ICONEU = "iconEu" NAMALASKA = "namAlaska" NAMCONUS = "namConus" NAMHAWAII = "namHawaii" class Level(_StrEnum): SURFACE = "surface" H1000 = "1000h" H950 = "950h" H925 = "925h" H900 = "900h" H850 = "850h" H800 = "800h" H700 = "700h" H600 = "600h" H500 = "500h" H400 = "400h" H300 = "300h" H200 = "200h" H150 = "150h" @dataclass class Config: key: str api: str = "https://api.windy.com/api" @dataclass class Request: lat: float lon: float model: Model parameters: list = None levels: list = None endpoint: str = "/point-forecast/v2" def json(self): body = { 'lat': self.lat, 'lon': self.lon, 'model': str(self.model), 'parameters': self.parameters or [], } if self.levels: body['levels'] = [str(x) for x in self.levels] return body def point_forecast(request: Request, config: Config): return requests.post(config.api + request.endpoint, json=request.json())