Coverage for /Users/mac/Documents/Work/peachOps/yaml-config-manager/src/yamleaf/types.py: 100%
136 statements
« prev ^ index » next coverage.py v7.9.2, created at 2025-07-03 19:41 +0000
« prev ^ index » next coverage.py v7.9.2, created at 2025-07-03 19:41 +0000
1"""
2Type definitions and example configuration classes.
3"""
5from typing import Protocol, runtime_checkable, Dict, List, Optional, Any
6from dataclasses import dataclass, field
9@runtime_checkable
10class ConfigProtocol(Protocol):
11 """Protocol for configuration classes."""
12 pass
15@dataclass
16class DatabaseConfig:
17 """Database configuration settings."""
18 host: str = "localhost"
19 port: int = 5432
20 name: str = "myapp"
21 username: str = "user"
22 password: str = "password"
23 ssl: bool = False
24 timeout: int = 30
25 pool_size: int = 10
26 max_connections: int = 20
27 connection_params: Dict[str, Any] = field(default_factory=dict)
30@dataclass
31class APIConfig:
32 """API configuration settings."""
33 base_url: str = "https://api.example.com"
34 timeout: int = 30
35 retries: int = 3
36 rate_limit: int = 100
37 key: str = ""
38 secret: str = ""
39 version: str = "v1"
40 headers: Dict[str, str] = field(default_factory=dict)
41 endpoints: Dict[str, str] = field(default_factory=dict)
44@dataclass
45class LoggingConfig:
46 """Logging configuration settings."""
47 level: str = "INFO"
48 format: str = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
49 file: str = "app.log"
50 max_size: int = 10485760 # 10MB
51 backup_count: int = 5
52 console: bool = True
53 json_format: bool = False
54 handlers: List[str] = field(default_factory=lambda: ["console", "file"])
57@dataclass
58class CacheConfig:
59 """Cache configuration settings."""
60 enabled: bool = True
61 backend: str = "memory" # memory, redis, memcached
62 ttl: int = 3600 # seconds
63 max_size: int = 1000
64 host: str = "localhost"
65 port: int = 6379
66 prefix: str = "app"
67 options: Dict[str, Any] = field(default_factory=dict)
70@dataclass
71class SecurityConfig:
72 """Security configuration settings."""
73 secret_key: str = "change-me-in-production"
74 jwt_secret: str = "jwt-secret-key"
75 jwt_expiry: int = 3600
76 password_hash_rounds: int = 12
77 max_login_attempts: int = 5
78 session_timeout: int = 1800
79 cors_origins: List[str] = field(default_factory=list)
80 allowed_hosts: List[str] = field(default_factory=list)
83@dataclass
84class FeatureFlags:
85 """Feature flag configuration."""
86 new_ui: bool = False
87 beta_features: bool = False
88 experimental_api: bool = False
89 debug_mode: bool = False
90 maintenance_mode: bool = False
91 analytics: bool = True
94@dataclass
95class MonitoringConfig:
96 """Monitoring and metrics configuration."""
97 enabled: bool = True
98 metrics_port: int = 9090
99 health_check_interval: int = 30
100 alert_webhook: str = ""
101 prometheus_enabled: bool = False
102 jaeger_enabled: bool = False
103 log_requests: bool = True
106@dataclass
107class AppConfig:
108 """Complete application configuration."""
109 app_name: str = "MyApp"
110 version: str = "1.0.0"
111 debug: bool = False
112 environment: str = "development" # development, staging, production
114 # Sub-configurations
115 database: DatabaseConfig = field(default_factory=DatabaseConfig)
116 api: APIConfig = field(default_factory=APIConfig)
117 logging: LoggingConfig = field(default_factory=LoggingConfig)
118 cache: CacheConfig = field(default_factory=CacheConfig)
119 security: SecurityConfig = field(default_factory=SecurityConfig)
120 features: FeatureFlags = field(default_factory=FeatureFlags)
121 monitoring: MonitoringConfig = field(default_factory=MonitoringConfig)
123 # Additional settings
124 plugins: List[str] = field(default_factory=list)
125 custom_settings: Dict[str, Any] = field(default_factory=dict)
128@dataclass
129class ServiceConfig:
130 """Microservice configuration."""
131 name: str
132 port: int
133 host: str = "localhost"
134 enabled: bool = True
135 endpoints: List[str] = field(default_factory=list)
136 dependencies: List[str] = field(default_factory=list)
137 resources: Dict[str, Any] = field(default_factory=dict)
138 env_vars: Dict[str, str] = field(default_factory=dict)
139 health_check: str = "/health"
140 metrics_endpoint: str = "/metrics"
143@dataclass
144class WorkerConfig:
145 """Worker/queue configuration."""
146 enabled: bool = True
147 workers: int = 4
148 queue_backend: str = "redis" # redis, rabbitmq, memory
149 queue_host: str = "localhost"
150 queue_port: int = 6379
151 queue_db: int = 0
152 max_retries: int = 3
153 retry_delay: int = 60
154 task_timeout: int = 300
155 prefetch_count: int = 1
158@dataclass
159class EmailConfig:
160 """Email configuration."""
161 enabled: bool = False
162 smtp_host: str = "localhost"
163 smtp_port: int = 587
164 smtp_user: str = ""
165 smtp_password: str = ""
166 use_tls: bool = True
167 from_email: str = "noreply@example.com"
168 from_name: str = "MyApp"
169 templates_dir: str = "templates/email"
172@dataclass
173class StorageConfig:
174 """File storage configuration."""
175 backend: str = "local" # local, s3, gcs, azure
176 base_path: str = "/var/data"
177 bucket_name: str = ""
178 region: str = "us-east-1"
179 access_key: str = ""
180 secret_key: str = ""
181 cdn_url: str = ""
182 max_file_size: int = 104857600 # 100MB
183 allowed_extensions: List[str] = field(default_factory=lambda: [".jpg", ".png", ".pdf"])