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

1""" 

2Type definitions and example configuration classes. 

3""" 

4 

5from typing import Protocol, runtime_checkable, Dict, List, Optional, Any 

6from dataclasses import dataclass, field 

7 

8 

9@runtime_checkable 

10class ConfigProtocol(Protocol): 

11 """Protocol for configuration classes.""" 

12 pass 

13 

14 

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) 

28 

29 

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) 

42 

43 

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"]) 

55 

56 

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) 

68 

69 

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) 

81 

82 

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 

92 

93 

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 

104 

105 

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 

113 

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) 

122 

123 # Additional settings 

124 plugins: List[str] = field(default_factory=list) 

125 custom_settings: Dict[str, Any] = field(default_factory=dict) 

126 

127 

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" 

141 

142 

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 

156 

157 

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" 

170 

171 

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"])