summaryrefslogtreecommitdiff
path: root/windy.py
blob: 2d5cab68d7c4607cba9cf77719a022196023f1fb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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())