-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathenv_loader.py
More file actions
65 lines (56 loc) · 2.39 KB
/
env_loader.py
File metadata and controls
65 lines (56 loc) · 2.39 KB
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
import os
import sys
from config import DEFAULT_PROVIDER, PROVIDERS
def load_env(filepath=".env"):
"""Ładuje zmienne środowiskowe z pliku tekstowego (bez zewnętrznych bibliotek)."""
try:
# Znajdź .env w katalogu głównym projektu
base_dir = os.path.dirname(os.path.abspath(__file__))
env_path = os.path.join(base_dir, filepath)
if not os.path.exists(env_path):
return
with open(env_path, "r", encoding="utf-8") as f:
for line in f:
line = line.strip()
if not line or line.startswith("#"):
continue
if "=" in line:
key, val = line.split("=", 1)
key = key.strip()
val = val.strip().strip("'\"")
if key not in os.environ:
os.environ[key] = val
except Exception:
pass
def validate_and_setup():
"""Wczytuje .env, waliduje klucze i zwraca skonfigurowany słownik PROVIDERS."""
load_env()
# Kopia, żeby nie modyfikować oryginału w config.py (choć i tak go nadpiszemy w locie)
active_providers = PROVIDERS.copy()
# Pobranie danych z środowiska
cf_token = os.environ.get("CF_API_TOKEN", "")
cf_account = os.environ.get("CF_NR_ACCOUNT", "")
# Aktualizacja kluczy i adresów
for p_name, p_config in active_providers.items():
if p_name == "cloudflare":
p_config["api_key"] = cf_token
if "{account}" in p_config["url"]:
p_config["url"] = p_config["url"].format(account=cf_account)
else:
env_key = f"{p_name.upper()}_API_KEY"
if os.environ.get(env_key):
p_config["api_key"] = os.environ.get(env_key)
# Walidacja wybranego providera
if DEFAULT_PROVIDER == "cloudflare":
missing = []
if not os.environ.get("CF_API_TOKEN"):
missing.append("CF_API_TOKEN")
if not os.environ.get("CF_NR_ACCOUNT"):
missing.append("CF_NR_ACCOUNT")
if missing:
raise ValueError(f"Brak wymaganych zmiennych w .env dla Cloudflare: {', '.join(missing)}")
else:
env_key = f"{DEFAULT_PROVIDER.upper()}_API_KEY"
if not os.environ.get(env_key):
raise ValueError(f"Brak {env_key} w .env dla providera {DEFAULT_PROVIDER}")
return active_providers