Source code for jsonpolars.model

# -*- coding: utf-8 -*-

import typing as T
import dataclasses

from .exc import ParamError
from .arg import _REQUIRED, REQ, rm_na, T_KWARGS


[docs]@dataclasses.dataclass class BaseModel: def _validate(self): for field in dataclasses.fields(self.__class__): if field.init: k = field.name if getattr(self, k) is REQ: # pragma: no cover raise ParamError(f"Field {k!r} is required for {self.__class__}.") def __post_init__(self): self._validate() def to_dict(self) -> T_KWARGS: raise NotImplementedError @classmethod def from_dict(cls, dct: T_KWARGS): raise NotImplementedError @classmethod def _split_req_opt(cls, kwargs: T_KWARGS) -> T.Tuple[T_KWARGS, T_KWARGS]: req_kwargs, opt_kwargs = dict(), dict() for field in dataclasses.fields(cls): if isinstance(field.default, _REQUIRED): try: req_kwargs[field.name] = kwargs[field.name] except KeyError: raise ParamError( f"{field.name!r} is a required parameter for {cls}!" ) else: try: opt_kwargs[field.name] = kwargs[field.name] except KeyError: pass opt_kwargs = rm_na(**opt_kwargs) return req_kwargs, opt_kwargs