71 lines
1.7 KiB
Python
71 lines
1.7 KiB
Python
# app/config.py
|
|
"""Application configuration."""
|
|
|
|
from typing import List
|
|
|
|
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
|
|
|
|
class Settings(BaseSettings):
|
|
"""Application settings."""
|
|
|
|
model_config = SettingsConfigDict(
|
|
env_file=".env",
|
|
env_file_encoding="utf-8",
|
|
case_sensitive=False,
|
|
extra="ignore",
|
|
)
|
|
|
|
# API Configuration
|
|
API_TITLE: str = "Berlin Picnic Zone Finder API"
|
|
API_VERSION: str = "1.0.0"
|
|
DEBUG: bool = False
|
|
HOST: str = "0.0.0.0"
|
|
PORT: int = 8000
|
|
|
|
# CORS Settings
|
|
ALLOWED_ORIGINS: List[str] = [
|
|
"http://localhost:3000",
|
|
"http://127.0.0.1:3000",
|
|
"https://your-frontend-domain.com",
|
|
]
|
|
|
|
# Berlin Open Data APIs
|
|
BERLIN_OPEN_DATA_API_KEY: str = ""
|
|
EBIRD_API_KEY: str = ""
|
|
INATURALIST_API_URL: str = "https://api.inaturalist.org/v1"
|
|
|
|
# Database
|
|
DATABASE_URL: str = "sqlite:///./berlin_zones.db"
|
|
|
|
# Redis Cache
|
|
REDIS_URL: str = "redis://localhost:6379"
|
|
CACHE_TTL: int = 3600
|
|
|
|
# External APIs
|
|
OPENSTREETMAP_API_URL: str = "https://nominatim.openstreetmap.org"
|
|
WEATHER_API_KEY: str = ""
|
|
|
|
# Logging
|
|
LOG_LEVEL: str = "INFO"
|
|
LOG_FORMAT: str = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
|
|
|
|
# Data Processing
|
|
MAX_ZONES_PER_REQUEST: int = 100
|
|
DEFAULT_SEARCH_RADIUS: int = 1000 # meters
|
|
SCORING_CACHE_TTL: int = 1800 # seconds
|
|
|
|
# Berlin specific
|
|
BERLIN_CENTER_LAT: float = 52.5200
|
|
BERLIN_CENTER_LNG: float = 13.4050
|
|
BERLIN_BBOX: List[float] = [
|
|
13.0883,
|
|
52.3382,
|
|
13.7611,
|
|
52.6755,
|
|
] # [min_lng, min_lat, max_lng, max_lat]
|
|
|
|
|
|
# Create settings instance
|
|
settings = Settings()
|