Skip to content

LoggerConfigPM

Bases: ExtraBaseModel

Source code in src/beans_logging/config.py
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