3 igD*@sddlmZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z mZmZejeZdaGdddeZGdd d eZGd d d eZGd d d eZGdddeZGdddeZedee jeiZyPy ddlZWne k rddl!ZYnXeeej"<eeej#<eeej$<[Wne e%fk rVYnXddZ&iZ'ddZ(ej)e*dZ+ddZ,dS))unicode_literalsN)DistlibException)cached_propertyget_cache_baseCachecs.eZdZdfdd ZddZddZZS) ResourceCacheNcs0|dkrtjjttd}tt|j|dS)Nzresource-cache)ospathjoinrstrsuperr__init__)selfbase) __class__.allowedcsg|]}|r|qSrr).0r$)rXrr sz0ResourceFinder.get_resources..)setr listdirr )rrr)rXrrr7s zResourceFinder.get_resourcescCs |j|jS)N)rPr )rrrrrr5szResourceFinder.is_containerccs|j|}|dk r|g}xn|r|jd}|V|jr|j}xH|jD]>}|sP|}ndj||g}|j|}|jrz|j|qB|VqBWqWdS)NrrG)rQpopr5r+r8r append)rrKrtodornamer+new_namechildrrriterators      zResourceFinder.iteratorN)r;r<r=)r;r<)r&r'r(r4sysplatform startswithrWrrErNrOrrQr-r1r2r7r5 staticmethodr r rrPrcrrrrr9vs"    r9cs`eZdZdZfddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ Z S)ZipResourceFinderz6 Resource finder for resources in .zip files. csZtt|j||jj}dt||_t|jdr>|jj|_n t j ||_t |j|_ dS)Nr_files) r rhrrCarchivelen prefix_lenhasattrri zipimport_zip_directory_cachesortedindex)rrArj)rrrrs   zZipResourceFinder.__init__cCs|S)Nr)rr rrrrEszZipResourceFinder._adjust_pathc Cs||jd}||jkrd}nX|r:|dtjkr:|tj}tj|j|}y|j|j|}Wntk rtd}YnX|stj d||j j ntj d||j j |S)NTrFz_find failed: %r %rz_find worked: %r %r) rlrir rLbisectrqrf IndexErrorloggerdebugrCr!)rr r"irrrrOs   zZipResourceFinder._findcCs&|jj}|jdt|d}||fS)Nr)rCrjr rk)rrr!r rrrrsz ZipResourceFinder.get_cache_infocCs|jj|jS)N)rCget_datar )rrrrrr1szZipResourceFinder.get_bytescCstj|j|S)N)ioBytesIOr1)rrrrrr-szZipResourceFinder.get_streamcCs|j|jd}|j|dS)N)r rlri)rrr rrrr2szZipResourceFinder.get_sizecCs|j|jd}|r,|dtjkr,|tj7}t|}t}tj|j|}xV|t|jkr|j|j|sjP|j||d}|j |j tjdd|d7}qJW|S)Nrrrr) r rlr rLrkr[rsrqrfaddrI)rrr plenr"rwsrrrr7s  zZipResourceFinder.get_resourcesc Csj||jd}|r*|dtjkr*|tj7}tj|j|}y|j|j|}Wntk rdd}YnX|S)NrFrr)rlr rLrsrqrfrt)rr rwr"rrrrPs  zZipResourceFinder._is_directory)r&r'r(r4rrErOrr1r-r2r7rPr)rr)rrrhs rhcCs|tt|<dS)N)_finder_registrytype)rC finder_makerrrrregister_finder2srcCs|tkrt|}nv|tjkr$t|tj|}t|dd}|dkrJtdt|dd}tjt|}|dkrxtd|||}|t|<|S)z Return a resource finder for a package. :param package: The name of the package. :return: A :class:`ResourceFinder` instance for the package. __path__Nz8You cannot get a finder for a module, only for a packager>zUnable to locate finder for %r) _finder_cacherdmodules __import__rBrrr%r)packager"rAr rCrrrrr9s      r __dummy__cCsRd}tj|tjj|}tjt|}|rNt}tj j |d|_ ||_ ||}|S)z Return a resource finder for a path, which should represent a container. :param path: The path. :return: A :class:`ResourceFinder` instance for the path. Nr@) pkgutil get_importerrdpath_importer_cacher%rr _dummy_moduler r r r?r>)r r"rCrrArrrfinder_for_pathUs  r)- __future__rrsryloggingr rrdtypesrnr@rutilrrr getLoggerr&rur/robjectr*r,r6r9rhr zipimporterr_frozen_importlib_externalZ_fi ImportError_frozen_importlibSourceFileLoader FileFinderSourcelessFileLoaderAttributeErrorrrr ModuleTyper rrrrrrsH   ,!ZO