U
    A`                     @   sZ   d Z ddlmZ ddlmZmZmZmZ ddlm	Z	m
Z
mZ dd ZG dd	 d	ejZd
S )zFixer 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|  }|jtjkr(|jV  q|jtjkrNddd |jD V  q|jtj	krl|
|jd  q|jtjkr||jddd  qtdqdS )zF
    Walks over all the names imported in a dotted_as_names node.
     c                 S   s   g | ]
}|j qS  )value).0Zchr   r   ./usr/lib/python3.8/lib2to3/fixes/fix_import.py
<listcomp>   s     z$traverse_imports.<locals>.<listcomp>r   Nzunknown node type)poptyper
   NAMEr   r	   Zdotted_namer   childrenZdotted_as_nameappendZdotted_as_namesextendAssertionError)namesZpendingnoder   r   r   traverse_imports   s    
r   c                       s4   e Zd ZdZdZ fddZdd Zdd Z  ZS )		FixImportTzj
    import_from< 'from' imp=any 'import' ['('] any [')'] >
    |
    import_name< 'import' imp=any >
    c                    s"   t t| || d|jk| _d S )NZabsolute_import)superr   
start_treeZfuture_featuresskip)selfZtreename	__class__r   r   r   /   s    zFixImport.start_treec                 C   s   | j r
d S |d }|jtjkrVt|ds4|jd }q| |jrd|j |_|  nZd}d}t	|D ]}| |rzd}qfd}qf|r|r| 
|d d S td|g}|j|_|S d S )Nimpr   r   .FTz#absolute and local imports together)r   r   r	   Zimport_fromhasattrr   probably_a_local_importr   Zchangedr   Zwarningr   prefix)r    r   Zresultsr$   Z
have_localZhave_absoluteZmod_namenewr   r   r   	transform3   s,    


zFixImport.transformc                 C   st   | drdS |ddd }t| j}t||}ttt|dsHdS dtddd	d
fD ]}t|| rX dS qXdS )Nr%   F   r   z__init__.pyz.pyz.pycz.soz.slz.pydT)
startswithsplitr   filenamer   r   r   )r    Zimp_name	base_pathZextr   r   r   r'   U   s    


z!FixImport.probably_a_local_import)	__name__
__module____qualname__ZBM_compatibleZPATTERNr   r*   r'   __classcell__r   r   r"   r   r   &   s
   "r   N)__doc__r   r   os.pathr   r   r   r   Z
fixer_utilr   r	   r
   r   ZBaseFixr   r   r   r   r   <module>   s
   