config.py•2.03 kB
"""
Application configuration module
"""
import os
from typing import List, Optional
from pydantic import BaseSettings
from dotenv import load_dotenv
# Load environment variables
load_dotenv()
class Settings(BaseSettings):
"""Application settings"""
# Application
app_name: str = os.getenv("APP_NAME", "MCP-Expokossodo")
app_version: str = os.getenv("APP_VERSION", "1.0.0")
debug: bool = os.getenv("DEBUG", "False").lower() == "true"
log_level: str = os.getenv("LOG_LEVEL", "INFO")
# Database
db_host: str = os.getenv("DB_HOST", "localhost")
db_user: str = os.getenv("DB_USER", "root")
db_password: str = os.getenv("DB_PASSWORD", "")
db_port: int = int(os.getenv("DB_PORT", "3306"))
db_name: str = os.getenv("DB_NAME", "expokossodo")
# JWT Configuration
jwt_secret_key: str = os.getenv("JWT_SECRET_KEY", "your-secret-key")
jwt_algorithm: str = os.getenv("JWT_ALGORITHM", "HS256")
jwt_access_token_expire_minutes: int = int(os.getenv("JWT_ACCESS_TOKEN_EXPIRE_MINUTES", "30"))
# Redis Configuration
redis_host: str = os.getenv("REDIS_HOST", "localhost")
redis_port: int = int(os.getenv("REDIS_PORT", "6379"))
redis_db: int = int(os.getenv("REDIS_DB", "0"))
# Rate Limiting
rate_limit_reads_per_second: int = int(os.getenv("RATE_LIMIT_READS_PER_SECOND", "10"))
rate_limit_writes_per_second: int = int(os.getenv("RATE_LIMIT_WRITES_PER_SECOND", "3"))
# CORS
allowed_origins: List[str] = ["*"] # Configure properly in production
@property
def database_url(self) -> str:
"""Get database URL for SQLAlchemy"""
return f"mysql+aiomysql://{self.db_user}:{self.db_password}@{self.db_host}:{self.db_port}/{self.db_name}"
@property
def redis_url(self) -> str:
"""Get Redis URL"""
return f"redis://{self.redis_host}:{self.redis_port}/{self.redis_db}"
class Config:
env_file = ".env"
# Global settings instance
settings = Settings()