summaryrefslogtreecommitdiff
path: root/windy/point_forecast.py
diff options
context:
space:
mode:
Diffstat (limited to 'windy/point_forecast.py')
-rw-r--r--windy/point_forecast.py68
1 files changed, 68 insertions, 0 deletions
diff --git a/windy/point_forecast.py b/windy/point_forecast.py
new file mode 100644
index 0000000..2d5cab6
--- /dev/null
+++ b/windy/point_forecast.py
@@ -0,0 +1,68 @@
+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())