from dataclasses import dataclass from enum import Enum 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 Request: key: str lat: float lon: float model: Model parameters: list = None levels: list = None def body(self): body = { 'key': self.key, '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 @dataclass class Endpoint: path: str def __call__(self, windy, request: Request): return windy.session.post(windy.api + self.path, json=request.body())