Mercurial > repos > shellac > sam_consensus_v3
comparison env/lib/python3.9/site-packages/attr/_next_gen.py @ 0:4f3585e2f14b draft default tip
"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author | shellac |
---|---|
date | Mon, 22 Mar 2021 18:12:50 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4f3585e2f14b |
---|---|
1 """ | |
2 This is a Python 3.6 and later-only, keyword-only, and **provisional** API that | |
3 calls `attr.s` with different default values. | |
4 | |
5 Provisional APIs that shall become "import attrs" one glorious day. | |
6 """ | |
7 | |
8 from functools import partial | |
9 | |
10 from attr.exceptions import UnannotatedAttributeError | |
11 | |
12 from . import setters | |
13 from ._make import NOTHING, _frozen_setattrs, attrib, attrs | |
14 | |
15 | |
16 def define( | |
17 maybe_cls=None, | |
18 *, | |
19 these=None, | |
20 repr=None, | |
21 hash=None, | |
22 init=None, | |
23 slots=True, | |
24 frozen=False, | |
25 weakref_slot=True, | |
26 str=False, | |
27 auto_attribs=None, | |
28 kw_only=False, | |
29 cache_hash=False, | |
30 auto_exc=True, | |
31 eq=None, | |
32 order=False, | |
33 auto_detect=True, | |
34 getstate_setstate=None, | |
35 on_setattr=None, | |
36 field_transformer=None, | |
37 ): | |
38 r""" | |
39 The only behavioral differences are the handling of the *auto_attribs* | |
40 option: | |
41 | |
42 :param Optional[bool] auto_attribs: If set to `True` or `False`, it behaves | |
43 exactly like `attr.s`. If left `None`, `attr.s` will try to guess: | |
44 | |
45 1. If all attributes are annotated and no `attr.ib` is found, it assumes | |
46 *auto_attribs=True*. | |
47 2. Otherwise it assumes *auto_attribs=False* and tries to collect | |
48 `attr.ib`\ s. | |
49 | |
50 and that mutable classes (``frozen=False``) validate on ``__setattr__``. | |
51 | |
52 .. versionadded:: 20.1.0 | |
53 """ | |
54 | |
55 def do_it(cls, auto_attribs): | |
56 return attrs( | |
57 maybe_cls=cls, | |
58 these=these, | |
59 repr=repr, | |
60 hash=hash, | |
61 init=init, | |
62 slots=slots, | |
63 frozen=frozen, | |
64 weakref_slot=weakref_slot, | |
65 str=str, | |
66 auto_attribs=auto_attribs, | |
67 kw_only=kw_only, | |
68 cache_hash=cache_hash, | |
69 auto_exc=auto_exc, | |
70 eq=eq, | |
71 order=order, | |
72 auto_detect=auto_detect, | |
73 collect_by_mro=True, | |
74 getstate_setstate=getstate_setstate, | |
75 on_setattr=on_setattr, | |
76 field_transformer=field_transformer, | |
77 ) | |
78 | |
79 def wrap(cls): | |
80 """ | |
81 Making this a wrapper ensures this code runs during class creation. | |
82 | |
83 We also ensure that frozen-ness of classes is inherited. | |
84 """ | |
85 nonlocal frozen, on_setattr | |
86 | |
87 had_on_setattr = on_setattr not in (None, setters.NO_OP) | |
88 | |
89 # By default, mutable classes validate on setattr. | |
90 if frozen is False and on_setattr is None: | |
91 on_setattr = setters.validate | |
92 | |
93 # However, if we subclass a frozen class, we inherit the immutability | |
94 # and disable on_setattr. | |
95 for base_cls in cls.__bases__: | |
96 if base_cls.__setattr__ is _frozen_setattrs: | |
97 if had_on_setattr: | |
98 raise ValueError( | |
99 "Frozen classes can't use on_setattr " | |
100 "(frozen-ness was inherited)." | |
101 ) | |
102 | |
103 on_setattr = setters.NO_OP | |
104 break | |
105 | |
106 if auto_attribs is not None: | |
107 return do_it(cls, auto_attribs) | |
108 | |
109 try: | |
110 return do_it(cls, True) | |
111 except UnannotatedAttributeError: | |
112 return do_it(cls, False) | |
113 | |
114 # maybe_cls's type depends on the usage of the decorator. It's a class | |
115 # if it's used as `@attrs` but ``None`` if used as `@attrs()`. | |
116 if maybe_cls is None: | |
117 return wrap | |
118 else: | |
119 return wrap(maybe_cls) | |
120 | |
121 | |
122 mutable = define | |
123 frozen = partial(define, frozen=True, on_setattr=None) | |
124 | |
125 | |
126 def field( | |
127 *, | |
128 default=NOTHING, | |
129 validator=None, | |
130 repr=True, | |
131 hash=None, | |
132 init=True, | |
133 metadata=None, | |
134 converter=None, | |
135 factory=None, | |
136 kw_only=False, | |
137 eq=None, | |
138 order=None, | |
139 on_setattr=None, | |
140 ): | |
141 """ | |
142 Identical to `attr.ib`, except keyword-only and with some arguments | |
143 removed. | |
144 | |
145 .. versionadded:: 20.1.0 | |
146 """ | |
147 return attrib( | |
148 default=default, | |
149 validator=validator, | |
150 repr=repr, | |
151 hash=hash, | |
152 init=init, | |
153 metadata=metadata, | |
154 converter=converter, | |
155 factory=factory, | |
156 kw_only=kw_only, | |
157 eq=eq, | |
158 order=order, | |
159 on_setattr=on_setattr, | |
160 ) |