Coverage for src/lexigram/web/config/provider.py: 90%
29 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-25 04:37 +0800
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-25 04:37 +0800
1"""Web provider configuration."""
3from __future__ import annotations
5from dataclasses import dataclass
6from typing import ClassVar
8from lexigram.config import BaseConfig
9from lexigram.validation import ConfigDict, Field, SecretStr
12@dataclass(init=False)
13class WebProviderConfig(BaseConfig):
14 """Configuration for the WebProvider itself.
16 This provides provider-specific settings that complement the main WebConfig.
17 """
19 model_config: ClassVar[ConfigDict] = ConfigDict(extra="ignore")
21 # OpenAPI settings
22 openapi_title: str = Field(default="API", description="OpenAPI title")
23 openapi_version: str = Field(default="1.0.0", description="OpenAPI version")
25 # Middleware and filters
26 middleware: list[str] = Field(
27 default_factory=list,
28 description="Middleware class names",
29 )
30 exception_filters: list[str] = Field(
31 default_factory=list,
32 description="Exception filter class names",
33 )
35 # Compression
36 compression_enabled: bool = Field(
37 default=True,
38 description="Enable response compression",
39 )
41 # Whether to raise on duplicate route registrations
42 fail_on_route_conflict: bool = Field(
43 default=False,
44 description="If true, duplicate route registrations will raise during startup; otherwise a warning is emitted",
45 )
47 # Debug routes settings
48 debug_routes: bool = Field(default=False, description="Enable debug routes")
49 debug_routes_token: SecretStr | None = Field(
50 default=None,
51 description="Token for debug routes access",
52 )
53 debug_routes_require_middleware: str | None = Field(
54 default=None,
55 description="Required middleware for debug routes",
56 )
57 debug_routes_rate_limit: int = Field(
58 default=0,
59 description="Rate limit for debug routes",
60 )
61 debug_routes_rate_window_seconds: int = Field(
62 default=60,
63 description="Rate limit window for debug routes",
64 )
66 @property
67 def is_production(self) -> bool:
68 """Returns True if running in production environment."""
69 return self.environment.value == "production"
71 @property
72 def is_development(self) -> bool:
73 """Returns True if running in development environment."""
74 return self.environment.value == "development"
76 @property
77 def is_test(self) -> bool:
78 """Returns True if running in test environment."""
79 return self.environment.value == "test"
82__all__ = [
83 "WebProviderConfig",
84]