Spaces:
Sleeping
Sleeping
| # SPDX-License-Identifier: MIT | |
| """ | |
| Classes Without Boilerplate | |
| """ | |
| from functools import partial | |
| from typing import Callable | |
| from . import converters, exceptions, filters, setters, validators | |
| from ._cmp import cmp_using | |
| from ._compat import Protocol | |
| from ._config import get_run_validators, set_run_validators | |
| from ._funcs import asdict, assoc, astuple, evolve, has, resolve_types | |
| from ._make import ( | |
| NOTHING, | |
| Attribute, | |
| Factory, | |
| attrib, | |
| attrs, | |
| fields, | |
| fields_dict, | |
| make_class, | |
| validate, | |
| ) | |
| from ._next_gen import define, field, frozen, mutable | |
| from ._version_info import VersionInfo | |
| s = attributes = attrs | |
| ib = attr = attrib | |
| dataclass = partial(attrs, auto_attribs=True) # happy Easter ;) | |
| class AttrsInstance(Protocol): | |
| pass | |
| __all__ = [ | |
| "Attribute", | |
| "AttrsInstance", | |
| "Factory", | |
| "NOTHING", | |
| "asdict", | |
| "assoc", | |
| "astuple", | |
| "attr", | |
| "attrib", | |
| "attributes", | |
| "attrs", | |
| "cmp_using", | |
| "converters", | |
| "define", | |
| "evolve", | |
| "exceptions", | |
| "field", | |
| "fields", | |
| "fields_dict", | |
| "filters", | |
| "frozen", | |
| "get_run_validators", | |
| "has", | |
| "ib", | |
| "make_class", | |
| "mutable", | |
| "resolve_types", | |
| "s", | |
| "set_run_validators", | |
| "setters", | |
| "validate", | |
| "validators", | |
| ] | |
| def _make_getattr(mod_name: str) -> Callable: | |
| """ | |
| Create a metadata proxy for packaging information that uses *mod_name* in | |
| its warnings and errors. | |
| """ | |
| def __getattr__(name: str) -> str: | |
| dunder_to_metadata = { | |
| "__title__": "Name", | |
| "__copyright__": "", | |
| "__version__": "version", | |
| "__version_info__": "version", | |
| "__description__": "summary", | |
| "__uri__": "", | |
| "__url__": "", | |
| "__author__": "", | |
| "__email__": "", | |
| "__license__": "license", | |
| } | |
| if name not in dunder_to_metadata: | |
| msg = f"module {mod_name} has no attribute {name}" | |
| raise AttributeError(msg) | |
| import sys | |
| import warnings | |
| if sys.version_info < (3, 8): | |
| from importlib_metadata import metadata | |
| else: | |
| from importlib.metadata import metadata | |
| if name not in ("__version__", "__version_info__"): | |
| warnings.warn( | |
| f"Accessing {mod_name}.{name} is deprecated and will be " | |
| "removed in a future release. Use importlib.metadata directly " | |
| "to query for attrs's packaging metadata.", | |
| DeprecationWarning, | |
| stacklevel=2, | |
| ) | |
| meta = metadata("attrs") | |
| if name == "__license__": | |
| return "MIT" | |
| if name == "__copyright__": | |
| return "Copyright (c) 2015 Hynek Schlawack" | |
| if name in ("__uri__", "__url__"): | |
| return meta["Project-URL"].split(" ", 1)[-1] | |
| if name == "__version_info__": | |
| return VersionInfo._from_version_string(meta["version"]) | |
| if name == "__author__": | |
| return meta["Author-email"].rsplit(" ", 1)[0] | |
| if name == "__email__": | |
| return meta["Author-email"].rsplit("<", 1)[1][:-1] | |
| return meta[dunder_to_metadata[name]] | |
| return __getattr__ | |
| __getattr__ = _make_getattr(__name__) | |