49 lines
1.7 KiB
Python
49 lines
1.7 KiB
Python
import os
|
||
from dataclasses import dataclass
|
||
|
||
|
||
@dataclass
|
||
class Config:
|
||
# Database
|
||
DB_HOST: str = os.getenv("POSTGRES_HOST", "fr24-postgres")
|
||
DB_PORT: int = int(os.getenv("POSTGRES_PORT", "5432"))
|
||
DB_NAME: str = os.getenv("POSTGRES_DB", "fr24")
|
||
DB_USER: str = os.getenv("POSTGRES_USER", "fr24")
|
||
DB_PASSWORD: str = os.getenv("POSTGRES_PASSWORD", "change-me")
|
||
|
||
# FR24 API
|
||
FR24_API_KEY: str = os.getenv("FR24_API_KEY", "")
|
||
FR24_API_BASE: str = "https://fr24api.flightradar24.com"
|
||
|
||
# Airports to track (comma-separated IATA codes)
|
||
AIRPORTS: str = os.getenv("FR24_AIRPORTS", "SVO,DME,VKO,ZIA")
|
||
|
||
# Airport direction prefix: "both:" means inbound+outbound
|
||
AIRPORT_DIRECTION_PREFIX: str = os.getenv("FR24_AIRPORT_DIR_PREFIX", "both:")
|
||
|
||
# Rate limit: 10 req/min for Explorer tier → 6s between requests
|
||
RATE_LIMIT_SEC: float = float(os.getenv("FR24_RATE_LIMIT_SEC", "6.0"))
|
||
|
||
# Pagination page size (for /full endpoint max 20000)
|
||
PAGE_SIZE: int = int(os.getenv("FR24_PAGE_SIZE", "20000"))
|
||
|
||
# Whether to fetch tracks after summaries (costs extra credits)
|
||
FETCH_TRACKS: bool = os.getenv("FR24_FETCH_TRACKS", "false").lower() == "true"
|
||
|
||
# Max pages to paginate through (safety cap). 200 × 20 = 4000 flights max
|
||
MAX_PAGES: int = int(os.getenv("FR24_MAX_PAGES", "200"))
|
||
|
||
# Credit guard: warn if estimated max flights exceeds this threshold
|
||
CREDIT_GUARD_MAX_FLIGHTS: int = int(os.getenv("FR24_CREDIT_GUARD", "2000"))
|
||
|
||
@property
|
||
def DB_DSN(self) -> str:
|
||
return (
|
||
f"host={self.DB_HOST} port={self.DB_PORT} "
|
||
f"dbname={self.DB_NAME} user={self.DB_USER} "
|
||
f"password={self.DB_PASSWORD}"
|
||
)
|
||
|
||
|
||
config = Config()
|