§
    ÷yIfï+  ã                  óŠ   — d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
mZ ddlmZ erddlmZ  G d	„ d
e
¦  «        Zdd„ZdS )z8Check for imports on private external modules and names.é    )Úannotations)ÚPath)ÚTYPE_CHECKING)Únodes)ÚBaseCheckerÚutils)ÚHIGH)ÚPyLinterc                  óú   — e Zd ZdZddiZd'd„Z ej        d¦  «        d(d„¦   «         Z ej        d¦  «        d)d„¦   «         Z	d*d„Z
ed+d„¦   «         Zd,d„Zd-d„Zd.d„Zd/d„Zed0d#„¦   «         Zed1d%„¦   «         Zd&S )2ÚPrivateImportCheckerúimport-private-nameÚC2701)zImported private %s (%s)r   zºUsed when a private module or object prefixed with _ is imported. PEP8 guidance on Naming Conventions states that public attributes with leading underscores should be considered private.Úlinterr
   ÚreturnÚNonec                óL   — t          j        | |¦  «         i | _        d| _        d S )NF)r   Ú__init__Úall_used_type_annotationsÚpopulated_annotations)Úselfr   s     úT/var/www/piapp/venv/lib/python3.11/site-packages/pylint/extensions/private_import.pyr   zPrivateImportChecker.__init__!   s-   € ÝÔ˜T 6Ñ*Ô*Ð*ð ;=ˆÔ&Ø%*ˆÔ"Ð"Ð"ó    Únodeúnodes.Importc                óJ  — t          j        |¦  «        rd S d„ |j        D ¦   «         }|                      |¦  «        }|                      ||¦  «        }|rNt          |¦  «        dk    rdnd}d                     |¦  «        }|                      d|||ft          ¬¦  «         d S d S )Nc                ó   — g | ]
}|d          ‘ŒS ©r   © )Ú.0Únames     r   ú
<listcomp>z5PrivateImportChecker.visit_import.<locals>.<listcomp>,   s   € Ð0Ð0Ð0˜T��a”Ð0Ð0Ð0r   é   ÚmodulesÚmoduleú, r   ©r   ÚargsÚ
confidence)	r   Úin_type_checking_blockÚnamesÚ_get_private_importsÚ_get_type_annotation_namesÚlenÚjoinÚadd_messager	   )r   r   r*   Úprivate_namesÚimported_identifierÚprivate_name_strings         r   Úvisit_importz!PrivateImportChecker.visit_import(   sÐ   € åÔ'¨Ñ-Ô-ð 	ØˆFØ0Ð0 T¤ZÐ0Ñ0Ô0ˆØ×1Ò1°%Ñ8Ô8ˆØ×7Ò7¸¸mÑLÔLˆØð 	Ý/2°=Ñ/AÔ/AÀAÒ/EÐ/E ) )È8ÐØ"&§)¢)¨MÑ":Ô":ÐØ×ÒØ%ØØ)Ð+>Ð?Ýð	 ñ ô ð ð ð ð	ð 	r   únodes.ImportFromc                óB  — t          j        |¦  «        rd S |                      ||j        ¦  «        rd S d„ |j        D ¦   «         }|                      ||¦  «        }|sd S |                      |j        g¦  «        }|                      ||¦  «        }|r(|                      d|d|d         ft          ¬¦  «         d S |                      |¦  «        }|rNt          |¦  «        dk    rdnd}d	 
                    |¦  «        }|                      d|||ft          ¬¦  «         d S d S )
Nc                ó   — g | ]
}|d          ‘ŒS r   r   )r   Úns     r   r!   z9PrivateImportChecker.visit_importfrom.<locals>.<listcomp>A   s   € Ð*Ð*Ð*˜!��1”Ð*Ð*Ð*r   r   r$   r   r&   r"   ÚobjectsÚobjectr%   )r   r)   Úsame_root_dirÚmodnamer*   r,   r+   r/   r	   r-   r.   )r   r   r*   r0   Úprivate_module_importsr1   r2   s          r   Úvisit_importfromz%PrivateImportChecker.visit_importfrom9   sy  € åÔ'¨Ñ-Ô-ð 	ØˆFà×Ò˜d D¤LÑ1Ô1ð 	ØˆFà*Ð*˜tœzÐ*Ñ*Ô*ˆð ×7Ò7¸¸eÑDÔDˆØð 	ØˆFð "&×!:Ò!:¸D¼L¸>Ñ!JÔ!JÐØ!%×!@Ò!@ØÐ(ñ"
ô "
Ðð "ð 	Ø×ÒØ%ØØÐ 6°qÔ 9Ð:Ýð	 ñ ô ð ð ˆFà×1Ò1°-Ñ@Ô@ˆàð 	Ý/2°=Ñ/AÔ/AÀAÒ/EÐ/E ) )È8ÐØ"&§)¢)¨MÑ":Ô":ÐØ×ÒØ%ØØ)Ð+>Ð?Ýð	 ñ ô ð ð ð ð	ð 	r   r*   ú	list[str]c                ó    ‡ — ˆ fd„|D ¦   «         S )zDReturns the private names from input names by a simple string check.c                ó>   •— g | ]}‰                      |¦  «        ¯|‘ŒS r   )Ú_name_is_private)r   r    r   s     €r   r!   z=PrivateImportChecker._get_private_imports.<locals>.<listcomp>e   s,   ø€ ÐFÐFÐF˜¨$×*?Ò*?ÀÑ*EÔ*EÐF�ÐFÐFÐFr   r   )r   r*   s   ` r   r+   z)PrivateImportChecker._get_private_importsc   s   ø€ àFÐFÐFÐF ÐFÑFÔFÐFr   r    ÚstrÚboolc                ó’   — t          | ¦  «        o8| d         dk    o,t          | ¦  «        dk    p| d         dk    p| dd…         dk    S )z Returns true if the name exists, starts with `_`, and if len(name) > 4
        it is not a dunder, i.e. it does not begin and end with two underscores.
        r   Ú_é   r"   éþÿÿÿNÚ__)rC   r-   )r    s    r   rA   z%PrivateImportChecker._name_is_privateg   sU   € õ �‰JŒJð HØ�Q”˜3’ðHå�T‘”˜a’ÐF 4¨¤7¨c¢>ÐF°T¸"¸#¸#´YÀ$Ò5Fð	
r   únodes.Import | nodes.ImportFromc                óš   ‡ — |r;‰ j         s4‰                      |                     ¦   «         ‰ j        ¦  «         d‰ _         ˆ fd„|D ¦   «         S )zmRemoves from names any names that are used as type annotations with no other
        illegal usages.
        Tc                óR   •— g | ]#}|‰j         vs|‰j         v ¯‰j         |         °!|‘Œ$S r   )r   )r   r7   r   s     €r   r!   zCPrivateImportChecker._get_type_annotation_names.<locals>.<listcomp>|   sQ   ø€ ð 
ð 
ð 
àØ˜Ô6Ð6Ð6à�TÔ3Ð3Ð3ØÔ6°qÔ9ð 4ð	 ð 4Ð3Ð3r   )r   Ú_populate_type_annotationsÚrootr   )r   r   r*   s   `  r   r,   z/PrivateImportChecker._get_type_annotation_namesr   sk   ø€ ð ð 	.˜Ô3ð 	.Ø×+Ò+¨D¯IªI©K¬K¸Ô9WÑXÔXÐXØ)-ˆDÔ&ð
ð 
ð 
ð 
àð
ñ 
ô 
ð 	
r   únodes.LocalsDictNodeNGr   údict[str, bool]c                óÖ  — |j         D �]_}d}g }|j         |         D �].}t          |t          j        ¦  «        r±t          |j        t          j        t          j        f¦  «        r†|j        }t          |t          j        ¦  «        r6|                     |¦  «         |                      |j        j	        |¦  «        }n/t          |t          j        ¦  «        r|                     |¦  «         t          |t          j
        ¦  «        r|                      ||¦  «         t          |t          j        ¦  «        r|                      ||¦  «         �Œ0|�|                      ||¦  «        ||<   �ŒadS )z©Adds to `all_used_type_annotations` all names ever used as a type annotation
        in the node's (nested) scopes and whether they are only used as annotation.
        N)ÚlocalsÚ
isinstancer   Ú
AssignNameÚparentÚ	AnnAssignÚAssignÚappendÚ%_populate_type_annotations_annotationÚ
annotationÚFunctionDefÚ#_populate_type_annotations_functionÚLocalsDictNodeNGrL   Ú_assignments_call_private_name)r   r   r   r    Úprivate_nameÚname_assignmentsÚ
usage_nodeÚassign_parents           r   rL   z/PrivateImportChecker._populate_type_annotations†   sŒ  € ð ”Kð 	ñ 	ˆDàˆLð  "ÐØ"œk¨$Ô/ð ñ �
Ý˜j­%Ô*:Ñ;Ô;ð 
?Å
ØÔ%­¬½¼Ð'FñAô Að 
?ð %/Ô$5�MÝ! -µ´ÑAÔAð ?Ø(×/Ò/°Ñ>Ô>Ð>Ø'+×'QÒ'QØ&Ô-Ô8Ð:Sñ(ô (˜˜õ $ Mµ5´<Ñ@Ô@ð ?Ø(×/Ò/°Ñ>Ô>Ð>å˜j­%Ô*;Ñ<Ô<ð Ø×<Ò<Ø"Ð$=ñô ð õ ˜j­%Ô*@ÑAÔAð Ø×3Ò3Ø"Ð$=ñô ð ùð Ð'ð ×7Ò7Ð8HÈ,ÑWÔWð *¨,Ñ7ùð;	ð 	r   únodes.FunctionDefc                ó¾   — |j         r1|j         j        r%|j         j        D ]}|                      ||¦  «         Œ|j        r|                      |j        |¦  «         dS dS )z˜Adds all names used as type annotation in the arguments and return type of
        the function node into the dict `all_used_type_annotations`.
        N)r'   r   rX   Úreturns)r   r   r   rY   s       r   r[   z8PrivateImportChecker._populate_type_annotations_function­   s‘   € ð Œ9ð 	˜œÔ.ð 	Ø"œiÔ3ð ð �
Ø×:Ò:ØÐ 9ñô ð ð ð Œ<ð 	Ø×6Ò6Ø”Ð7ñô ð ð ð ð	ð 	r   ú5nodes.Attribute | nodes.Subscript | nodes.Name | Noneú
str | Nonec                óx  — t          |t          j        ¦  «        r|j        |vrd||j        <   |j        S t          |t          j        ¦  «        r6|                      |j        |¦  «         |                      |j        |¦  «        S t          |t          j        ¦  «        r|                      |j	        |¦  «        S dS )z¯Handles the possibility of an annotation either being a Name, i.e. just type,
        or a Subscript e.g. `Optional[type]` or an Attribute, e.g. `pylint.lint.linter`.
        TN)
rR   r   ÚNamer    Ú	SubscriptrX   ÚsliceÚvalueÚ	AttributeÚexpr)r   r   r   s      r   rX   z:PrivateImportChecker._populate_type_annotations_annotation½   sÏ   € õ �d�EœJÑ'Ô'ð 	¨D¬IÐ=VÐ,VÐ,VØ37Ð% d¤iÑ0Ø”9ÐÝ�d�EœOÑ,Ô,ð 	à×6Ò6Ø”
Ð5ñô ð ð ×=Ò=Ø”
Ð5ñô ð õ �d�EœOÑ,Ô,ð 	ð ×=Ò=Ø”	Ð4ñô ð ð ˆtr   Úassignmentsú$list[nodes.AnnAssign | nodes.Assign]r^   c                ó¼  — t          d„ | D ¦   «         ¦  «        rdS | D �]<}d}t          |j        t          j        ¦  «        r|j        j        }nRt          |j        t          j        ¦  «        r|j        }n+t          |j        t          j        ¦  «        r|j        j        }|sŒ†t          |t          j        t          j        f¦  «        rht          |t          j        ¦  «        r|j        }t          |t          j        ¦  «        s|j	        }t          |t          j        t          j        f¦  «        °ht          |t          j        ¦  «        r|j        |k    r dS �Œ>dS )z@Returns True if no assignments involve accessing `private_name`.c              3  ó&   K  — | ]}|j          V — Œd S ©N)rk   )r   Ú
assignments     r   ú	<genexpr>zFPrivateImportChecker._assignments_call_private_name.<locals>.<genexpr>Þ   s(   è è € ÐBÐB¨
�:Ô#Ð#ÐBÐBÐBÐBÐBÐBr   FNT)
ÚallrR   rk   r   ÚCallÚfuncrl   rh   r    rm   )rn   r^   rs   Úcurrent_attributes       r   r]   z3PrivateImportChecker._assignments_call_private_nameÙ   s^  € õ
 ÐBÐB°kÐBÑBÔBÑBÔBð 	ð �5Ø%ð 	ñ 	ˆJØ $ÐÝ˜*Ô*­E¬JÑ7Ô7ð :Ø$.Ô$4Ô$9Ð!Ð!Ý˜JÔ,­e¬oÑ>Ô>ð :Ø$.Ô$4Ð!Ð!Ý˜JÔ,­e¬jÑ9Ô9ð :Ø$.Ô$4Ô$9Ð!Ø$ð ØÝÐ.µ´Å%Ä*Ð0MÑNÔNð ?ÝÐ/µ´Ñ<Ô<ð ?Ø(9Ô(>Ð%Ý!Ð"3µU´ZÑ@Ô@ð ?Ø(9Ô(>Ð%õ	 Ð.µ´Å%Ä*Ð0MÑNÔNð ?õ Ð,­e¬jÑ9Ô9ðà%Ô*¨lÒ:Ð:à�u�uùØˆtr   Úimport_mod_namec                ó¶   — |sdS | j         rdS |                     d¦  «        d         }|t          |                      ¦   «         j        ¦  «        j        j        v S )zGDoes the node's file's path contain the base name of `import_mod_name`?Tú.r   )ÚlevelÚsplitr   rM   ÚfilerT   Úparts)r   ry   Úbase_import_packages      r   r:   z"PrivateImportChecker.same_root_dirø   s]   € ð
 ð 	Ø�4ØŒ:ð 	Ø�4à-×3Ò3°CÑ8Ô8¸Ô;Ðà"¥d¨4¯9ª9©;¬;Ô+;Ñ&<Ô&<Ô&CÔ&IÐIÐIr   N©r   r
   r   r   )r   r   r   r   )r   r4   r   r   )r*   r>   r   r>   )r    rB   r   rC   )r   rI   r*   r>   r   r>   )r   rN   r   rO   r   r   )r   rb   r   rO   r   r   )r   re   r   rO   r   rf   )rn   ro   r^   rB   r   rC   )r   rI   ry   rB   r   rC   )Ú__name__Ú
__module__Ú__qualname__r    Úmsgsr   r   Úonly_required_for_messagesr3   r=   r+   ÚstaticmethodrA   r,   rL   r[   rX   r]   r:   r   r   r   r   r      sj  € € € € € Ø €Dàð 
ð€Dð+ð +ð +ð +ð &€UÔ%Ð&;Ñ<Ô<ðð ð ñ =Ô<ðð  &€UÔ%Ð&;Ñ<Ô<ð'ð 'ð 'ñ =Ô<ð'ðRGð Gð Gð Gð ð
ð 
ð 
ñ „\ð
ð
ð 
ð 
ð 
ð(%ð %ð %ð %ðNð ð ð ð ð ð ð ð8 ðð ð ñ „\ðð< ðJð Jð Jñ „\ðJð Jð Jr   r   r   r
   r   r   c                óJ   — |                       t          | ¦  «        ¦  «         d S rr   )Úregister_checkerr   )r   s    r   ÚregisterrŠ     s%   € Ø
×ÒÕ0°Ñ8Ô8Ñ9Ô9Ð9Ð9Ð9r   Nr�   )Ú__doc__Ú
__future__r   Úpathlibr   Útypingr   Úastroidr   Úpylint.checkersr   r   Úpylint.interfacesr	   Úpylint.lint.pylinterr
   r   rŠ   r   r   r   ú<module>r“      sò   ðð
 ?Ð >à "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ð Ð à .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø "Ð "Ð "Ð "Ð "Ð "àð .Ø-Ð-Ð-Ð-Ð-Ð-ðoJð oJð oJð oJð oJ˜;ñ oJô oJð oJðd:ð :ð :ð :ð :ð :r   