codekingpro/portable-devtools
114k
1# SPDX-License-Identifier: MIT2 3"""4Classes Without Boilerplate5"""6 7from functools import partial8from typing import Callable, Literal, Protocol9 10from . import converters, exceptions, filters, setters, validators11from ._cmp import cmp_using12from ._config import get_run_validators, set_run_validators13from ._funcs import asdict, assoc, astuple, has, resolve_types14from ._make import (15 NOTHING,16 Attribute,17 Converter,18 Factory,19 _Nothing,20 attrib,21 attrs,22 evolve,23 fields,24 fields_dict,25 make_class,26 validate,27)28from ._next_gen import define, field, frozen, mutable29from ._version_info import VersionInfo30 31 32s = attributes = attrs33ib = attr = attrib34dataclass = partial(attrs, auto_attribs=True) # happy Easter ;)35 36 37class AttrsInstance(Protocol):38 pass39 40 41NothingType = Literal[_Nothing.NOTHING]42 43__all__ = [44 "NOTHING",45 "Attribute",46 "AttrsInstance",47 "Converter",48 "Factory",49 "NothingType",50 "asdict",51 "assoc",52 "astuple",53 "attr",54 "attrib",55 "attributes",56 "attrs",57 "cmp_using",58 "converters",59 "define",60 "evolve",61 "exceptions",62 "field",63 "fields",64 "fields_dict",65 "filters",66 "frozen",67 "get_run_validators",68 "has",69 "ib",70 "make_class",71 "mutable",72 "resolve_types",73 "s",74 "set_run_validators",75 "setters",76 "validate",77 "validators",78]79 80 81def _make_getattr(mod_name: str) -> Callable:82 """83 Create a metadata proxy for packaging information that uses *mod_name* in84 its warnings and errors.85 """86 87 def __getattr__(name: str) -> str:88 if name not in ("__version__", "__version_info__"):89 msg = f"module {mod_name} has no attribute {name}"90 raise AttributeError(msg)91 92 from importlib.metadata import metadata93 94 meta = metadata("attrs")95 96 if name == "__version_info__":97 return VersionInfo._from_version_string(meta["version"])98 99 return meta["version"]100 101 return __getattr__102 103 104__getattr__ = _make_getattr(__name__)105 