Skip to main content
Glama
config.py7.33 kB
"""Application configuration management using pydantic-settings. This module provides centralized configuration management for the application, loading settings from environment variables and .env files. """ from functools import lru_cache from typing import Any from pydantic import Field, field_validator from pydantic_settings import BaseSettings, SettingsConfigDict class Settings(BaseSettings): """Application settings loaded from environment variables. Attributes: app_name: Name of the application. app_version: Version of the application. debug: Enable debug mode. environment: Deployment environment (development, staging, production). host: Server host address. port: Server port number. workers: Number of worker processes. reload: Enable auto-reload for development. database_url: Database connection URL. database_pool_size: Connection pool size. database_max_overflow: Maximum overflow connections. redis_url: Redis connection URL. redis_cache_ttl: Cache TTL in seconds. celery_broker_url: Celery broker URL. celery_result_backend: Celery result backend URL. secret_key: Secret key for JWT encoding. access_token_expire_minutes: Access token expiration time. refresh_token_expire_days: Refresh token expiration time. algorithm: JWT encoding algorithm. cors_origins: Allowed CORS origins. cors_allow_credentials: Allow credentials in CORS. cors_allow_methods: Allowed HTTP methods for CORS. cors_allow_headers: Allowed headers for CORS. upload_dir: Directory for uploaded files. export_dir: Directory for exported files. temp_dir: Temporary files directory. max_upload_size: Maximum upload file size in bytes. allowed_extensions: Allowed file extensions. log_level: Logging level. log_format: Log format (json or text). log_file: Log file path. sentry_dsn: Sentry DSN for error tracking. prometheus_enabled: Enable Prometheus metrics. prometheus_port: Prometheus metrics port. mcp_server_name: MCP server name. mcp_server_version: MCP server version. mcp_transport: MCP transport type. max_document_size: Maximum document size in bytes. max_concurrent_documents: Maximum concurrent document operations. document_timeout: Document operation timeout in seconds. encryption_key: Key for document encryption. api_key_header: Header name for API key. rate_limit_requests: Rate limit requests count. rate_limit_window: Rate limit window in seconds. """ model_config = SettingsConfigDict( env_file=".env", env_file_encoding="utf-8", case_sensitive=False, extra="ignore", ) # Application app_name: str = Field(default="MCP-OPENAPI-DOCX") app_version: str = Field(default="1.0.0") debug: bool = Field(default=False) environment: str = Field(default="development") # Server host: str = Field(default="0.0.0.0") port: int = Field(default=8000, ge=1, le=65535) workers: int = Field(default=4, ge=1) reload: bool = Field(default=False) # Database database_url: str = Field(default="sqlite+aiosqlite:///./docx_db.sqlite") database_pool_size: int = Field(default=10, ge=1) database_max_overflow: int = Field(default=20, ge=0) # Redis redis_url: str = Field(default="redis://localhost:6379/0") redis_cache_ttl: int = Field(default=3600, ge=0) # Celery celery_broker_url: str = Field(default="redis://localhost:6379/1") celery_result_backend: str = Field(default="redis://localhost:6379/2") # Authentication secret_key: str = Field(default="your-super-secret-key-change-in-production") access_token_expire_minutes: int = Field(default=30, ge=1) refresh_token_expire_days: int = Field(default=7, ge=1) algorithm: str = Field(default="HS256") # CORS cors_origins: list[str] = Field( default=["http://localhost:3000", "http://localhost:8080"] ) cors_allow_credentials: bool = Field(default=True) cors_allow_methods: list[str] = Field(default=["*"]) cors_allow_headers: list[str] = Field(default=["*"]) # File Storage upload_dir: str = Field(default="./uploads") export_dir: str = Field(default="./exports") temp_dir: str = Field(default="./temp") max_upload_size: int = Field(default=104857600) # 100MB allowed_extensions: list[str] = Field( default=[".docx", ".doc", ".pdf", ".html", ".md"] ) # Logging log_level: str = Field(default="INFO") log_format: str = Field(default="json") log_file: str = Field(default="./logs/app.log") # Monitoring sentry_dsn: str = Field(default="") prometheus_enabled: bool = Field(default=True) prometheus_port: int = Field(default=9090, ge=1, le=65535) # MCP Server mcp_server_name: str = Field(default="docx-mcp-server") mcp_server_version: str = Field(default="1.0.0") mcp_transport: str = Field(default="stdio") # Document Processing max_document_size: int = Field(default=52428800) # 50MB max_concurrent_documents: int = Field(default=10, ge=1) document_timeout: int = Field(default=300, ge=1) # Security encryption_key: str = Field(default="your-encryption-key-32-chars-long") api_key_header: str = Field(default="X-API-Key") rate_limit_requests: int = Field(default=100, ge=1) rate_limit_window: int = Field(default=60, ge=1) @field_validator("cors_origins", mode="before") @classmethod def parse_cors_origins(cls, v: Any) -> list[str]: """Parse CORS origins from string or list. Args: v: Input value (string or list). Returns: List of CORS origins. """ if isinstance(v, str): # Try to parse as JSON list import json try: return json.loads(v) except json.JSONDecodeError: # Treat as comma-separated list return [origin.strip() for origin in v.split(",")] return v @field_validator("allowed_extensions", mode="before") @classmethod def parse_extensions(cls, v: Any) -> list[str]: """Parse allowed extensions from string or list. Args: v: Input value (string or list). Returns: List of allowed extensions. """ if isinstance(v, str): return [ext.strip() for ext in v.split(",")] return v @property def is_production(self) -> bool: """Check if running in production environment. Returns: True if environment is production. """ return self.environment.lower() == "production" @property def is_development(self) -> bool: """Check if running in development environment. Returns: True if environment is development. """ return self.environment.lower() == "development" @lru_cache def get_settings() -> Settings: """Get cached application settings. Returns: Application settings instance. """ return Settings()

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Fu-Jie/MCP-OPENAPI-DOCX'

If you have feedback or need assistance with the MCP directory API, please join our Discord server