"""Flask application configuration.""" import os from datetime import timedelta class Config: """Base configuration.""" # Flask SECRET_KEY = os.environ.get('SECRET_KEY', 'dev-secret-key-change-in-production') # SQLAlchemy SQLALCHEMY_DATABASE_URI = os.environ.get( 'DATABASE_URL', 'mysql+pymysql://root:password@localhost:3306/shopdb_flask' ) SQLALCHEMY_TRACK_MODIFICATIONS = False SQLALCHEMY_ENGINE_OPTIONS = { 'pool_pre_ping': True, 'pool_recycle': 300, } # JWT JWT_SECRET_KEY = os.environ.get('JWT_SECRET_KEY', 'jwt-secret-key-change-in-production') JWT_ACCESS_TOKEN_EXPIRES = timedelta( seconds=int(os.environ.get('JWT_ACCESS_TOKEN_EXPIRES', 3600)) ) JWT_REFRESH_TOKEN_EXPIRES = timedelta( seconds=int(os.environ.get('JWT_REFRESH_TOKEN_EXPIRES', 2592000)) ) # CORS CORS_ORIGINS = os.environ.get('CORS_ORIGINS', '*').split(',') # Logging LOG_LEVEL = os.environ.get('LOG_LEVEL', 'INFO') # Zabbix ZABBIX_URL = os.environ.get('ZABBIX_URL', '') ZABBIX_TOKEN = os.environ.get('ZABBIX_TOKEN', '') # Cache CACHE_TYPE = 'SimpleCache' CACHE_DEFAULT_TIMEOUT = 600 # 10 minutes # Pagination DEFAULT_PAGE_SIZE = 20 MAX_PAGE_SIZE = 100 class DevelopmentConfig(Config): """Development configuration.""" DEBUG = True SQLALCHEMY_ECHO = True # Use MySQL from DATABASE_URL SQLALCHEMY_DATABASE_URI = os.environ.get( 'DATABASE_URL', 'mysql+pymysql://root:rootpassword@127.0.0.1:3306/shopdb_flask' ) # Keep pool options from base Config for MySQL class TestingConfig(Config): """Testing configuration.""" TESTING = True SQLALCHEMY_DATABASE_URI = 'sqlite:///:memory:' JWT_ACCESS_TOKEN_EXPIRES = timedelta(seconds=5) class ProductionConfig(Config): """Production configuration.""" DEBUG = False SQLALCHEMY_ECHO = False # Stricter security in production JWT_COOKIE_SECURE = True JWT_COOKIE_CSRF_PROTECT = True config = { 'development': DevelopmentConfig, 'testing': TestingConfig, 'production': ProductionConfig, 'default': DevelopmentConfig }