1+ """
2+ TaskProvision configuration management
3+ """
4+
5+ import os
6+ from typing import Optional , List
7+ from pydantic import BaseSettings , Field
8+ from functools import lru_cache
9+
10+
11+ class Settings (BaseSettings ):
12+ """Application settings"""
13+
14+ # App configuration
15+ app_name : str = "TaskProvision"
16+ app_version : str = "1.0.0"
17+ debug : bool = False
18+ environment : str = Field (default = "development" , env = "ENVIRONMENT" )
19+
20+ # Server configuration
21+ host : str = Field (default = "0.0.0.0" , env = "HOST" )
22+ port : int = Field (default = 8000 , env = "PORT" )
23+ workers : int = Field (default = 1 , env = "WORKERS" )
24+
25+ # Database configuration
26+ database_url : str = Field (
27+ default = "postgresql://taskprovision:password@localhost/taskprovision" ,
28+ env = "DATABASE_URL"
29+ )
30+ redis_url : str = Field (default = "redis://localhost:6379/0" , env = "REDIS_URL" )
31+
32+ # Security
33+ secret_key : str = Field (
34+ default = "your-secret-key-change-in-production" ,
35+ env = "SECRET_KEY"
36+ )
37+ algorithm : str = Field (default = "HS256" , env = "ALGORITHM" )
38+ access_token_expire_minutes : int = Field (default = 30 , env = "ACCESS_TOKEN_EXPIRE_MINUTES" )
39+
40+ # AI Services
41+ ollama_base_url : str = Field (default = "http://localhost:11434" , env = "OLLAMA_BASE_URL" )
42+ ollama_model : str = Field (default = "qwen2.5:1.5b" , env = "OLLAMA_MODEL" )
43+ openai_api_key : Optional [str ] = Field (default = None , env = "OPENAI_API_KEY" )
44+ anthropic_api_key : Optional [str ] = Field (default = None , env = "ANTHROPIC_API_KEY" )
45+
46+ # External Services
47+ github_token : Optional [str ] = Field (default = None , env = "GITHUB_TOKEN" )
48+ stripe_api_key : Optional [str ] = Field (default = None , env = "STRIPE_API_KEY" )
49+ stripe_webhook_secret : Optional [str ] = Field (default = None , env = "STRIPE_WEBHOOK_SECRET" )
50+
51+ # Email configuration
52+ smtp_host : str = Field (default = "localhost" , env = "SMTP_HOST" )
53+ smtp_port : int = Field (default = 587 , env = "SMTP_PORT" )
54+ smtp_username : Optional [str ] = Field (default = None , env = "SMTP_USERNAME" )
55+ smtp_password : Optional [str ] = Field (default = None , env = "SMTP_PASSWORD" )
56+ smtp_use_tls : bool = Field (default = True , env = "SMTP_USE_TLS" )
57+
58+ # Monitoring
59+ sentry_dsn : Optional [str ] = Field (default = None , env = "SENTRY_DSN" )
60+ prometheus_enabled : bool = Field (default = True , env = "PROMETHEUS_ENABLED" )
61+ log_level : str = Field (default = "INFO" , env = "LOG_LEVEL" )
62+
63+ # File storage
64+ upload_dir : str = Field (default = "./uploads" , env = "UPLOAD_DIR" )
65+ max_file_size : int = Field (default = 10 * 1024 * 1024 , env = "MAX_FILE_SIZE" ) # 10MB
66+ allowed_file_types : List [str ] = Field (
67+ default = ["py" , "js" , "ts" , "go" , "rs" , "java" , "cpp" , "c" , "h" ],
68+ env = "ALLOWED_FILE_TYPES"
69+ )
70+
71+ # Task management
72+ default_task_timeout : int = Field (default = 300 , env = "DEFAULT_TASK_TIMEOUT" ) # 5 minutes
73+ max_concurrent_tasks : int = Field (default = 10 , env = "MAX_CONCURRENT_TASKS" )
74+
75+ # Code generation
76+ code_generation_timeout : int = Field (default = 60 , env = "CODE_GENERATION_TIMEOUT" )
77+ max_code_length : int = Field (default = 10000 , env = "MAX_CODE_LENGTH" )
78+
79+ # Quality guard
80+ quality_check_enabled : bool = Field (default = True , env = "QUALITY_CHECK_ENABLED" )
81+ max_function_length : int = Field (default = 50 , env = "MAX_FUNCTION_LENGTH" )
82+ max_complexity : int = Field (default = 10 , env = "MAX_COMPLEXITY" )
83+
84+ # Sales automation
85+ lead_generation_enabled : bool = Field (default = True , env = "LEAD_GENERATION_ENABLED" )
86+ github_mining_enabled : bool = Field (default = True , env = "GITHUB_MINING_ENABLED" )
87+ email_campaigns_enabled : bool = Field (default = True , env = "EMAIL_CAMPAIGNS_ENABLED" )
88+
89+ # API rate limiting
90+ rate_limit_per_minute : int = Field (default = 60 , env = "RATE_LIMIT_PER_MINUTE" )
91+ burst_limit : int = Field (default = 10 , env = "BURST_LIMIT" )
92+
93+ # Cors settings
94+ cors_origins : List [str ] = Field (
95+ default = ["http://localhost:3000" , "http://localhost:8000" ],
96+ env = "CORS_ORIGINS"
97+ )
98+
99+ class Config :
100+ env_file = ".env"
101+ env_file_encoding = "utf-8"
102+ case_sensitive = False
103+
104+
105+ @lru_cache ()
106+ def get_settings () -> Settings :
107+ """Get cached settings instance"""
108+ return Settings ()
109+
110+
111+ def get_database_url () -> str :
112+ """Get database URL for SQLAlchemy"""
113+ settings = get_settings ()
114+ return settings .database_url
115+
116+
117+ def get_redis_url () -> str :
118+ """Get Redis URL"""
119+ settings = get_settings ()
120+ return settings .redis_url
121+
122+
123+ def is_production () -> bool :
124+ """Check if running in production environment"""
125+ settings = get_settings ()
126+ return settings .environment .lower () == "production"
127+
128+
129+ def is_development () -> bool :
130+ """Check if running in development environment"""
131+ settings = get_settings ()
132+ return settings .environment .lower () == "development"
133+
134+
135+ def get_upload_settings () -> dict :
136+ """Get file upload settings"""
137+ settings = get_settings ()
138+ return {
139+ "upload_dir" : settings .upload_dir ,
140+ "max_file_size" : settings .max_file_size ,
141+ "allowed_file_types" : settings .allowed_file_types ,
142+ }
143+
144+
145+ def get_ai_settings () -> dict :
146+ """Get AI service settings"""
147+ settings = get_settings ()
148+ return {
149+ "ollama_base_url" : settings .ollama_base_url ,
150+ "ollama_model" : settings .ollama_model ,
151+ "openai_api_key" : settings .openai_api_key ,
152+ "anthropic_api_key" : settings .anthropic_api_key ,
153+ }
154+
155+
156+ def get_quality_settings () -> dict :
157+ """Get quality guard settings"""
158+ settings = get_settings ()
159+ return {
160+ "enabled" : settings .quality_check_enabled ,
161+ "max_function_length" : settings .max_function_length ,
162+ "max_complexity" : settings .max_complexity ,
163+ "timeout" : settings .code_generation_timeout ,
164+ }
0 commit comments