Coverage for src/lexigram/admin/config/observability.py: 18%

22 statements  

« prev     ^ index     » next       coverage.py v7.15.4, created at 2026-08-24 23:31 +0800

1"""Observability, storage, and notification configurations.""" 

2 

3from __future__ import annotations 

4 

5from dataclasses import dataclass 

6 

7from lexigram.domain import DomainModel 

8from lexigram.validation import Field 

9 

10 

11@dataclass(init=False) 

12class AdminObservabilityConfig(DomainModel): 

13 metrics_enabled: bool = Field(default=True) 

14 high_cardinality_labels_enabled: bool = Field(default=False) 

15 

16 

17@dataclass(init=False) 

18class AdminStorageConfig(DomainModel): 

19 """Configuration for admin file storage service.""" 

20 

21 base_path: str = Field( 

22 default="uploads", description="Base path for uploaded files" 

23 ) 

24 max_file_size: int = Field( 

25 default=10 * 1024 * 1024, 

26 description="Maximum allowed file size in bytes (default 10 MB)", 

27 ) 

28 allowed_content_types: list[str] = Field( 

29 default_factory=lambda: [ 

30 "image/jpeg", 

31 "image/png", 

32 "image/gif", 

33 "image/webp", 

34 "application/pdf", 

35 "text/plain", 

36 "text/csv", 

37 ], 

38 description="Allowed MIME content types for uploads", 

39 ) 

40 presigned_url_expiry: int = Field( 

41 default=3600, 

42 description="Default expiry for presigned URLs in seconds", 

43 ) 

44 

45 

46@dataclass(init=False) 

47class AdminNotificationConfig(DomainModel): 

48 """Configuration for admin notification service. 

49 

50 Controls email notification behaviour, delivery channels, and 

51 retry settings. 

52 """ 

53 

54 email_from: str = Field( 

55 default="admin@localhost", description="Sender email address" 

56 ) 

57 email_from_name: str = Field( 

58 default="Admin Panel", description="Sender display name" 

59 ) 

60 default_channel: str = Field( 

61 default="email", description="Default delivery channel" 

62 ) 

63 max_retries: int = Field(default=3, description="Maximum delivery retry attempts") 

64 retry_delay_seconds: int = Field(default=60, description="Seconds between retries") 

65 enabled: bool = Field(default=True, description="Enable notification sending")