o
    Š�bc¯   ã                   @   s¤   d Z ddlmZmZ ddlmZmZmZmZm	Z	m
Z
mZ dg d¢fdg d¢fdd	gfgdg d
¢fdddgfgdœZed  ed d ¡ dd„ ZG dd„ deƒZdS )z¾Fix changes imports of urllib which are now incompatible.
   This is rather similar to fix_imports, but because of the more
   complex nature of the fixing for urllib, it has its own fixer.
é    )Ú
alternatesÚ
FixImports)ÚNameÚCommaÚ
FromImportÚNewlineÚfind_indentationÚNodeÚsymszurllib.request)	Ú	URLopenerÚFancyURLopenerÚurlretrieveÚ
_urlopenerÚurlopenÚ
urlcleanupÚpathname2urlÚurl2pathnameÚ
getproxieszurllib.parse)ÚquoteÚ
quote_plusÚunquoteÚunquote_plusÚ	urlencodeÚ	splitattrÚ	splithostÚ
splitnportÚsplitpasswdÚ	splitportÚ
splitqueryÚsplittagÚ	splittypeÚ	splituserÚ
splitvaluezurllib.errorÚContentTooShortError)r   Úinstall_openerÚbuild_openerÚRequestÚOpenerDirectorÚBaseHandlerÚHTTPDefaultErrorHandlerÚHTTPRedirectHandlerÚHTTPCookieProcessorÚProxyHandlerÚHTTPPasswordMgrÚHTTPPasswordMgrWithDefaultRealmÚAbstractBasicAuthHandlerÚHTTPBasicAuthHandlerÚProxyBasicAuthHandlerÚAbstractDigestAuthHandlerÚHTTPDigestAuthHandlerÚProxyDigestAuthHandlerÚHTTPHandlerÚHTTPSHandlerÚFileHandlerÚ
FTPHandlerÚCacheFTPHandlerÚUnknownHandlerÚURLErrorÚ	HTTPError)ÚurllibÚurllib2r>   r=   é   c                  c   sx   � t ƒ } t ¡ D ]1\}}|D ]*}|\}}t|ƒ}d||f V  d|||f V  d| V  d| V  d||f V  qqd S )Nz�import_name< 'import' (module=%r
                                  | dotted_as_names< any* module=%r any* >) >
                  zÆimport_from< 'from' mod_member=%r 'import'
                       ( member=%s | import_as_name< member=%s 'as' any > |
                         import_as_names< members=any*  >) >
                  zIimport_from< 'from' module_star=%r 'import' star='*' >
                  ztimport_name< 'import'
                                  dotted_as_name< module_as=%r 'as' any > >
                  zKpower< bare_with_attr=%r trailer< '.' member=%s > any* >
                  )ÚsetÚMAPPINGÚitemsr   )ÚbareÚ
old_moduleÚchangesÚchangeÚ
new_moduleÚmembers© rI   ú//usr/lib/python3.10/lib2to3/fixes/fix_urllib.pyÚbuild_pattern0   s.   €þýÿþÿðÿrK   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú	FixUrllibc                 C   s   d  tƒ ¡S )Nú|)ÚjoinrK   )ÚselfrI   rI   rJ   rK   I   s   zFixUrllib.build_patternc                 C   sv   |  d¡}|j}g }t|j dd… D ]}| t|d |d�tƒ g¡ q| tt|j d d |d�¡ | |¡ dS )z‘Transform for the basic import case. Replaces the old
           import name with a comma separated list of its
           replacements.
        ÚmoduleNéÿÿÿÿr   ©Úprefix)	ÚgetrS   rA   ÚvalueÚextendr   r   ÚappendÚreplace)rO   ÚnodeÚresultsÚ
import_modÚprefÚnamesÚnamerI   rI   rJ   Útransform_importL   s   
 zFixUrllib.transform_importc                 C   s  |  d¡}|j}|  d¡}|rDt|tƒr|d }d}t|j D ]}|j|d v r.|d } nq|r<| t||d�¡ dS |  |d¡ dS g }i }	|d }
|
D ]D}|j	t
jkrc|jd	 j}|jd j}n|j}d}|d
kr’t|j D ] }||d v r‘|d |	vr†| |d ¡ |	 |d g ¡ |¡ qqqNg }t|ƒ}d}dd„ }|D ]A}|	| }g }|dd… D ]}| |||ƒ¡ | tƒ ¡ q¯| ||d |ƒ¡ t||ƒ}|rØ|jj |¡rÛ||_| |¡ d}q¡|�rg }|dd… D ]
}| |tƒ g¡ qî| |d ¡ | |¡ dS |  |d¡ dS )zšTransform for imports of specific module elements. Replaces
           the module to be imported from with the appropriate new
           module.
        Ú
mod_memberÚmemberr   Nr?   rR   ú!This is an invalid module elementrH   é   ú,Tc                 S   sX   | j tjkr$t| jd j|d�| jd  ¡ | jd  ¡ g}ttj|ƒgS t| j|d�gS )Nr   rR   r?   rc   )Útyper
   Úimport_as_namer   ÚchildrenrU   Úcloner	   )r^   rS   ÚkidsrI   rI   rJ   Úhandle_nameŒ   s   þz/FixUrllib.transform_member.<locals>.handle_namerQ   FzAll module elements are invalid)rT   rS   Ú
isinstanceÚlistrA   rU   rX   r   Úcannot_convertre   r
   rf   rg   rW   Ú
setdefaultr   rV   r   r   ÚparentÚendswithr   )rO   rY   rZ   r`   r\   ra   Únew_namerF   ÚmodulesÚmod_dictrH   Úas_nameÚmember_nameÚ	new_nodesÚindentationÚfirstrj   rP   Úeltsr]   ÚeltÚnewÚnodesÚnew_noderI   rI   rJ   Útransform_member\   sl   


þ€

zFixUrllib.transform_memberc                 C   s€   |  d¡}|  d¡}d}t|tƒr|d }t|j D ]}|j|d v r)|d } nq|r8| t||jd�¡ dS |  |d¡ dS )z.Transform for calls to module members in code.Úbare_with_attrra   Nr   r?   rR   rb   )	rT   rk   rl   rA   rU   rX   r   rS   rm   )rO   rY   rZ   Ú
module_dotra   rq   rF   rI   rI   rJ   Útransform_dot¨   s   


þÿzFixUrllib.transform_dotc                 C   s†   |  d¡r|  ||¡ d S |  d¡r|  ||¡ d S |  d¡r'|  ||¡ d S |  d¡r4|  |d¡ d S |  d¡rA|  |d¡ d S d S )NrP   r`   r   Úmodule_starzCannot handle star imports.Ú	module_asz#This module is now multiple modules)rT   r_   r~   r�   rm   )rO   rY   rZ   rI   rI   rJ   Ú	transform¹   s   




ÿzFixUrllib.transformN)Ú__name__Ú
__module__Ú__qualname__rK   r_   r~   r�   r„   rI   rI   rI   rJ   rL   G   s    LrL   N)Ú__doc__Úlib2to3.fixes.fix_importsr   r   Úlib2to3.fixer_utilr   r   r   r   r   r	   r
   rA   rW   rK   rL   rI   rI   rI   rJ   Ú<module>   s0    $ÿÿÿöÿÿñô!