0{Y$ @sddlmZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl m Z ddl mZmZmZmZejeZdaGdddeZGdd d eZGd d d eZGd d d eZGdddeZGdddeZieed6ee j6Zy*ddl Z eee j!.allowedcs"g|]}|r|qSrr).0r%)rRrr s z0ResourceFinder.get_resources..)setr listdirr )rrr)rRrr7s zResourceFinder.get_resourcescCs|j|jS)N)rIr )rrrrrr5szResourceFinder.is_containerN)r'r(r)r4rrArGrHrrJr-r1r2r7r5 staticmethodr r rrIrrrrr9ws           r9cseZdZdZfddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ S)ZipResourceFinderz6 Resource finder for resources in .zip files. cstt|j||jj}dt||_t|jdrY|jj|_nt j ||_t |j|_ dS)Nr_files) rrXrr?archivelen prefix_lenhasattrrY zipimport_zip_directory_cachesortedindex)rr=rZ)rrrrs zZipResourceFinder.__init__cCs|S)Nr)rr rrrrAszZipResourceFinder._adjust_pathc Cs||jd}||jkr+d}ns|rT|dtjkrT|tj}ntj|j|}y|j|j|}Wntk rd}YnX|stj d||j j ntj d||j j |S)NTrFz_find failed: %r %rz_find worked: %r %r) r\rYr sepbisectra startswith IndexErrorloggerdebugr?r")rr r#irrrrHs   zZipResourceFinder._findcCs3|jj}|jdt|d}||fS)Nr)r?rZr r[)rrr"r rrrrs z ZipResourceFinder.get_cache_infocCs|jj|jS)N)r?get_datar )rrrrrr1szZipResourceFinder.get_bytescCstj|j|S)N)ioBytesIOr1)rrrrrr-szZipResourceFinder.get_streamcCs%|j|jd}|j|dS)N)r r\rY)rrr rrrr2szZipResourceFinder.get_sizecCs|j|jd}|r?|dtjkr?|tj7}nt|}t}tj|j|}xt|t|jkr|j|j|sPn|j||d}|j |j tjdd|d7}qlW|S)Nrrrb) r r\r rcr[rUrdrareaddrC)rrr plenr#risrrrr7s   zZipResourceFinder.get_resourcesc Cs||jd}|r<|dtjkr<|tj7}ntj|j|}y|j|j|}Wntk rd}YnX|S)NrFrb)r\r rcrdrarerf)rr rir#rrrrIs  zZipResourceFinder._is_directory) r'r(r)r4rrArHrr1r-r2r7rIrr)rrrXs        rXcCs|tt|rrqr&rr)packager#r=r r?rsrrrrs        r __dummy__cCszd}tj|tjj|}tjt|}|rvt}tj j |d|_ ||_ ||}n|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_importerrwpath_importer_cacher&rqrr _dummy_moduler r r r;r:)r r#r?rr=rrrfinder_for_path,s  r), __future__rrdrkloggingr r|shutilrwtypesr^r<rutilrrrr getLoggerr'rgr/r objectr*r,r6r9rXrr zipimporterrq_frozen_importlibSourceFileLoader FileFinder ImportErrorAttributeErrorrtrvr ModuleTyper rrrrrrsB         ",!9M