a DOg @sdZddlmZmZddlmZmZmZmZm Z m Z m Z dgdfdgdfdd gfgdgd fdd d gfgd Z e d e ddddZGdddeZdS)zFix 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)NameComma FromImportNewlinefind_indentationNodesymszurllib.request) Z URLopenerZFancyURLopenerZ urlretrieveZ _urlopenerurlopenZ urlcleanupZ pathname2urlZ url2pathnameZ getproxiesz urllib.parse)ZquoteZ quote_plusZunquoteZ unquote_plusZ urlencodeZ splitattrZ splithostZ splitnportZ splitpasswdZ splitportZ splitqueryZsplittagZ splittypeZ splituserZ splitvaluez urllib.errorZContentTooShortError)r Zinstall_openerZ build_openerZRequestZOpenerDirectorZ BaseHandlerZHTTPDefaultErrorHandlerZHTTPRedirectHandlerZHTTPCookieProcessorZ ProxyHandlerZHTTPPasswordMgrZHTTPPasswordMgrWithDefaultRealmZAbstractBasicAuthHandlerZHTTPBasicAuthHandlerZProxyBasicAuthHandlerZAbstractDigestAuthHandlerZHTTPDigestAuthHandlerZProxyDigestAuthHandlerZ HTTPHandlerZ HTTPSHandlerZ FileHandlerZ FTPHandlerZCacheFTPHandlerZUnknownHandlerZURLErrorZ HTTPError)urlliburllib2r r ccsvt}tD]b\}}|D]T}|\}}t|}d||fVd|||fVd|Vd|Vd||fVqqdS)Nzimport_name< 'import' (module=%r | dotted_as_names< any* module=%r any* >) > zimport_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* > )setMAPPINGitemsr)ZbareZ old_moduleZchangeschangeZ new_modulemembersr=/opt/alt/python39/lib64/python3.9/lib2to3/fixes/fix_urllib.py build_pattern0s(rc@s4eZdZddZddZddZddZd d Zd S) FixUrllibcCs dtS)N|)joinr)selfrrrrIszFixUrllib.build_patterncCsv|d}|j}g}t|jddD] }|t|d|dtgq&|tt|jdd|d||dS)zTransform for the basic import case. Replaces the old import name with a comma separated list of its replacements. moduleNrprefix) getrrvalueextendrrappendreplace)rnoderesultsZ import_modprefnamesnamerrrtransform_importLs  zFixUrllib.transform_importcCs&|d}|j}|d}|rt|tr0|d}d}t|jD]}|j|dvr>|d}q^q>|rv|t||dn ||dng}i} |d} | D]}|j t j kr|j d j} |j dj} n |j} d} | d krt|jD]B}| |dvr|d| vr | |d| |dg |qqg} t|}d }d d }|D]}| |}g}|ddD]"}||||| tq^|||d|t||}|r|jj|r||_| |d}qB| rg}| ddD]}||tgq| | d||n ||ddS)zTransform for imports of specific module elements. Replaces the module to be imported from with the appropriate new module. mod_membermemberrNrr!This is an invalid module elementr,TcSsX|jtjkrHt|jdj|d|jd|jdg}ttj|gSt|j|dgS)Nrrrr-)typer import_as_namerchildrenr Zcloner )r(rZkidsrrr handle_names   z/FixUrllib.transform_member..handle_namerFzAll module elements are invalid)rr isinstancelistrr r#rcannot_convertr/r r0r1r" setdefaultrr!rrparentendswithr)rr$r%r*r&r+new_namermodulesZmod_dictrZas_name member_nameZ new_nodesZ indentationfirstr2reltsr'eltnewZnodesZnew_noderrrtransform_member\sh         zFixUrllib.transform_membercCs~|d}|d}d}t|tr*|d}t|jD]}|j|dvr4|d}qTq4|rn|t||jdn ||ddS)z.Transform for calls to module members in code.bare_with_attrr+Nrrrr,) rr3r4rr r#rrr5)rr$r%Z module_dotr+r9rrrr transform_dots    zFixUrllib.transform_dotcCsz|dr|||n^|dr0|||nF|drH|||n.|dr`||dn|drv||ddS)Nrr*rAZ module_starzCannot handle star imports.Z module_asz#This module is now multiple modules)rr)r@rBr5)rr$r%rrr transforms     zFixUrllib.transformN)__name__ __module__ __qualname__rr)r@rBrCrrrrrGs LrN)__doc__Zlib2to3.fixes.fix_importsrrZlib2to3.fixer_utilrrrrrr r rr"rrrrrrs.$ !