-
-
Notifications
You must be signed in to change notification settings - Fork 19
/
settings.py
84 lines (64 loc) · 2.11 KB
/
settings.py
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import datetime
import os
from dateutil.tz import tzutc
from brightsky.utils import load_dotenv
CORS_ALLOW_ALL_ORIGINS = False
CORS_ALLOW_ALL_HEADERS = False
CORS_ALLOWED_ORIGINS = []
CORS_ALLOWED_HEADERS = []
DATABASE_URL = 'postgres://localhost'
ICON_CLOUDY_THRESHOLD = 80
ICON_PARTLY_CLOUDY_THRESHOLD = 25
ICON_RAIN_THRESHOLD = 0.5
ICON_WIND_THRESHOLD = 10.8
IGNORED_CURRENT_OBSERVATIONS_STATIONS = ['K386']
KEEP_DOWNLOADS = False
MIN_DATE = datetime.datetime(2010, 1, 1, tzinfo=tzutc())
MAX_DATE = None
POLLING_CRONTAB_MINUTE = '*'
REDIS_URL = 'redis://localhost'
WARN_CELLS_URL = (
'https://maps.dwd.de/geoserver/wfs'
'?SERVICE=WFS&VERSION=2.0.0&REQUEST=GetFeature'
'&TYPENAMES=Warngebiete_Gemeinden&OUTPUTFORMAT=json'
)
def _make_bool(bool_str):
return bool_str == '1'
def _make_date(date_str):
return datetime.datetime.fromisoformat(date_str).replace(tzinfo=tzutc())
def _make_list(list_str, separator=','):
if not list_str:
return []
return list_str.split(separator)
_SETTING_PARSERS = {
'MAX_DATE': _make_date,
bool: _make_bool,
datetime.datetime: _make_date,
float: float,
list: _make_list,
}
class Settings(dict):
"""A dictionary that makes its keys available as attributes"""
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.loaded = False
def load(self):
load_dotenv()
for k, v in globals().items():
if k.isupper() and not k.startswith('_'):
self[k] = v
for k, v in os.environ.items():
if k.startswith('BRIGHTSKY_') and k.isupper():
setting_name = k.split('_', 1)[1]
setting_type = type(self.get(setting_name))
setting_parser = _SETTING_PARSERS.get(
setting_name, _SETTING_PARSERS.get(setting_type))
if setting_parser:
v = setting_parser(v)
self[setting_name] = v
def __getattr__(self, name):
if not self.loaded:
self.load()
self.loaded = True
return self[name]
settings = Settings()