Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/attr/__init__.py: 72%
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1# SPDX-License-Identifier: MIT
3"""
4Classes Without Boilerplate
5"""
7import sys
9from functools import partial
10from typing import Callable, Literal, Protocol
12from . import exceptions, setters
13from ._cmp import cmp_using
14from ._config import get_run_validators, set_run_validators
15from ._funcs import asdict, assoc, astuple, has, resolve_types
16from ._make import (
17 NOTHING,
18 Attribute,
19 Converter,
20 Factory,
21 _Nothing,
22 attrib,
23 attrs,
24 evolve,
25 fields,
26 fields_dict,
27 make_class,
28 validate,
29)
30from ._next_gen import define, field, frozen, mutable
31from ._version_info import VersionInfo
34s = attributes = attrs
35ib = attr = attrib
36dataclass = partial(attrs, auto_attribs=True) # happy Easter ;)
39class AttrsInstance(Protocol):
40 pass
43NothingType = Literal[_Nothing.NOTHING]
45__all__ = [
46 "NOTHING",
47 "Attribute",
48 "AttrsInstance",
49 "Converter",
50 "Factory",
51 "NothingType",
52 "asdict",
53 "assoc",
54 "astuple",
55 "attr",
56 "attrib",
57 "attributes",
58 "attrs",
59 "cmp_using",
60 "converters",
61 "define",
62 "evolve",
63 "exceptions",
64 "field",
65 "fields",
66 "fields_dict",
67 "filters",
68 "frozen",
69 "get_run_validators",
70 "has",
71 "ib",
72 "make_class",
73 "mutable",
74 "resolve_types",
75 "s",
76 "set_run_validators",
77 "setters",
78 "validate",
79 "validators",
80]
83_LAZY_SUBMODULES = {"converters", "validators", "filters"}
86def _make_getattr(mod_name: str) -> Callable:
87 """
88 Create a metadata proxy for packaging information that uses *mod_name* in
89 its warnings and errors.
90 """
92 def __getattr__(name: str) -> str:
93 if name in _LAZY_SUBMODULES:
94 import importlib
96 mod = importlib.import_module(f".{name}", mod_name)
97 sys.modules[mod_name].__dict__[name] = mod
98 return mod
100 if name not in ("__version__", "__version_info__"):
101 msg = f"module {mod_name} has no attribute {name}"
102 raise AttributeError(msg)
104 from importlib.metadata import metadata
106 meta = metadata("attrs")
108 if name == "__version_info__":
109 return VersionInfo._from_version_string(meta["version"])
111 return meta["version"]
113 return __getattr__
116__getattr__ = _make_getattr(__name__)
119def __dir__() -> list[str]:
120 return sorted(set(globals()) | set(__all__))