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

1"""Web provider configuration.""" 

2 

3from __future__ import annotations 

4 

5from dataclasses import dataclass 

6from typing import ClassVar 

7 

8from lexigram.config import BaseConfig 

9from lexigram.validation import ConfigDict, Field, SecretStr 

10 

11 

12@dataclass(init=False) 

13class WebProviderConfig(BaseConfig): 

14 """Configuration for the WebProvider itself. 

15 

16 This provides provider-specific settings that complement the main WebConfig. 

17 """ 

18 

19 model_config: ClassVar[ConfigDict] = ConfigDict(extra="ignore") 

20 

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

24 

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 ) 

34 

35 # Compression 

36 compression_enabled: bool = Field( 

37 default=True, 

38 description="Enable response compression", 

39 ) 

40 

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 ) 

46 

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 ) 

65 

66 @property 

67 def is_production(self) -> bool: 

68 """Returns True if running in production environment.""" 

69 return self.environment.value == "production" 

70 

71 @property 

72 def is_development(self) -> bool: 

73 """Returns True if running in development environment.""" 

74 return self.environment.value == "development" 

75 

76 @property 

77 def is_test(self) -> bool: 

78 """Returns True if running in test environment.""" 

79 return self.environment.value == "test" 

80 

81 

82__all__ = [ 

83 "WebProviderConfig", 

84]