class LoggerConfigPM(ExtraBaseModel):
app_name: str = Field(
default_factory=utils.get_slug_name, min_length=1, max_length=128
)
default: DefaultConfigPM = Field(default_factory=DefaultConfigPM)
intercept: InterceptConfigPM = Field(default_factory=InterceptConfigPM)
handlers: dict[str, LogHandlerPM] = Field(default_factory=get_default_handlers)
extra: ExtraConfigPM | None = Field(default_factory=ExtraConfigPM)
@field_validator("handlers", mode="before")
@classmethod
def _check_handlers(cls, val: Any) -> dict[str, LogHandlerPM]:
_default_handlers = get_default_handlers()
if not val:
val = _default_handlers
return val
if not isinstance(val, dict):
raise TypeError(
f"'handlers' attribute type {type(val).__name__} is invalid, must be a dict of <LogHandlerPM> or dict!"
)
for _key, _handler in val.items():
if not isinstance(_handler, (LogHandlerPM, dict)):
raise TypeError(
f"'handlers' attribute's '{_key}' key -> value type {type(_handler).__name__} is invalid, must be "
f"<LogHandlerPM> or dict!"
)
if isinstance(_handler, LogHandlerPM):
val[_key] = _handler.model_dump(
by_alias=True, exclude_unset=True, exclude_none=True
)
_default_dict = {
_key: _handler.model_dump(
by_alias=True, exclude_unset=True, exclude_none=True
)
for _key, _handler in _default_handlers.items()
}
if _default_dict != val:
val = utils.deep_merge(_default_dict, val)
for _key, _handler in val.items():
val[_key] = LogHandlerPM(**_handler)
return val