\hD*.ddlmZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z mZmZej eZdaGddeZGdd eZGd d eZGd d eZGddeZGddeZedee j8eiZ ddlZeeejD<eeejF<eeejH<[dZ&iZ'dZ(ejRe*dZ+dZ,y#e $rddl!ZY]wxYw#e e%f$rYF WW\\$))T-?-?-GNFggoof-G77==) G$77>>&) h5&$',1GGHNN+, v , s 4DD&N)__name__ __module__ __qualname__rrr, __classcell__rs@rr r s2 rr ceZdZdZy) ResourceBasec ||_||_yr-)rname)rrr6s rrzResourceBase.__init__Hs  rN)r.r/r0rrrrr4r4Gsrr4cJeZdZdZdZdZedZedZedZ y)Resourcez A class representing an in-package resource, such as a data file. This is not normally instantiated by user code, but rather by a :class:`ResourceFinder` which manages the resource. Fc8|jj|S)z Get the resource as a stream. This is not a property to make it obvious that it returns a new stream each time. )r get_streamrs r as_streamzResource.as_streamUs{{%%d++rcLt tatj|Sr-)cacher r,r;s r file_pathzResource.file_path^s =!OEyyrc8|jj|Sr-)r get_bytesr;s rr'zResource.byteses{{$$T**rc8|jj|Sr-)rget_sizer;s rsizez Resource.sizeis{{##D))rN) r.r/r0__doc__ is_containerr<rr?r'rDrrrr8r8MsO L, ++**rr8c eZdZdZedZy)ResourceContainerTc8|jj|Sr-)r get_resourcesr;s r resourceszResourceContainer.resourcesqs{{((..rN)r.r/r0rFrrKrrrrHrHnsL//rrHceZdZdZej j drdZndZdZdZ dZ dZ d Z d Z d Zd Zd ZdZdZeej*j,ZdZy)ResourceFinderz4 Resource finder for file system resources. java).pyc.pyoz.class)rOrPc||_t|dd|_tjj t|dd|_y)N __loader____file__)modulegetattrloaderr r r!r)rrUs rrzResourceFinder.__init__s6 flD9 GGOOGFJ$CD rc@tjj|Sr-)r r realpathrr s r _adjust_pathzResourceFinder._adjust_pathsww%%rct|trd}nd}|j|}|jd|jt j j|}|j|S)N//r) isinstancer'splitinsertrr r rr[)r resource_nameseppartsr)s r _make_pathzResourceFinder._make_paths] mU +CC##C( Q "u%  ((rc@tjj|Sr-)r r r$rZs r_findzResourceFinder._findsww~~d##rcd|jfSr-)r rrs rrzResourceFinder.get_cache_infosX]]""rc|j|}|j|sd}|S|j|r t||}n t ||}||_|Sr-)rerg _is_directoryrHr8r )rrbr r)s rfindzResourceFinder.finds\}-zz$F !!$'*4?!$ 6FK rc.t|jdSNrb)r%r ris rr:zResourceFinder.get_streamsHMM4((rczt|jd5}|jcdddS#1swYyxYwrn)r%r read)rrr+s rrAzResourceFinder.get_bytess0 (-- & !668   s1:cTtjj|jSr-)r r getsizeris rrCzResourceFinder.get_sizeswwx}}--rcfd}ttj|jDcgc] }||s |c}Scc}w)NcJ|dk7xr|jj S)N __pycache__)endswithskipped_extensions)r+rs rallowedz-ResourceFinder.get_resources..alloweds,&8JJt667,8 9r)setr listdirr )rrryr+s` rrJzResourceFinder.get_resourcess6 9rzz(--8G!GAJAGHHGs AAc8|j|jSr-)rkr ris rrFzResourceFinder.is_containers!!(--00rc#XK|j|}||g}|r|jd}||jrh|j}|jD]M}|s|}ndj ||g}|j|}|jr|j |J|O|ryyyw)Nrr^)rlpoprFr6rKrappend)rrbrtodornamer6new_namechilds riteratorzResourceFinder.iterators99]+  :D88A;(($MME ( 2 2 ($'+H'*xx '>H $ ( 3 -- KK."'K (  s B$B*'B*N)r.r/r0rEsysplatform startswithrxrr[rergrrlr:rArCrJrF staticmethodr r r"rkrrrrrMrMvsy ||v&7-E & )$# ).I 1!/M(rrMcReZdZdZfdZdZdZdZdZdZ dZ d Z d Z xZ S) ZipResourceFinderz6 Resource finder for resources in .zip files. cFtt| ||jj}dt |z|_t|jdr|jj|_ntj||_t|j|_ y)Nr_files) rrrrWarchivelen prefix_lenhasattrr zipimport_zip_directory_cachesortedindex)rrUrrs rrzZipResourceFinder.__init__ss /7++%%c'l* 4;; )++,,DK#88ADKDKK( rc|Sr-rrZs rr[zZipResourceFinder._adjust_paths rc||jd}||jvrd}nj|r)|dtjk7r|tjz}t j|j |} |j |j |}|s-tjd||jj|Stjd||jj|S#t$rd}YiwxYw)NTFz_find failed: %r %rz_find worked: %r %r) rrr rcbisectrr IndexErrorloggerdebugrWr()rr r)is rrgzZipResourceFinder._findsDOO$% 4;; FRBFF*bff} djj$/A A11$7 LL.dkk6H6H I  LL.dkk6H6H I   s-C'' C54C5cl|jj}|jdt|zd}||fS)Nr)rWrr r)rrr(r s rrz ZipResourceFinder.get_cache_infos4$$}}QV_-.t|rcL|jj|jSr-)rWget_datar ris rrAzZipResourceFinder.get_bytess{{##HMM22rcJtj|j|Sr-)ioBytesIOrAris rr:zZipResourceFinder.get_streamszz$..233rcX|j|jd}|j|dS)N)r rrrs rrCzZipResourceFinder.get_sizes+}}T__-.{{4 ##rc.|j|jd}|r)|dtjk7r|tjz }t |}t }t j |j|}|t |jkr|j|j|s |S|j||d}|j|jtjdd|dz }|t |jkr|S)Nrrr) r rr rcrrzrrraddr`)rrr plenr)rss rrJzZipResourceFinder.get_resourcess}}T__-. DH& BFFND4y MM$**d +#djj/!::a=++D1  1 de$A JJqwwrvvq)!, - FA #djj/!  rc||jd}|r)|dtjk7r|tjz }tj|j|} |j|j |}|S#t $rd}Y|SwxYw)NrF)rr rcrrrr)rr rr)s rrkzZipResourceFinder._is_directorysDOO$% DH& BFFND MM$**d + ZZ]--d3F  F  sA<< B  B )r.r/r0rErr[rgrrAr:rCrJrkr1r2s@rrrs5 )$ 34$  rrc(|tt|<yr-)_finder_registrytype)rW finder_makers rregister_finderr2s%1T&\"rcX|tvr t|}|S|tjvr t|tj|}t |dd}| t dt |dd}t jt|}|t d|z||}|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 packagerRzUnable to locate finder for %r) _finder_cachermodules __import__rVrrr,r)packager)rUr rWrs rrr9s -w' M #++ % w W%vz40 <"$89 9t4'++DL9  "#Cg#MN Nf%!' g Mr __dummy__c&d}tj|tjj |}t j t |}|r:t}tjj|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. NrT) pkgutil get_importerrpath_importer_cacher,rr _dummy_moduler r rrSrR)r r)rWrrUs rfinder_for_pathrUsuF   $ $ ( ( .F  ! !$v, /F '',,tR0" Mr)- __future__rrrloggingr rrtypesrrTrutilrrr getLoggerr.rr>r objectr4r8rHrMrr zipimporterr_frozen_importlib_external_fi ImportError_frozen_importlibSourceFileLoader FileFinderSourcelessFileLoaderAttributeErrorrrr ModuleTyperrrrrrrsR(   88   8 $ )E)X6 *|*B/ /W(VW(tKK^ J ,  (0.<S))*'5S^^$1?S--. 2 2!  [!12 ] ('( ^$  s0%C;).D ; DD DD DD