bgIVBdZddlmZddlZddlmZddlmZmZddl m Z m Z m Z m Z ddlmZddlmZmZdd lmZmZmZdd lmZdd lmZdd lmZdd lmZmZej dkrddlm!Z!nddl"m!Z!edee!de j#fee!de j$ffZ%e&dZ'dZ(e&dZ)dZ*e'fdJdZ+dKdZ, dLdMd"Z-dNd#Z.dOd%Z/dPd*Z0dQd.Z1dRd2Z2 dSdTd7Z3 dSdUd9Z4e'fdVd;Z5dWd<Z6 dXdYd?Z7dZdBZ8d[dCZ9d[dDZ:d[dEZ;e&dFZ< dSd\dHZ=e>e j?e,e+e>e j$ee4d=Ie7e>e j@ee3d=Ie6dS)]a> Astroid hook for the dataclasses library. Support built-in dataclasses, pydantic.dataclasses, and marshmallow_dataclass-annotated dataclasses. References: - https://docs.python.org/3/library/dataclasses.html - https://pydantic-docs.helpmanual.io/usage/dataclasses/ - https://lovasoa.github.io/marshmallow_dataclass/ ) annotationsN)Iterator)TupleUnion)basescontexthelpersnodes)parse) PY39_PLUS PY310_PLUS)AstroidSyntaxErrorInferenceErrorUseInferenceDefault) inference_tip)AstroidManager)InferenceResult) UninferableUninferableBase))Literaldefaultdefault_factory) dataclassfield) dataclassesmarshmallow_dataclasszpydantic.dataclasses_HAS_DEFAULT_FACTORYnodenodes.ClassDefdecorator_namesfrozenset[str]returnboolct|tjr|jsdSt fd|jjDS)zDReturn True if a decorated node has a `dataclass` decorator applied.Fc38K|]}t|VdSN)_looks_like_dataclass_decorator).0decorator_attributer"s p/builddir/build/BUILD/cloudlinux-venv-1.0.7/venv/lib/python3.11/site-packages/astroid/brain/brain_dataclasses.py z.is_decorated_with_dataclass..8sB  ((;_MM) isinstancer ClassDef decoratorsany)r r"s `r,is_decorated_with_dataclassr31sd dEN + +4?u #'?#8  r.Nonec d|_t|D][}|jj}t j|j|j|}t |}|g|j |<\t|sdSd}trg|j jr[|j jD]N}t|tjsd}n/|jD]&}|jdkr|j}'Ot)|t+t|d|} t-|d}||_d\|_|_|g|jd<|} t4| jvrFt-t4d jd } | | _| jd g| jt4<dSdS#t:$rYdSwxYw) z6Rewrite a dataclass to be easily understood by pylint.Tlineno col_offsetparentNFkw_only)init__init__NNz = object()r) is_dataclass_get_dataclass_attributestargetnamer Unknownr7r8rvisit_transformsinstance_attrs_check_generate_dataclass_initr r1r/Callkeywordsargvalue bool_value_generate_dataclass_initlistr r9localsrootDEFAULT_FACTORYbodytargetsr) r assign_noderArhs_nodekw_only_decorated decoratorkeywordinit_str init_noderN new_assigns r,dataclass_transformrZ>sD066 / / !&=%"-    "##44X>>%-JD!! )$ / /Cdo+C. C CIi44 $)!$- C C;)++(/ (@(@(B(B% C(  &t$ 7 7 788H C(OOJ/  1;. ).#,+ Jyy{{ $+ - -/>>>??DQGJ $J ,6,>q,A+BDK ( ( ( . -      s"G GGFr;Iterator[nodes.AnnAssign]c#K|jD]}t|tjrt|jtjs.sX   v + ((** *r.)rMr1r r/rFr)r2rG)r foundr+s r,rErEsT[  u E#4((-uz::   *+> ? ? ('E }t~ r.Ytuple[dict[str, tuple[str | None, str | None]], dict[str, tuple[str | None, str | None]]]chi}i}t|D]}|js |jdd}n#t$rY+wxYw|j\}}|D] \}}|||< |D] \} }||| < ||fS)zrMKeyErrorargs_get_arguments_dataitems) r pos_only_store kw_only_storebase base_initpos_onlyr:posargdatakwargs r,!_find_arguments_from_base_classesrys @BN>@M$$((    +/;z+B1+EII    H &N>>@@'$NN,, * *LFD&*N6 " ""==?? ( (KE4#'M%  ( = ((sA AArq(dict[str, tuple[str | None, str | None]]rrtuple[str, str]cTd\}}|D];\}}||z }|dr|d|dzz }|dr|d|dzz }|dz }<|D];\}}||z }|dr|d|dzz }|dr|d|dzz }|dz }<||fS)zKParse positional and keyword arguments into strings for an __init__ method.)r}r:  = , )rp)rqrrrur:pos_argrwkw_args r,_parse_arguments_into_stringsrs Hg'--// G 7 ' tAw &H 7 ( Q 'HD%++-- 6 7 & td1g~ %G 7 ' utAw &G4 W r.rAstrnodes.NodeNG | Nonect|D]}|js ||jvr|j|D]}t |jt jrp|jjrdt |jjt j r@t|jjr't|jj}|r |dccSdS)z4Get the default value of a previously defined field.rN) rkrlr>rMr/r9r r]rIrF _looks_like_dataclass_field_call_get_field_default)r rArsassignrs r,_get_previous_field_defaultrs$$ * *    4;  +d+ * *v}eo>>* +*#6=#6 CC*99LMM * 11DEEG*&qz))))) 4r.assignslist[nodes.AnnAssign]rTc g}g}g}t|\}}|D]5}|jj|j|j} } } d} |j| D]?} t | tjs| j s%d| vr| } n@t | tj ot| d}|rKtd| jDr-|| d|| dt!| r)d}t | tjr| j} nd} d}n d}d| d | }d \}}| | }| r~|rgt)| }|rU|\}}|d kr|}n|d kr/t*}d| d |d | dt*d| }n| }n| rY t-t/| }n=#t2t4f$rYn*wxYwt7|| }|r|}| }||d|z }||d |z }|r_d| jD}|rL|djr||n|||r"| |vr||f|| <nW||nA| |vr||f|| <n5| |vr| g|z}|| n|||s||7t=||\}}d|vrdnd}||d|zz }| ds|dz }|s|r|dz }||d|z }|rd|nd}d|d|S)z8Return an init method for a dataclass given the targets.Nzbuiltins.propertyF) check_scopec3`K|])}|jdko|j V*dSrerfrgs r,r-z+_generate_dataclass_init..sS v%Hgm.F.F.H.H*Hr.Tr}zself.rr=rrz if z is z else r~c(g|]}|jdk |S)r:)rH)r*ks r, z,_generate_dataclass_init..Xs$GGGQAEY4F4Fq4F4F4Fr.rselfzself, rz*, z passz def __init__(z) -> None: )!ryr@rAr`rIrMr/r FunctionDefr1decoratornamesrFrr2rGpoprb Subscriptslice as_stringrrOrnextinfer_call_resultr StopIterationrrJappendrjoinendswith)r rrTparamskw_only_params assignmentsprev_pos_only_storeprev_kw_only_storerrAr`rI property_nodeadditional_assignis_fieldinit_varassignment_strann_str default_strresult default_type default_nodeprevious_default param_strr: prev_pos_only prev_kw_only params_stringassignments_strings r,rKrKsjF "NK.OPT.U.U++p/p/"(-"4f6G%j37 !%T!2   /1BCC $/ "&7&F&F&H&HHH 1 IeUZ00 5U u6 6 6   $~  $''d333"&&tT222  # # 5H*eo66 "'- " NNH4T44d44N)  ! **,,G  ; 0+E22 17.L,#y00&2&<&<&>&> %):::&5 JDJJ\-C-C-E-EJJ"&JJ,;JJCGJJ' $oo//  ; !$}'F'F'H'H"I"I"S"S"U"UVV "M2     ;4FF  ;.88::    g 'I  " ,{,, ,I  GG%.GGGG 1:#..00-")))4444MM),,,  )))),3[+A"4((%%i0000***-4k,B#D))+++&"&&t,,,, i((( /   ~ . . ."?/##M<!M11BBxM]TYYv%6%666M  ! !$ ' ' ~  Adii&?&?AAAM7BN{333 N= N N:L N NNsAH  H43H4 nodes.Unknownctxcontext.InferenceContext | NoneIterator[InferenceResult]c#K|j}t|tjs tVdS|j|j}}|||Ed{V|t||Ed{VdStVdS)zInference tip for an Unknown node that was dynamically generated to represent a dataclass attribute. In the case that a default value is provided, that is inferred first. Then, an Instance of the annotated class is yielded. Nr)r) r9r/r r]rr`rIinfer_infer_instance_from_annotation)r rrr`rIs r,infer_dataclass_attributers[F feo . .)6<J ;;s;+++++++++2:3GGGGGGGGGGGGr. nodes.Callc#Kt|jtjtjfst t |}|s tVdS|\}}|dkr||Ed{VdSt| j dj }|j|_||Ed{VdS)z(Inference tip for dataclass field calls.rrNr) r/r9r r]Assignrrrrr rrPrI)r rrrrnew_calls r,infer_dataclass_field_callrs dkEOU\#B C C"!!  % %F  3 & g 9 $ $}}S}11 1 1 1 1 1 1 1 1 1W..00116q9?H"kHO~~c~22 2 2 2 2 2 2 2 2 2r. nodes.NodeNGct|tjr|j} t |}n#t tf$r t}YnwxYwt|trHt|tj r |j |vSt|tj r |j |vSdSt|tjo(|j |vo|j t vS)zReturn True if node looks like a dataclass decorator. Uses inference to lookup the value of the node, and if that fails, matches against specific names. F)r/r rFfuncrrrrrrNamerA AttributeattrnamerrNDATACLASS_MODULES)r r"inferreds r,r)r)s$ ##y %% M *(O,, dEJ ' ' 09/ / dEO , , 4=O3 3u 8U.// 6 M_ , 6 MMOO $5 5s!AA A c|j}|sdS|}t|tjo(t|tjot |S)z^Return True if node was dynamically generated as the child of an AnnAssign statement. F)r9scoper/r r]r0r3)r r9rs r,_looks_like_dataclass_attributers][F u LLNNE65?++ / uen - - / ' . .r.Trc |rv|d}|}t|tjr0|j)t|tjrt|sdS t|j }n#ttf$rYdSwxYwt|tj sdS|jtko|jt"vS)zReturn True if node is calling dataclasses field or Field from an AnnAssign statement directly in the body of a ClassDef. If check_scope is False, skips checking the statement and body. T)futureNF) statementrr/r r]rIr0r3rrrrrrrA FIELD_NAMErNr)r rstmtrrs r,rrs ~~T~**  tU_ - -  &5%.11'+E22'5 ))** M *uu h 1 2 2u =J & T8==??+?CT+TTs:&B!!B65B6 field_call_FieldDefaultReturncd\}}|jD]'}|jdkr|j}|jdkr|j}(||d|fS|B|@tj|j|j|j}||d|fSdS)ahReturn a the default value of a field call, and the corresponding keyword argument name. field(default=...) results in the ... node field(default_factory=...) results in a Call node with func ... and no arguments If neither or both arguments are present, return ("", None) instead, indicating that there is not a valid default value. r=rrNr6)r) rGrHrIr rFr7r8r9postinit)rrrrVrs r,rrs *G_&,, ;) # #mGG [- - -%mO6'!!?6:$!,$    /// (** 4r.ctrP t|}n#ttf$rYdSwxYwt |dddkSt |tjo]t |j tj r|j j dkp.t |j tj o|j j dkS)z@Return True if node is a ClassVar, with or without subscripting.FrAr}ClassVar)r rrrrgetattrr/r rrIrrArrr rs r,r_r_s; DJJLL))HH .   55 x,, :: dEO , , 4:uz** * JOz ) . dj%/ 2 2 . J : - s!+AActsdStj|}t|tjo|dkS)z,Return True if node is the KW_ONLY sentinel.Fzdataclasses._KW_ONLY_TYPE)r r safe_inferr/rInstanceqnamers r,rara2sK u!$''H8U^,, < NN   ; ;r.c t|}n#ttf$rYdSwxYwt |dddkS)z@Return True if node is an InitVar, with or without subscripting.FrAr}InitVar)rrrrrrs r,rbrb=s^ %% M *uu 8VR ( (I 55s !$99)Dict FrozenSetListSetr*Iterator[UninferableBase | bases.Instance]c#Kd} t||}n #ttf$r tVYnwxYwt |t js tVdS|j dvr1|j tvr| VdStVdS| VdS)zInfer an instance corresponding to the type annotation represented by node. Currently has limited support for the typing module. Nr>r}typing_collections_abc) rrrrrr/r r0rNrA_INFERABLE_TYPING_TYPESinstantiate_class)r rklasss r,rrSs ETZZZ,,-- M * eU^ , , (     :0 0 0))++ + + + + +     %%'''''''s#*AA)raise_on_overwrite)r r!r"r#r$r%)r r!r$r4)F)r r!r;r%r$r[)r r!r$r%)r r!r$ri)rqrzrrrzr$r{)r r!rArr$r)r r!rrrTr%r$rr()r rrrr$r)r rrrr$r)r rr"r#r$r%)r rr$r%)T)r rrr%r$r%)rrr$r)r rr$r%)r rrrr$r)A__doc__ __future__rsyscollections.abcrrrrastroidrrr r astroid.builderr astroid.constr r astroid.exceptionsrrrastroid.inference_tiprastroid.managerrastroid.typingr astroid.utilrr version_infortyping_extensionsNodeNGrFr frozensetDATACLASSES_DECORATORSrrrOr3rZr?rEryrrrKrrr)rrrr_rarbrrregister_transformr0rBr.r,rsH #""""" $$$$$$222222222222!!!!!!////////VVVVVVVVVV//////************55555555v)))))) ') el *+ '# $ej 013 #>22  ID)=S     /C/C/C/Cf(-6< ) ) ) )F0&NONONONOdAE0>B33333(;Q<    "+/UUUUU<@(6666$)@D(((((6## N')D## JM,FFF$ ## MM+EEE#r.