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

39 statements  

1# SPDX-License-Identifier: MIT 

2 

3""" 

4Classes Without Boilerplate 

5""" 

6 

7import sys 

8 

9from functools import partial 

10from typing import Callable, Literal, Protocol 

11 

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 

32 

33 

34s = attributes = attrs 

35ib = attr = attrib 

36dataclass = partial(attrs, auto_attribs=True) # happy Easter ;) 

37 

38 

39class AttrsInstance(Protocol): 

40 pass 

41 

42 

43NothingType = Literal[_Nothing.NOTHING] 

44 

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] 

81 

82 

83_LAZY_SUBMODULES = {"converters", "validators", "filters"} 

84 

85 

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 """ 

91 

92 def __getattr__(name: str) -> str: 

93 if name in _LAZY_SUBMODULES: 

94 import importlib 

95 

96 mod = importlib.import_module(f".{name}", mod_name) 

97 sys.modules[mod_name].__dict__[name] = mod 

98 return mod 

99 

100 if name not in ("__version__", "__version_info__"): 

101 msg = f"module {mod_name} has no attribute {name}" 

102 raise AttributeError(msg) 

103 

104 from importlib.metadata import metadata 

105 

106 meta = metadata("attrs") 

107 

108 if name == "__version_info__": 

109 return VersionInfo._from_version_string(meta["version"]) 

110 

111 return meta["version"] 

112 

113 return __getattr__ 

114 

115 

116__getattr__ = _make_getattr(__name__) 

117 

118 

119def __dir__() -> list[str]: 

120 return sorted(set(globals()) | set(__all__))