Coverage for src/lexigram/web/config/server.py: 77%
22 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 server configuration."""
3from __future__ import annotations
5from dataclasses import dataclass
6from typing import ClassVar
8from lexigram.config import BaseConfig
9from lexigram.validation import ConfigDict, Field, model_validator
10from lexigram.web import constants as const
13@dataclass(init=False)
14class ServerConfig(BaseConfig):
15 """Server configuration."""
17 model_config: ClassVar[ConfigDict] = ConfigDict(extra="ignore")
19 host: str = Field(default=const.DEFAULT_HOST, description="Bind host")
20 port: int = Field(default=const.DEFAULT_PORT, description="Bind port")
21 workers: int = Field(default=const.DEFAULT_WORKERS, description="Number of workers")
22 reload: bool = Field(default=const.DEFAULT_RELOAD, description="Enable auto-reload")
23 debug: bool = Field(default=False, description="Enable debug mode")
25 @model_validator(mode="after")
26 def validate_server(self) -> ServerConfig:
27 """Validate server host and port."""
28 if not (1 <= self.port <= 65535):
29 raise ValueError(f"Invalid port: {self.port}. Must be between 1 and 65535.")
30 if not self.host:
31 raise ValueError("Server host cannot be empty.")
32 return self
35__all__ = [
36 "ServerConfig",
37]