kfdZddlmZddlmZddlmZddlmZ ddl m Z m Z m Z mZmZddlmZ dd d d d d d d d d d d d d d d d d d d d d d ZeZeed d Ze d d d d d d d d d d d d d ddZd d d ddZd d ddZd S)z] These are keyword-only APIs that call `attr.s` and `attr.ib` with different default values. )partial)setters)asdict)astuple)NOTHING_frozen_setattrs_ng_default_on_setattrattribattrs)UnannotatedAttributeErrorNTF)theserepr unsafe_hashhashinitslotsfrozen weakref_slotstr auto_attribskw_only cache_hashauto_exceqorder auto_detectgetstate_setstate on_setattrfield_transformer match_argsc    fd fd}||S||S)a Define an *attrs* class. Differences to the classic `attr.s` that it uses underneath: - Automatically detect whether or not *auto_attribs* should be `True` (c.f. *auto_attribs* parameter). - If *frozen* is `False`, run converters and validators when setting an attribute by default. - *slots=True* .. caution:: Usually this has only upsides and few visible effects in everyday programming. But it *can* lead to some suprising behaviors, so please make sure to read :term:`slotted classes`. - *auto_exc=True* - *auto_detect=True* - *order=False* - Some options that were only relevant on Python 2 or were kept around for backwards-compatibility have been removed. Please note that these are all defaults and you can change them as you wish. :param Optional[bool] auto_attribs: If set to `True` or `False`, it behaves exactly like `attr.s`. If left `None`, `attr.s` will try to guess: 1. If any attributes are annotated and no unannotated `attrs.fields`\ s are found, it assumes *auto_attribs=True*. 2. Otherwise it assumes *auto_attribs=False* and tries to collect `attrs.fields`\ s. For now, please refer to `attr.s` for the rest of the parameters. .. versionadded:: 20.1.0 .. versionchanged:: 21.3.0 Converters are also run ``on_setattr``. .. versionadded:: 22.2.0 *unsafe_hash* as an alias for *hash* (for :pep:`681` compliance). ctdid|ddd dd ddd d d |d d dddddddd dd S)N maybe_clsrrrrrrrrrrrrrrrrcollect_by_mroTrrr r!)r )clsrrrrrr rrrrrr!rrrrrrrrs n/builddir/build/BUILD/imunify360-venv-2.3.5/opt/imunify360/venv/lib/python3.11/site-packages/attr/_next_gen.pydo_itzdefine..do_itYs    c %    $    % 6 &  & G "z X r %! "$ # $ 4% &0/' ("z) *0/+ ,"z-  cdtjfv}dur t|jD]/}|jt ur|rt dtjn0 |S |dS#t$r|dcYSwxYw)z Making this a wrapper ensures this code runs during class creation. We also ensure that frozen-ness of classes is inherited. NFz@Frozen classes can't use on_setattr (frozen-ness was inherited).T)rNO_OPr __bases__ __setattr__r ValueErrorr )r'had_on_setattrbase_clsrr)rrs r(wrapzdefine..wrapss$D'-+@@ U??z1/J  H#'777!$7 %] 8  #5l++ + %5d## #( % % %5e$$ $ $ $ %s% A11B  B r&)r$rrrrrrrrrrrrrrrrrrr r!r2r)s ```````````````````` @r(definer3sB                       4!%!%!%!%!%!%!%!%J tIr*)rrdefault validatorrrrmetadatatype converterfactoryrrrraliasc<t|||||||||| | | | | S)a, Identical to `attr.ib`, except keyword-only and with some arguments removed. .. versionadded:: 23.1.0 The *type* parameter has been re-added; mostly for {func}`attrs.make_class`. Please note that type checkers ignore this metadata. .. versionadded:: 20.1.0 r4)r r4s r(fieldr=sE6         r*)recursefiltervalue_serializerc*t||||dS)z Same as `attr.asdict`, except that collections types are always retained and dict is always used as *dict_factory*. .. versionadded:: 21.3.0 T)instr>r?r@retain_collection_types)_asdict)rBr>r?r@s r(rrs*  ) $    r*)r>r?c(t|||dS)z Same as `attr.astuple`, except that collections types are always retained and `tuple` is always used as the *tuple_factory*. .. versionadded:: 21.3.0 T)rBr>r?rC)_astuple)rBr>r?s r(rrs$  764   r*)N)__doc__ functoolsrr_funcsrrDrrF_makerr r r r exceptionsr r3mutablerr=r&r*r(rNs %%%%%%''''''211111C        -CCCCCL   6 6 6       *****Z!      "$       r*