U
e5d¸ ã @ sZ d Z ddlmZ ddlmZmZmZmZ ddlm Z m
Z
mZ dd„ ZG dd „ 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Útokenc c sž | g}|rš| ¡ }|jtjkr(|jV q|jtjkrNd dd„ |jD ƒ¡V q|jtj krl|
|jd ¡ q|jtjkr�| |jddd… ¡ qt
dƒ‚qdS )zF
Walks over all the names imported in a dotted_as_names node.
Ú c S s g | ]
}|j ‘qS © )Úvalue)Ú.0Zchr r ú0/usr/lib64/python3.8/lib2to3/fixes/fix_import.pyÚ
s z$traverse_imports..r Néþÿÿÿzunknown node type)ÚpopÚtyper
ÚNAMEr
r Zdotted_namer ÚchildrenZdotted_as_nameÚappendZdotted_as_namesÚextendÚAssertionError)ÚnamesZpendingÚnoder r r Útraverse_imports s
r c s4 e Zd ZdZdZ‡ fdd„Zdd„ Zdd„ Z‡ ZS ) Ú FixImportTzj
import_from< 'from' imp=any 'import' ['('] any [')'] >
|
import_name< 'import' imp=any >
c s" t t| ƒ ||¡ d|jk| _d S )NZabsolute_import)Úsuperr Ú
start_treeZfuture_featuresÚskip)ÚselfZtreeÚname©Ú __class__r r r / s zFixImport.start_treec C s´ | j r
d S |d }|jtjkrVt|dƒs4|jd }q| |j¡r°d|j |_| ¡ nZd}d}t |ƒD ]}| |¡rzd}qfd}qf|r˜|r”|
|d¡ d S td|gƒ}|j|_|S d S )NÚimpr
r Ú.FTz#absolute and local imports together)
r r r Zimport_fromÚhasattrr Úprobably_a_local_importr
Zchangedr Zwarningr Úprefix)r r Zresultsr$ Z
have_localZ
have_absoluteZmod_nameÚnewr r r Ú transform3 s,
zFixImport.transformc C st | d¡rdS | dd¡d }t| jƒ}t||ƒ}ttt|ƒdƒƒsHdS dtddd d
fD ]}t|| ƒrX dS qXdS )Nr% Fé r z__init__.pyz.pyz.pycz.soz.slz.pydT)Ú
startswithÚsplitr Úfilenamer r r )r Zimp_nameÚ base_pathZextr r r r' U s
z!FixImport.probably_a_local_import) Ú__name__Ú
__module__Ú__qualname__Z
BM_compatibleZPATTERNr r* r' Ú
__classcell__r r r" r r &