from flask import g, request, current_app from flask_babel import get_locale from app.models import Settings from app.utils.timezone import get_timezone_offset_for_timezone def register_context_processors(app): """Register context processors for the application""" @app.context_processor def inject_settings(): """Inject settings into all templates""" try: from app import db # Check if we have an active database session if db.session.is_active: settings = Settings.get_settings() return { 'settings': settings, 'currency': settings.currency, 'timezone': settings.timezone } except Exception as e: # Log the error but continue with defaults print(f"Warning: Could not inject settings: {e}") pass # Return defaults if settings not available return { 'settings': None, 'currency': 'EUR', 'timezone': 'Europe/Rome' } @app.context_processor def inject_globals(): """Inject global variables into all templates""" try: from app import db # Check if we have an active database session if db.session.is_active: settings = Settings.get_settings() timezone_name = settings.timezone if settings else 'Europe/Rome' else: timezone_name = 'Europe/Rome' except Exception as e: # Log the error but continue with defaults print(f"Warning: Could not inject globals: {e}") timezone_name = 'Europe/Rome' # Determine app version from environment or config try: import os from app.config import Config env_version = os.getenv('APP_VERSION') # If running in GitHub Actions build, prefer tag-like versions version_value = env_version or getattr(Config, 'APP_VERSION', None) or 'dev-0' except Exception: version_value = 'dev-0' # Current locale code (e.g., 'en', 'de') try: current_locale = str(get_locale()) except Exception: current_locale = 'en' # Normalize to short code for comparisons (e.g., 'en' from 'en_US') short_locale = (current_locale.split('_', 1)[0] if current_locale else 'en') available_languages = current_app.config.get('LANGUAGES', {}) or {} current_language_label = available_languages.get(short_locale, short_locale.upper()) return { 'app_name': 'Time Tracker', 'app_version': version_value, 'timezone': timezone_name, 'timezone_offset': get_timezone_offset_for_timezone(timezone_name), 'current_locale': current_locale, 'current_language_code': short_locale, 'current_language_label': current_language_label, 'config': current_app.config } @app.before_request def before_request(): """Set up request-specific data""" g.request_start_time = request.start_time if hasattr(request, 'start_time') else None