hyb
2026-01-30 15bc7727b58bf9ca0c8f21702fa893daac232b8d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
Ë
·^iÒSãóx—dZddlZddlZddlmZddlmZddlmZmZddl    m
Z
m Z m Z m Z ddlmZdd    lmZgd
¢Zd „Zd „Zed „«Ze ddd¬«Gd„d««Zd„Ze ddd¬«Gd„d««Zd=d„Ze ddd¬«Gd„d««Zd„Ze ddd¬«Gd„d««Zd„Ze ddd¬«Gd„d««Zd „Ze ddd¬«Gd!„d"««Z d>d#„Z!e ddd¬«Gd$„d%««Z"    d?d&„Z#e ddd¬«Gd'„d(««Z$d)„Z%d*„Z&d+„Z'd,„Z(e ddd¬«Gd-„d.««Z)d/„Z*e ddd¬«Gd0„d1««Z+d2„Z,e ddd¬«Gd3„d4««Z-d5„Z.e ddd¬«Gd6„d7««Z/de0e1fd8œd9„Z2e ddd¬«Gd:„d;««Z3d<„Z4y)@z
Commonly useful validators.
éN)Úcontextmanager)ÚPatterné)Úget_run_validatorsÚset_run_validators)Ú _AndValidatorÚand_ÚattribÚattrs)Údefault_if_none)ÚNotCallableError)r    Ú deep_iterableÚ deep_mappingÚdisabledÚgeÚ get_disabledÚgtÚin_Ú instance_ofÚ is_callableÚleÚltÚ
matches_reÚmax_lenÚmin_lenÚnot_ÚoptionalÚor_Ú set_disabledcó—t| «y)a
    Globally disable or enable running validators.
 
    By default, they are run.
 
    Args:
        disabled (bool): If `True`, disable running all validators.
 
    .. warning::
 
        This function is not thread-safe!
 
    .. versionadded:: 21.3.0
    N©r)rs õbH:\项目\archive\测试组\脚本\Change_password\venv_build\Lib\site-packages\attr/validators.pyrr*s€ô˜8|Õ$ócó—t« S)zº
    Return a bool indicating whether validators are currently disabled or not.
 
    Returns:
        bool:`True` if validators are currently disabled.
 
    .. versionadded:: 21.3.0
    )r©r#r"rr<s€ô"Ó#Ð #Ð#r#c#óbK—td«    d–—td«y#td«wxYw­w)z°
    Context manager that disables running validators within its context.
 
    .. warning::
 
        This context manager is not thread-safe!
 
    .. versionadded:: 21.3.0
    FNTr!r%r#r"rrHs)èø€ôuÔð!Û ä˜4Õ øÔ˜4Õ üs‚ /“ /Ÿ ,¬/FT)ÚreprÚslotsÚ unsafe_hashcó&—eZdZe«Zd„Zd„Zy)Ú_InstanceOfValidatorc    óº—t||j«sEd|j›d|j›d|›d|j›d    }t    |||j|«‚y)úP
        We use a callable class to be able to change the ``__repr__``.
        ú'ú
' must be ú (got z  that is a ú).N)Ú
isinstanceÚtypeÚnameÚ    __class__Ú    TypeError©ÚselfÚinstÚattrÚvalueÚmsgs     r"Ú__call__z_InstanceOfValidator.__call__^se€ô˜% §¡Ô+ؐd—i‘i[ 
¨4¯9©9¨-°v¸e¸YÀkÐRW×RaÑRaÐQdÐdfÐgˆCÜØØØ—    ‘    Øó    ð ð,r#có"—d|j›dS)Nz <instance_of validator for type ú>©r3©r8s r"Ú__repr__z_InstanceOfValidator.__repr__kó€Ø1°$·)±)°¸aÐ@Ð@r#N©Ú__name__Ú
__module__Ú __qualname__r
r3r=rBr%r#r"r+r+Zó„á ‹8€Dò óAr#r+có—t|«S)aØ
    A validator that raises a `TypeError` if the initializer is called with a
    wrong type for this particular attribute (checks are performed using
    `isinstance` therefore it's also valid to pass a tuple of types).
 
    Args:
        type (type | tuple[type]): The type to check for.
 
    Raises:
        TypeError:
            With a human readable error message, the attribute (of type
            `attrs.Attribute`), the expected type, and the value it got.
    )r+r@s r"rroó€ô   Ó %Ð%r#)r'Úfrozenr(có4—eZdZe«Ze«Zd„Zd„Zy)Ú_MatchesReValidatorcóª—|j|«sBd|j›d|jj›d|›d}t|||j|«‚y)r-r.z' must match regex z (z     doesn't)N)Ú
match_funcr4ÚpatternÚ
ValueErrorr7s     r"r=z_MatchesReValidator.__call__…s]€ð‰˜uÔ%ؐd—i‘i[Р3°D·L±L×4HÑ4HÐ3KÈ2ÈeÈYÐV_Ð`ˆCÜØØØ— ‘ Øó    ð ð&r#có"—d|j›dS)Nz"<matches_re validator for pattern r?)rPrAs r"rBz_MatchesReValidator.__repr__’s€Ø3°D·L±LÐ3CÀ1ÐEÐEr#N)rErFrGr
rPrOr=rBr%r#r"rMrM€s„á‹h€GÙ“€Jò óFr#rMc
ó—tjdtjtjf}||vrDdj    dj t d„t|«D««««}t|«‚t|t«r|r d}t|«‚|}ntj||«}|tjur |j}n+|tjur |j}n |j}t||«S)aâ
    A validator that raises `ValueError` if the initializer is called with a
    string that doesn't match *regex*.
 
    Args:
        regex (str, re.Pattern):
            A regex string or precompiled pattern to match against
 
        flags (int):
            Flags that will be passed to the underlying re function (default 0)
 
        func (typing.Callable):
            Which underlying `re` function to call. Valid options are
            `re.fullmatch`, `re.search`, and `re.match`; the default `None`
            means `re.fullmatch`. For performance reasons, the pattern is
            always precompiled using `re.compile`.
 
    .. versionadded:: 19.2.0
    .. versionchanged:: 21.3.0 *regex* can be a pre-compiled pattern.
    Nz'func' must be one of {}.z, c3óDK—|]}|xr |jxsd–—Œy­w)ÚNoneN)rE)Ú.0Úes  r"ú    <genexpr>zmatches_re.<locals>.<genexpr>¯s!èø€ÒN¸˜Ò(˜aŸj™jÒ3¨VÓ3ÑNùs‚ zR'flags' can only be used with a string pattern; pass flags to re.compile() instead)ÚreÚ    fullmatchÚsearchÚmatchÚformatÚjoinÚsortedÚsetrQr2rr6ÚcompilerM)ÚregexÚflagsÚfuncÚ valid_funcsr<rPrOs       r"rr–sԀô*—<‘< ¤r§y¡y´"·(±(Ð;€KØ ;ÑØ)×0Ñ0Ø I‰IÜÑN¼SÀÓ=MÔNÓNó ó
ˆô
˜‹oÐä%œÔ!Ù ØfˆCܘC“.Ð  Ø‰ä—*‘*˜U EÓ*ˆà Œrx‰xÑØ—]‘]‰
Ø     ”—‘Ñ    Ø—^‘^‰
à×&Ñ&ˆ
ä ˜w¨
Ó 3Ð3r#có&—eZdZe«Zd„Zd„Zy)Ú_OptionalValidatorcó0—|€y|j|||«y©N©Ú    validator©r8r9r:r;s    r"r=z_OptionalValidator.__call__Ês€Ø ˆ=Ø à ‰t˜T 5Õ)r#có"—d|j›dS)Nz<optional validator for z     or None>rjrAs r"rBz_OptionalValidator.__repr__Ðs€Ø)¨$¯.©.Ð);¸9ÐEÐEr#N)rErFrGr
rkr=rBr%r#r"rgrgÆs„á“€Iò*ó Fr#rgcól—t|ttf«rtt    |««St|«S)a&
    A validator that makes an attribute optional.  An optional attribute is one
    which can be set to `None` in addition to satisfying the requirements of
    the sub-validator.
 
    Args:
        validator
            (typing.Callable | tuple[typing.Callable] | list[typing.Callable]):
            A validator (or validators) that is used for non-`None` values.
 
    .. versionadded:: 15.1.0
    .. versionchanged:: 17.1.0 *validator* can be a list of validators.
    .. versionchanged:: 23.1.0 *validator* can also be a tuple of validators.
    )r2ÚlistÚtuplergrrjs r"rrÔs-€ô)œd¤E˜]Ô+Ü!¤-°    Ó":Ó;Ð;ä ˜iÓ (Ð(r#có8—eZdZe«Zed¬«Zd„Zd„Zy)Ú _InValidatorF)Úhashc󸗠   ||jv}|s8d|j›d|j›d|›d}t    |||j|«‚y#t$rd}YŒHwxYw)NFr.z ' must be in r0ú))Úoptionsr6r4Ú_original_optionsrQ)r8r9r:r;Ú
in_optionsr<s      r"r=z_InValidator.__call__îsz€ð    Ø $§,¡,Ð.ˆJñؐd—i‘i[  ¨d×.DÑ.DÐ-GÀvÈeÈYÐVWÐXˆCÜØØØ×&Ñ&Øó    ð ðøôò    ØŠJð    ús‚A Á AÁAcó"—d|j›dS)Nz<in_ validator with options r?)rwrAs r"rBz_InValidator.__repr__ýs€Ø-¨d×.DÑ.DÐ-GÀqÐIÐIr#N)rErFrGr
rvrwr=rBr%r#r"rrrrés„á‹h€GÙ EÔ*Ðò óJr#rrcój—|}t|tttf«r t    |«}t ||«S)aÖ
    A validator that raises a `ValueError` if the initializer is called with a
    value that does not belong in the *options* provided.
 
    The check is performed using ``value in options``, so *options* has to
    support that operation.
 
    To keep the validator hashable, dicts, lists, and sets are transparently
    transformed into a `tuple`.
 
    Args:
        options: Allowed options.
 
    Raises:
        ValueError:
            With a human readable error message, the attribute (of type
            `attrs.Attribute`), the expected options, and the value it got.
 
    .. versionadded:: 17.1.0
    .. versionchanged:: 22.1.0
       The ValueError was incomplete until now and only contained the human
       readable error message. Now it contains all the information that has
       been promised since 17.1.0.
    .. versionchanged:: 24.1.0
       *options* that are a list, dict, or a set are now transformed into a
       tuple to keep the validator hashable.
    )r2roÚdictr`rprr)rvÚ repr_optionss  r"rrs0€ð8€Lܐ'œD¤$¬Ð,Ô-ܘ“.ˆä ˜ Ó .Ð.r#có—eZdZd„Zd„Zy)Ú_IsCallableValidatorcó„—t|«s5d}t|j|j||j¬«|¬«‚y)r-z?'{name}' must be callable (got {value!r} that is a {actual!r}).)r4r;Úactual)r<r;N)Úcallabler r]r4r5)r8r9r:r;Úmessages     r"r=z_IsCallableValidator.__call__&sN€ô˜Œð8ð ô#Ø—N‘NØŸ™¨%¸¿¹ð#óðô    ð ð r#có—y)Nz<is_callable validator>r%rAs r"rBz_IsCallableValidator.__repr__6s€Ø(r#N)rErFrGr=rBr%r#r"r~r~$s „òó )r#r~có—t«S)aˆ
    A validator that raises a `attrs.exceptions.NotCallableError` if the
    initializer is called with a value for this particular attribute that is
    not callable.
 
    .. versionadded:: 19.1.0
 
    Raises:
        attrs.exceptions.NotCallableError:
            With a human readable error message containing the attribute
            (`attrs.Attribute`) name, and the value it got.
    )r~r%r#r"rr:s €ô  Ó !Ð!r#có^—eZdZee«¬«Zedee««¬«Zd„Zd„Z    y)Ú _DeepIterablerjN)Údefaultrkcóv—|j|j|||«|D]}|j|||«Œy©r-N©Úiterable_validatorÚmember_validator)r8r9r:r;Úmembers     r"r=z_DeepIterable.__call__QsC€ð × "Ñ "Ð .Ø × #Ñ # D¨$°Ô 6àò    6ˆFØ × !Ñ ! $¨¨fÕ 5ñ    6r#cób—|j€dnd|j›}d|›d|j›dS)NÚú z<deep_iterable validator forz iterables of r?rŠ)r8Úiterable_identifiers  r"rBz_DeepIterable.__repr__[sP€ð×&Ñ&Ð.ñ àT×,Ñ,Ð/Ð0ð    ð +Ð+>Ð*?ؘT×2Ñ2Ð5°Qð 8ð    
r#)
rErFrGr
rrŒrr‹r=rBr%r#r"r†r†Js0„á© « Ô6ÐÙØ¡©«Ó 7ôÐò6ó    
r#r†có’—t|ttf«rt|Ž}t|ttf«rt|Ž}t    ||«S)aÍ
    A validator that performs deep validation of an iterable.
 
    Args:
        member_validator: Validator(s) to apply to iterable members.
 
        iterable_validator:
            Validator(s) to apply to iterable itself (optional).
 
    Raises
        TypeError: if any sub-validators fail
 
    .. versionadded:: 19.1.0
 
    .. versionchanged:: 25.4.0
       *member_validator* and *iterable_validator* can now be a list or tuple
       of validators.
    )r2rorpr    r†©rŒr‹s  r"rrgsI€ô&Ð"¤T¬5 MÔ2ÜÐ!1Ð2ÐÜÐ$¤t¬U mÔ4Ü!Ð#5Ð6ÐÜ Ð)Ð+=Ó >Ð>r#có—eZdZeee««¬«Zeee««¬«Zeee««¬«Zd„Z    d„Z
y)Ú _DeepMappingrjcóԗ|j|j|||«|D]D}|j|j|||«|j€Œ/|j||||«ŒFyr‰)Úmapping_validatorÚ key_validatorÚvalue_validator)r8r9r:r;Úkeys     r"r=z_DeepMapping.__call__‡sq€ð × !Ñ !Ð -Ø × "Ñ " 4¨¨uÔ 5àò    =ˆCØ×!Ñ!Ð-Ø×"Ñ" 4¨¨sÔ3Ø×#Ñ#Ñ/Ø×$Ñ$ T¨4°°s±Õ<ñ        =r#có<—d|j›d|j›dS)Nz,<deep_mapping validator for objects mapping z to r?)r˜r™rAs r"rBz_DeepMapping.__repr__”s(€Ø=¸d×>PÑ>PÐ=SÐSWÐX\×XlÑXlÐWoÐopÐqÐqr#N) rErFrGr
rrr˜r™r—r=rBr%r#r"r•r•sA„á¡X©k«mÓ%<Ô=€MÙ¡x± ³ Ó'>Ô?€OÙ©±+³-Ó)@ÔAÐò =órr#r•cóò—|€|€ d}t|«‚t|ttf«rt    |Ž}t|ttf«rt    |Ž}t|ttf«rt    |Ž}t |||«S)a®
    A validator that performs deep validation of a dictionary.
 
    All validators are optional, but at least one of *key_validator* or
    *value_validator* must be provided.
 
    Args:
        key_validator: Validator(s) to apply to dictionary keys.
 
        value_validator: Validator(s) to apply to dictionary values.
 
        mapping_validator:
            Validator(s) to apply to top-level mapping attribute.
 
    .. versionadded:: 19.1.0
 
    .. versionchanged:: 25.4.0
       *key_validator* and *value_validator* are now optional, but at least one
       of them must be provided.
 
    .. versionchanged:: 25.4.0
       *key_validator*, *value_validator*, and *mapping_validator* can now be a
       list or tuple of validators.
 
    Raises:
        TypeError: If any sub-validator fails on validation.
 
        ValueError:
            If neither *key_validator* nor *value_validator* is provided on
            instantiation.
    zAAt least one of key_validator or value_validator must be provided)rQr2rorpr    r•)r˜r™r—r<s    r"rr˜s€ðDРÐ!8à Oð     ô˜‹oÐä-¤$¬ Ô/ܘmÐ,ˆ ܐ/¤D¬% =Ô1Ü Ð0ˆÜÐ#¤d¬E ]Ô3Ü Ð"3Ð4Ðä ˜  Ð8IÓ JÐJr#cóB—eZdZe«Ze«Ze«Zd„Zd„Zy)Ú_NumberValidatorcóª—|j||j«s7d|j›d|j›d|j›d|›}t    |«‚y)r-r.r/rú: N)Ú compare_funcÚboundr4Ú
compare_oprQr7s     r"r=z_NumberValidator.__call__ÐsR€ð× Ñ  ¨¯
©
Ô3ؐd—i‘i[ 
¨4¯?©?Ð*;¸1¸T¿Z¹Z¸LÈÈ5È'ÐRˆCܘS“/Ð !ð4r#có<—d|j›d|j›dS)Nz<Validator for x rr?)r£r¢rAs r"rBz_NumberValidator.__repr__Øs €Ø" 4§?¡?Ð"3°1°T·Z±Z°LÀÐBÐBr#N)    rErFrGr
r¢r£r¡r=rBr%r#r"ržržÊs"„á ‹H€EÙ“€JÙ“8€Lò"óCr#ržcó8—t|dtj«S)a 
    A validator that raises `ValueError` if the initializer is called with a
    number larger or equal to *val*.
 
    The validator uses `operator.lt` to compare the values.
 
    Args:
        val: Exclusive upper bound for values.
 
    .. versionadded:: 21.3.0
    ú<)ržÚoperatorr©Úvals r"rrÜó€ô ˜C ¤h§k¡kÓ 2Ð2r#có8—t|dtj«S)a
    A validator that raises `ValueError` if the initializer is called with a
    number greater than *val*.
 
    The validator uses `operator.le` to compare the values.
 
    Args:
        val: Inclusive upper bound for values.
 
    .. versionadded:: 21.3.0
    z<=)ržr§rr¨s r"rrëó€ô ˜C ¤x§{¡{Ó 3Ð3r#có8—t|dtj«S)a
    A validator that raises `ValueError` if the initializer is called with a
    number smaller than *val*.
 
    The validator uses `operator.ge` to compare the values.
 
    Args:
        val: Inclusive lower bound for values
 
    .. versionadded:: 21.3.0
    z>=)ržr§rr¨s r"rrúr¬r#có8—t|dtj«S)a 
    A validator that raises `ValueError` if the initializer is called with a
    number smaller or equal to *val*.
 
    The validator uses `operator.gt` to compare the values.
 
    Args:
       val: Exclusive lower bound for values
 
    .. versionadded:: 21.3.0
    r?)ržr§rr¨s r"rr    rªr#có&—eZdZe«Zd„Zd„Zy)Ú_MaxLengthValidatorcóš—t|«|jkDr3d|j›d|j›dt|«›}t|«‚y)r-ú Length of 'z ' must be <= r N)ÚlenÚ
max_lengthr4rQr7s     r"r=z_MaxLengthValidator.__call__óH€ô ˆu‹:˜Ÿ™Ò 'Ø §    ¡    ˜{¨-¸¿¹Ð7HÈÌ3ÈuË:È,ÐWˆCܘS“/Ð !ð (r#có"—d|j›dS)Nz<max_len validator for r?)r´rAs r"rBz_MaxLengthValidator.__repr__$ó€Ø(¨¯©Ð(9¸Ð;Ð;r#N)rErFrGr
r´r=rBr%r#r"r°r°ó„á“€Jò"ó<r#r°có—t|«S)zï
    A validator that raises `ValueError` if the initializer is called
    with a string or iterable that is longer than *length*.
 
    Args:
        length (int): Maximum length of the string or iterable
 
    .. versionadded:: 21.3.0
    )r°©Úlengths r"rr(ó€ô ˜vÓ &Ð&r#có&—eZdZe«Zd„Zd„Zy)Ú_MinLengthValidatorcóš—t|«|jkr3d|j›d|j›dt|«›}t|«‚y)r-r²z ' must be >= r N)r³Ú
min_lengthr4rQr7s     r"r=z_MinLengthValidator.__call__9rµr#có"—d|j›dS)Nz<min_len validator for r?)rÀrAs r"rBz_MinLengthValidator.__repr__Ar·r#N)rErFrGr
rÀr=rBr%r#r"r¾r¾5r¸r#r¾có—t|«S)zð
    A validator that raises `ValueError` if the initializer is called
    with a string or iterable that is shorter than *length*.
 
    Args:
        length (int): Minimum length of the string or iterable
 
    .. versionadded:: 22.1.0
    )r¾rºs r"rrEr¼r#có&—eZdZe«Zd„Zd„Zy)Ú_SubclassOfValidatorcó —t||j«s8d|j›d|j›d|›d}t|||j|«‚y)r-r.z' must be a subclass of r0r1N)Ú
issubclassr3r4r6r7s     r"r=z_SubclassOfValidator.__call__VsX€ô˜% §¡Ô+ؐd—i‘i[Р8¸¿¹¸ ÀVÈEÈ9ÐTVÐWˆCÜØØØ—    ‘    Øó    ð ð,r#có"—d|j›dS)Nz <subclass_of validator for type r?r@rAs r"rBz_SubclassOfValidator.__repr__crCr#NrDr%r#r"rÄrÄRrHr#rÄcó—t|«S)aà
    A validator that raises a `TypeError` if the initializer is called with a
    wrong type for this particular attribute (checks are performed using
    `issubclass` therefore it's also valid to pass a tuple of types).
 
    Args:
        type (type | tuple[type, ...]): The type(s) to check for.
 
    Raises:
        TypeError:
            With a human readable error message, the attribute (of type
            `attrs.Attribute`), the expected type, and the value it got.
    )rÄr@s r"Ú _subclass_ofrÉgrJr#có~—eZdZe«Zeed«¬«Zeeee    «e
e «¬«¬«Z d„Z d„Zy)Ú _NotValidatorzCnot_ validator child '{validator!r}' did not raise a captured error)Ú    converterr“rjcóø—    |j|||«t|jj|j|j¬«||j||j«‚#|j$rYywxYw)N©rkÚ    exc_types)rkrQr<r]rÏrls    r"r=z_NotValidator.__call__ˆsw€ð    Ø N‰N˜4  uÔ -ôØ—‘—‘Ø"Ÿn™nØ"Ÿn™nð óðØ—‘ØØ—‘ó    ð     øð~‰~ò    Ù ð    ús‚A'Á'A9Á8A9có<—d|j›d|j›dS)Nz<not_ validator wrapping z , capturing r?rÎrAs r"rBz_NotValidator.__repr__™s"€Ø*¨4¯>©>Ð*<¸LÈÏÉÐHZÐZ[Ð\Ð\r#N)rErFrGr
rkr r<rrÉÚ    ExceptionrrprÏr=rBr%r#r"rËrËxsO„á“€IÙ
Ù!ð -ó
ô €Cñ ÙÙ)¨)Ó4Ù*¨5Ó1ô
ô€Iòó"]r#rË)r<rÏcóX—    t|«}t|||«S#t$r|f}YŒwxYw)a:
    A validator that wraps and logically 'inverts' the validator passed to it.
    It will raise a `ValueError` if the provided validator *doesn't* raise a
    `ValueError` or `TypeError` (by default), and will suppress the exception
    if the provided validator *does*.
 
    Intended to be used with existing validators to compose logic without
    needing to create inverted variants, for example, ``not_(in_(...))``.
 
    Args:
        validator: A validator to be logically inverted.
 
        msg (str):
            Message to raise if validator fails. Formatted with keys
            ``exc_types`` and ``validator``.
 
        exc_types (tuple[type, ...]):
            Exception type(s) to capture. Other types raised by child
            validators will not be intercepted and pass through.
 
    Raises:
        ValueError:
            With a human readable error message, the attribute (of type
            `attrs.Attribute`), the validator that failed to raise an
            exception, the value it got, and the expected exception types.
 
    .. versionadded:: 22.2.0
    )rpr6rË)rkr<rÏs   r"rrs:€ð:!ܘ)Ó$ˆ    ô ˜ C¨Ó 3Ð3øô ò!ؐLŠ    ð!ús ‚ š )¨)có&—eZdZe«Zd„Zd„Zy)Ú _OrValidatorcó”—|jD]}    ||||«yd|j›d|›}t|«‚#t$rYŒ9wxYw)NzNone of z satisfied for value )Ú
validatorsrÑrQ)r8r9r:r;Úvr<s      r"r=z_OrValidator.__call__Åsc€Ø—‘ò    ˆAð ِ$˜˜eÔ$ñð     ð˜Ÿ™Ð+Ð+@ÀÀ    ÐJˆÜ˜‹oÐøô ò Ùð ús‘
;»    AÁAcó"—d|j›dS)Nz<or validator wrapping r?)rÖrAs r"rBz_OrValidator.__repr__Ñs€Ø(¨¯©Ð(;¸1Ð=Ð=r#N)rErFrGr
rÖr=rBr%r#r"rÔrÔÁs„á“€Jò
ó>r#rÔcó˜—g}|D]0}|jt|t«r |jn|g«Œ2tt    |««S)a
    A validator that composes multiple validators into one.
 
    When called on a value, it runs all wrapped validators until one of them is
    satisfied.
 
    Args:
        validators (~collections.abc.Iterable[typing.Callable]):
            Arbitrary number of validators.
 
    Raises:
        ValueError:
            If no validator is satisfied. Raised with a human-readable error
            message listing all the wrapped validators and the value that
            failed all of them.
 
    .. versionadded:: 24.1.0
    )Úextendr2rÔrÖrp)rÖÚvalsr×s   r"rrÕsH€ð& €DØ òJˆØ  ‰ ¤J¨q´,Ô$?A—L’LÀaÀSÕIðJô œ˜d› Ó $Ð$r#)rNri)NNN)5Ú__doc__r§rYÚ
contextlibrrÚ_configrrÚ_makerr    r
r Ú
convertersr Ú
exceptionsr Ú__all__rrrr+rrMrrgrrrrr~rr†rr•rržrrrrr°rr¾rrÄrÉrËrQr6rrÔrr%r#r"ú<module>rãs‡ðñóÛ    å%Ýç;ß5Ó5Ý'Ý(ò €ò.%ò$    $ðñ!óð!ñ"ˆE˜¨4Ô0÷AðAó1ðAò(&ñ"ˆE˜$ dÔ+÷FðFó,ðFó*-4ñ`ˆE˜¨4Ô0÷
Fð
Fó1ð
Fò)ñ*ˆE˜¨4Ô0÷JðJó1ðJò. /ñFˆE˜¨DÔ1÷)ð)ó2ð)ò* "ñ ˆE˜¨4Ô0÷
ð
ó1ð
ó8?ñ4ˆE˜¨4Ô0÷rðró1ðrð.AEó/KñdˆE˜$ dÔ+÷CðCó,ðCò" 3ò 4ò 4ò 3ñˆE˜$ dÔ+÷ <ð <ó,ð <ò
'ñˆE˜$ dÔ+÷ <ð <ó,ð <ò
'ñˆE˜¨4Ô0÷AðAó1ðAò(&ñ"ˆE˜¨4Ô0÷!]ð!]ó1ð!]ðH ¨J¸    Ð+Bô!4ñHˆE˜¨4Ô0÷>ð>ó1ð>ó&%r#