î i f¸ ã@s}dZddlmZddlmZmZmZmZddlm Z m Z m Z dd„Z Gdd „d ej ƒZd S) zÞFixer for import statements. If spam is being imported from the local directory, this import: from spam import eggs Becomes: from .spam import eggs And this import: import spam Becomes: from . import spam é)Ú fixer_baseé)ÚdirnameÚjoinÚexistsÚsep)Ú FromImportÚsymsÚtokenccsÝ|g}xÍ|rØ|jƒ}|jtjkr;|jVq |jtjkrndjdd„|jDƒƒVq |jtj kr—|j |jdƒq |jtj krÉ|j |jddd…ƒq t dƒ‚q WdS) zF Walks over all the names imported in a dotted_as_names node. ÚcSsg|]}|j‘qS©)Úvalue)Ú.0Zchr r ú=/opt/alt/python34/lib64/python3.4/lib2to3/fixes/fix_import.pyú s z$traverse_imports..rNrzunknown node typeéþÿÿÿ)ÚpopÚtyper ÚNAMEr r Z dotted_namerÚchildrenZdotted_as_nameÚappendZdotted_as_namesÚextendÚAssertionError)ÚnamesÚpendingÚnoder r rÚtraverse_importss    ! rcsFeZdZdZdZ‡fdd†Zdd„Zdd„Z‡S) Ú FixImportTzj import_from< 'from' imp=any 'import' ['('] any [')'] > | import_name< 'import' imp=any > cs/tt|ƒj||ƒd|jk|_dS)NZabsolute_import)ÚsuperrÚ start_treeZfuture_featuresÚskip)ÚselfZtreeÚname)Ú __class__r rr/szFixImport.start_treecCs|jr dS|d}|jtjkr~x t|dƒsK|jd}q,W|j|jƒrd|j|_|jƒqn†d}d}x2t |ƒD]$}|j|ƒrµd}q—d}q—W|râ|rÞ|j |dƒndSt d|gƒ}|j |_ |SdS)NÚimpr rÚ.FTz#absolute and local imports together) r rr Z import_fromÚhasattrrÚprobably_a_local_importr ZchangedrZwarningrÚprefix)r!rZresultsr$Z have_localZ have_absoluteZmod_nameÚnewr r rÚ transform3s,     zFixImport.transformcCs¡|jdƒrdS|jddƒd}t|jƒ}t||ƒ}ttt|ƒdƒƒsfdSx4dtddd d gD]}t||ƒrd SqWdS) Nr%Férz __init__.pyz.pyz.pycz.soz.slz.pydT)Ú startswithÚsplitrÚfilenamerrr)r!Zimp_nameÚ base_pathZextr r rr'Usz!FixImport.probably_a_local_import)Ú__name__Ú __module__Ú __qualname__Z BM_compatibleZPATTERNrr*r'r r )r#rr&s  "rN)Ú__doc__r rZos.pathrrrrZ fixer_utilrr r rZBaseFixrr r r rÚ s "