a oe @sFddlZddlmZddlZejjZGdddZGdddeZdS)N)logc@s\eZdZdZddZddZddZdd Zd Zd Z d d Z ddZ ddZ e ddZdS) Installerz -nspkg.pthcCs|}|sdS|}|j|td|t|j|}|jrNt |dSt |d}| |Wdn1sx0YdS)Nz Installing %sZwt) _get_all_ns_packages_get_nspkg_fileZoutputsappendrinfomap_gen_nspkg_linedry_runlistopen writelines)selfZnspfilenamelinesfr6C:\Program Files\Certbot\pkgs\setuptools\namespaces.pyinstall_namespaces s    zInstaller.install_namespacescCs2|}tj|sdStd|t|dS)Nz Removing %s)rospathexistsrrremove)rrrrruninstall_namespacess   zInstaller.uninstall_namespacescCstj|\}}||jSN)rrsplitext _get_target nspkg_ext)rr_rrrr$szInstaller._get_nspkg_filecCs|jSr)targetrrrrr(szInstaller._get_target) zimport sys, types, osz#has_mfs = sys.version_info > (3, 5)z$p = os.path.join(%(root)s, *%(pth)r)z4importlib = has_mfs and __import__('importlib.util')z-has_mfs and __import__('importlib.machinery')zm = has_mfs and sys.modules.setdefault(%(pkg)r, importlib.util.module_from_spec(importlib.machinery.PathFinder.find_spec(%(pkg)r, [os.path.dirname(p)])))zCm = m or sys.modules.setdefault(%(pkg)r, types.ModuleType(%(pkg)r))z7mp = (m or []) and m.__dict__.setdefault('__path__',[])z(p not in mp) and mp.append(p))z4m and setattr(sys.modules[%(parent)r], %(child)r, m)cCsdS)Nz$sys._getframe(1).f_locals['sitedir']rr rrr _get_rootAszInstaller._get_rootcCsNt|d}|}|j}|d\}}}|r:||j7}d|tdS)N.; )tuplesplitr! _nspkg_tmpl rpartition_nspkg_tmpl_multijoinlocals)rpkgZpthrootZ tmpl_linesparentsepchildrrrr Ds zInstaller._gen_nspkg_linecCs$|jjp g}tttt|j|S)z,Return sorted list of all package namespaces)Z distributionZnamespace_packagessortedsetflattenr _pkg_names)rZpkgsrrrrMs zInstaller._get_all_ns_packagesccs(|d}|r$d|V|q dS)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 r"N)r&r*pop)r,partsrrrr4Rs  zInstaller._pkg_namesN)__name__ __module__ __qualname__rrrrrr'r)r!r r staticmethodr4rrrrr s rc@seZdZddZddZdS)DevelopInstallercCstt|jSr)reprstrZegg_pathr rrrr!cszDevelopInstaller._get_rootcCs|jSr)Zegg_linkr rrrrfszDevelopInstaller._get_targetN)r7r8r9r!rrrrrr;bsr;) rZ distutilsr itertoolschain from_iterabler3rr;rrrrs  Y