
"þîhc  ã               @   sq   d  d l  Z  d  d l Z d d l m Z d  d l m Z e  j j Z Gd d „  d ƒ Z	 Gd d „  d e	 ƒ Z
 d S)	é    Né   )Úpy312)Úlogc               @   sš   e  Z d  Z d Z d d d d � „  Z d d d d � „  Z d d	 „  Z d
 d „  Z d Z d Z	 d d „  Z
 d d „  Z d d „  Z e d d „  ƒ Z d S)Ú	Installerz
-nspkg.pthN)Úreturnc          	   C   sž   |  j  ƒ  } | s d  S|  j ƒ  } |  j j | ƒ t j d | ƒ t |  j | ƒ } |  j rk t	 | ƒ d  St
 | d d t j ƒ� } | j | ƒ Wd  QRXd  S)NzInstalling %sÚwtÚencoding)Ú_get_all_ns_packagesÚ_get_nspkg_fileÚoutputsÚappendr   ÚinfoÚmapÚ_gen_nspkg_lineÚdry_runÚlistÚopenr   ZPTH_ENCODINGÚ
writelines)ÚselfÚnspÚfilenameÚlinesÚf© r   ú;/tmp/pip-build-zijwfla7/setuptools/setuptools/namespaces.pyÚinstall_namespaces   s    	
zInstaller.install_namespacesc             C   sC   |  j  ƒ  } t j j | ƒ s" d  St j d | ƒ t j | ƒ d  S)NzRemoving %s)r
   ÚosÚpathÚexistsr   r   Úremove)r   r   r   r   r   Úuninstall_namespaces!   s
    zInstaller.uninstall_namespacesc             C   s)   t  j j |  j ƒ  ƒ \ } } | |  j S)N)r   r   ÚsplitextÚ_get_targetÚ	nspkg_ext)r   r   Ú_r   r   r   r
   (   s    zInstaller._get_nspkg_filec             C   s   |  j  S)N)Útarget)r   r   r   r   r"   ,   s    zInstaller._get_targetúimport sys, types, osú$p = os.path.join(%(root)s, *%(pth)r)ú(importlib = __import__('importlib.util')ú!__import__('importlib.machinery')ú�m = sys.modules.setdefault(%(pkg)r, importlib.util.module_from_spec(importlib.machinery.PathFinder.find_spec(%(pkg)r, [os.path.dirname(p)])))úCm = m or sys.modules.setdefault(%(pkg)r, types.ModuleType(%(pkg)r))ú7mp = (m or []) and m.__dict__.setdefault('__path__',[])ú(p not in mp) and mp.append(p)ú4m and setattr(sys.modules[%(parent)r], %(child)r, m)c             C   s   d S)Nz$sys._getframe(1).f_locals['sitedir']r   )r   r   r   r   Ú	_get_rootD   s    zInstaller._get_rootc             C   sm   t  | j d ƒ ƒ } |  j ƒ  } |  j } | j d ƒ \ } } } | rU | |  j 7} d j | ƒ t ƒ  d S)NÚ.ú;Ú
)ÚtupleÚsplitr/   Ú_nspkg_tmplÚ
rpartitionÚ_nspkg_tmpl_multiÚjoinÚlocals)r   ÚpkgÚpthÚrootZ
tmpl_linesÚparentÚsepÚchildr   r   r   r   G   s    	zInstaller._gen_nspkg_linec             C   s4   |  j  j p g  } t t t t |  j | ƒ ƒ ƒ ƒ S)z,Return sorted list of all package namespaces)ÚdistributionZnamespace_packagesÚsortedÚsetÚflattenr   Ú
_pkg_names)r   Úpkgsr   r   r   r	   P   s    zInstaller._get_all_ns_packagesc             c   s8   |  j  d ƒ } x" | r3 d j | ƒ V| j ƒ  q Wd S)zÏ
        Given a namespace package, yield the components of that
        package.

        >>> names = Installer._pkg_names('a.b.c')
        >>> set(names) == set(['a', 'a.b', 'a.b.c'])
        True
        r0   N)r4   r8   Úpop)r:   Úpartsr   r   r   rD   U   s    
	zInstaller._pkg_names)r&   r'   r(   r)   r*   r+   r,   r-   )r.   )Ú__name__Ú
__module__Ú__qualname__r#   r   r    r
   r"   r5   r7   r/   r   r	   ÚstaticmethodrD   r   r   r   r   r      s$          	r   c               @   s(   e  Z d  Z d d „  Z d d „  Z d S)ÚDevelopInstallerc             C   s   t  t |  j ƒ ƒ S)N)ÚreprÚstrZegg_path)r   r   r   r   r/   f   s    zDevelopInstaller._get_rootc             C   s   |  j  S)N)Úegg_link)r   r   r   r   r"   i   s    zDevelopInstaller._get_targetN)rH   rI   rJ   r/   r"   r   r   r   r   rL   e   s   rL   )Ú	itertoolsr   Úcompatr   Ú	distutilsr   ÚchainÚfrom_iterablerC   r   rL   r   r   r   r   Ú<module>   s   Z