î
\á[\¸  ã               @   s}   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 Gd d	 „  d	 e j ƒ Z d
 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 } xÍ | rØ | j  ƒ  } | j t j k r; | j Vq | j t j k rn d j d d „  | j Dƒ ƒ Vq | j t j	 k r— | j
 | j d ƒ q | j t j k rÉ | j | j d d d … ƒ q t d ƒ ‚ q Wd 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.4/lib2to3/fixes/fix_import.pyú
<listcomp>   s   	 z$traverse_imports.<locals>.<listcomp>r   Nr   zunknown node typeéþÿÿÿ)ÚpopÚtyper
   ÚNAMEr   r	   Zdotted_namer   ÚchildrenZdotted_as_nameÚappendZdotted_as_namesÚextendÚAssertionError)ÚnamesÚpendingÚnoder   r   r   Útraverse_imports   s    		! r   c                   sF   e  Z d  Z d Z d Z ‡  f d d †  Z d d „  Z d d „  Z ‡  S)	Ú	FixImportTzj
    import_from< 'from' imp=any 'import' ['('] any [')'] >
    |
    import_name< 'import' imp=any >
    c                s/   t  t |  ƒ j | | ƒ 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 r~ x  t | d ƒ sK | j d } q, W|  j | j ƒ rd | j | _ | j ƒ  qn† d } d } x2 t	 | ƒ D]$ } |  j | ƒ rµ d } q— d } q— W| râ | rÞ |  j
 | d ƒ n  d  St d | g ƒ } | j | _ | Sd  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   s¡   | j  d ƒ r d S| j d d ƒ d } t |  j ƒ } t | | ƒ } t t t | ƒ d ƒ ƒ sf d Sx4 d t d d d	 d
 g D] } t | | ƒ r d Sq Wd 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'   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
   "