# FlightMonitor/data/config.py from typing import Optional, Dict import os # Required for os.getenv """ Global configurations for the FlightMonitor application. This file centralizes constants and settings used across different modules, making them easier to manage and modify. Each configuration option should be clearly documented. """ # --- API Configuration --- # Base URL for the OpenSky Network API's 'states/all' endpoint. OPENSKY_API_URL: str = "https://opensky-network.org/api/states/all" # Used for direct calls if OAuth2 implemented # Default timeout for API requests in seconds. DEFAULT_API_TIMEOUT_SECONDS: int = 15 # --- OpenSky Network API Authentication Configuration --- # Set to True to attempt authentication with OpenSky Network API using OAuth2 Client Credentials. # If False, or if Client ID/Secret are not provided, anonymous access will be used. USE_OPENSKY_CREDENTIALS: bool = False # MODIFIED: Default to False, set to True if you want to use OAuth2 # MODIFIED: Changed from USERNAME/PASSWORD to CLIENT_ID/CLIENT_SECRET for OAuth2 # Your OpenSky Network API Client ID. # Best stored as an environment variable (e.g., OPENSKY_CLIENT_ID). OPENSKY_CLIENT_ID: Optional[str] ="luca.vallongo@gmail.com-api-client" #os.getenv("OPENSKY_CLIENT_ID", None) # Your OpenSky Network API Client Secret. # Best stored as an environment variable (e.g., OPENSKY_CLIENT_SECRET). OPENSKY_CLIENT_SECRET: Optional[str] ="dGBGjEDLmqGGsZmdd5FOH8hOfIcekMjK" #os.getenv("OPENSKY_CLIENT_SECRET", None) # OpenSky Network Token URL (used for OAuth2 Client Credentials Flow) # This is a standard Keycloak token endpoint format. OPENSKY_TOKEN_URL: str = "https://opensky-network.org/auth/realms/opensky/protocol/openid-connect/token" # MODIFIED: Removed OPENSKY_USERNAME and OPENSKY_PASSWORD as they are for Basic Auth (being deprecated) # OPENSKY_USERNAME: Optional[str] = os.getenv("OPENSKY_USERNAME", None) # OPENSKY_PASSWORD: Optional[str] = os.getenv("OPENSKY_PASSWORD", None) # --- ADS-B Exchange API Configuration (Placeholder for future) --- # LIVE_DATA_SOURCE: str = "OPENSKY" # Options: "OPENSKY", "ADSB_EXCHANGE", "MOCK" # ADSBEXCHANGE_API_KEY: Optional[str] = os.getenv("ADSBEXCHANGE_API_KEY", None) # ADSBEXCHANGE_API_URL: str = "https://adsbexchange.com/api/aircraft/v2/lat/{lat_min}/lon/{lon_min}/latmax/{lat_max}/lonmax/{lon_max}/" # --- Flag per Mock API --- USE_MOCK_OPENSKY_API: bool = False MOCK_API_FLIGHT_COUNT: int = 50 MOCK_API_ERROR_SIMULATION: Optional[str] = None MOCK_RETRY_AFTER_SECONDS: int = 60 # Example for mock MOCK_HTTP_ERROR_STATUS: int = 500 # Example for mock # Polling interval in seconds for fetching live flight data. LIVE_POLLING_INTERVAL_SECONDS: int = 15 # --- GUI Configuration --- DEFAULT_BBOX_LAT_MIN: float = 44.986 DEFAULT_BBOX_LON_MIN: float = 7.9341 DEFAULT_BBOX_LAT_MAX: float = 46.9567 DEFAULT_BBOX_LON_MAX: float = 10.5997 DEFAULT_CANVAS_WIDTH: int = 800 DEFAULT_CANVAS_HEIGHT: int = 600 MAP_TILE_CACHE_DIR: str = "flightmonitor_tile_cache" COORDINATE_DECIMAL_PLACES: int = 5 # Added for consistency for GUI display of coordinates DEFAULT_TRACK_HISTORY_POINTS: int = 20 # Moved from main_window MAP_SIZE_KM_DECIMAL_PLACES: int = 1 # --- Data Storage Configuration --- DATABASE_DIRECTORY: str = "flight_data_history" DATABASE_FILENAME_FORMAT: str = "flights_%Y-%m-%d.db" # --- GUI Layout Configuration --- LAYOUT_MAIN_HORIZONTAL_WEIGHTS: Dict[str, int] = {"left_column": 20, "right_column": 80} LAYOUT_MAIN_HORIZONTAL_MIN_SIZES: Dict[str, int] = {"left_column": 100, "right_column": 400} LAYOUT_LEFT_VERTICAL_WEIGHTS: Dict[str, int] = {"function_notebook": 70, "log_status_area": 30} LAYOUT_LEFT_VERTICAL_MIN_SIZES: Dict[str, int] = {"function_notebook": 200, "log_status_area": 100} LAYOUT_RIGHT_VERTICAL_WEIGHTS: Dict[str, int] = {"views_notebook": 80, "map_tools_info": 20} LAYOUT_RIGHT_VERTICAL_MIN_SIZES: Dict[str, int] = {"views_notebook": 300, "map_tools_info": 120} LAYOUT_TOOLS_INFO_HORIZONTAL_WEIGHTS: Dict[str, int] = {"map_tools": 20, "map_info": 80} LAYOUT_TOOLS_INFO_HORIZONTAL_MIN_SIZES: Dict[str, int] = {"map_tools": 150, "map_info": 200} LAYOUT_BOTTOM_PANELS_HORIZONTAL_WEIGHTS: Dict[str, int] = {"map_tools": 20, "map_info": 35, "flight_details": 45} LAYOUT_START_MAXIMIZED: bool = True LAYOUT_WINDOW_MIN_WIDTH: int = 700 LAYOUT_WINDOW_MIN_HEIGHT: int = 500