B
    HeD*              	   @   s  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	ddl
mZ ddlmZmZmZ eeZdaG dd deZG dd	 d	eZG d
d deZG dd deZG dd deZG dd deZedee	jeiZyPyd dlZW n e k
r   d dl!ZY nX eeej"< eeej#< eeej$< [W n e e%fk
rV   Y nX dd Z&i Z'dd Z(e)e*dZ+dd Z,dS )    )unicode_literalsN   )DistlibException)cached_propertyget_cache_baseCachec                   s.   e Zd Zd fdd	Zdd Zdd Z  ZS )	ResourceCacheNc                s0   |d krt jt td}tt| | d S )Nzresource-cache)ospathjoinr   strsuperr   __init__)selfbase)	__class__ q/var/www/downstreamdata.science/rtclock/rtclock-venv/lib/python3.7/site-packages/pip/_vendor/distlib/resources.pyr      s    zResourceCache.__init__c             C   s   dS )z
        Is the cache stale for the given resource?

        :param resource: The :class:`Resource` being cached.
        :param path: The path of the resource in the cache.
        :return: True if the cache is stale.
        Tr   )r   resourcer
   r   r   r   is_stale"   s    	zResourceCache.is_stalec          	   C   s   |j |\}}|dkr|}n~tj| j| ||}tj|}tj|sXt	| tj
|sjd}n| ||}|rt|d}||j W dQ R X |S )z
        Get a resource into the cache,

        :param resource: A :class:`Resource` instance.
        :return: The pathname of the resource in the cache.
        NTwb)finderget_cache_infor	   r
   r   r   prefix_to_dirdirnameisdirmakedirsexistsr   openwritebytes)r   r   prefixr
   resultr   stalefr   r   r   get-   s    
zResourceCache.get)N)__name__
__module____qualname__r   r   r%   __classcell__r   r   )r   r   r      s   r   c               @   s   e Zd Zdd ZdS )ResourceBasec             C   s   || _ || _d S )N)r   name)r   r   r+   r   r   r   r   H   s    zResourceBase.__init__N)r&   r'   r(   r   r   r   r   r   r*   G   s   r*   c               @   s@   e Zd ZdZdZdd Zedd Zedd Zed	d
 Z	dS )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.
    Fc             C   s   | j | 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_stream)r   r   r   r   	as_streamU   s    zResource.as_streamc             C   s   t d krt a t | S )N)cacher   r%   )r   r   r   r   	file_path^   s    zResource.file_pathc             C   s   | j | S )N)r   	get_bytes)r   r   r   r   r    e   s    zResource.bytesc             C   s   | j | S )N)r   get_size)r   r   r   r   sizei   s    zResource.sizeN)
r&   r'   r(   __doc__is_containerr.   r   r0   r    r3   r   r   r   r   r,   M   s   	r,   c               @   s   e Zd ZdZedd ZdS )ResourceContainerTc             C   s   | j | S )N)r   get_resources)r   r   r   r   	resourcesq   s    zResourceContainer.resourcesN)r&   r'   r(   r5   r   r8   r   r   r   r   r6   n   s   r6   c               @   s   e Zd ZdZejdrdZndZdd Zdd Z	d	d
 Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZeejjZdd ZdS )ResourceFinderz4
    Resource finder for file system resources.
    java)z.pycz.pyoz.class)z.pycz.pyoc             C   s.   || _ t|dd | _tjt|dd| _d S )N
__loader____file__ )modulegetattrloaderr	   r
   r   r   )r   r>   r   r   r   r      s    zResourceFinder.__init__c             C   s   t j|S )N)r	   r
   realpath)r   r
   r   r   r   _adjust_path   s    zResourceFinder._adjust_pathc             C   sB   t |trd}nd}||}|d| j tjj| }| |S )N   //r   )	
isinstancer    splitinsertr   r	   r
   r   rB   )r   resource_nameseppartsr"   r   r   r   
_make_path   s    

zResourceFinder._make_pathc             C   s   t j|S )N)r	   r
   r   )r   r
   r   r   r   _find   s    zResourceFinder._findc             C   s
   d |j fS )N)r
   )r   r   r   r   r   r      s    zResourceFinder.get_cache_infoc             C   sD   |  |}| |sd }n&| |r0t| |}n
t| |}||_|S )N)rK   rL   _is_directoryr6   r,   r
   )r   rH   r
   r"   r   r   r   find   s    



zResourceFinder.findc             C   s   t |jdS )Nrb)r   r
   )r   r   r   r   r   r-      s    zResourceFinder.get_streamc          	   C   s    t |jd
}| S Q R X d S )NrO   )r   r
   read)r   r   r$   r   r   r   r1      s    zResourceFinder.get_bytesc             C   s   t j|jS )N)r	   r
   getsize)r   r   r   r   r   r2      s    zResourceFinder.get_sizec                s*   fdd t  fddt|jD S )Nc                s   | dko|   j S )N__pycache__)endswithskipped_extensions)r$   )r   r   r   allowed   s    z-ResourceFinder.get_resources.<locals>.allowedc                s   g | ]} |r|qS r   r   ).0r$   )rU   r   r   
<listcomp>   s    z0ResourceFinder.get_resources.<locals>.<listcomp>)setr	   listdirr
   )r   r   r   )rU   r   r   r7      s    zResourceFinder.get_resourcesc             C   s   |  |jS )N)rM   r
   )r   r   r   r   r   r5      s    zResourceFinder.is_containerc             c   s   |  |}|d k	r|g}xn|r|d}|V  |jr|j}xH|jD ]>}|sP|}nd||g}|  |}|jrz|| qB|V  qBW qW d S )Nr   rD   )rN   popr5   r+   r8   r   append)r   rH   r   todornamer+   new_namechildr   r   r   iterator   s     


zResourceFinder.iteratorN)r&   r'   r(   r4   sysplatform
startswithrT   r   rB   rK   rL   r   rN   r-   r1   r2   r7   r5   staticmethodr	   r
   r   rM   r`   r   r   r   r   r9   v   s"   r9   c                   s`   e Zd ZdZ fddZdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Z  ZS )ZipResourceFinderz6
    Resource finder for resources in .zip files.
    c                sZ   t t| | | jj}dt| | _t| jdr>| jj| _nt	j
| | _t| j| _d S )Nr   _files)r   re   r   r@   archivelen
prefix_lenhasattrrf   	zipimport_zip_directory_cachesortedindex)r   r>   rg   )r   r   r   r      s    zZipResourceFinder.__init__c             C   s   |S )Nr   )r   r
   r   r   r   rB      s    zZipResourceFinder._adjust_pathc             C   s   || j d  }|| jkrd}nX|r:|d tjkr:|tj }t| j|}y| j| |}W n tk
rt   d}Y nX |st	d|| j
j nt	d|| j
j |S )NTFz_find failed: %r %rz_find worked: %r %r)ri   rf   r	   rI   bisectrn   rc   
IndexErrorloggerdebugr@   r!   )r   r
   r"   ir   r   r   rL      s    


zZipResourceFinder._findc             C   s&   | j j}|jdt| d  }||fS )Nr   )r@   rg   r
   rh   )r   r   r!   r
   r   r   r   r      s    z ZipResourceFinder.get_cache_infoc             C   s   | j |jS )N)r@   get_datar
   )r   r   r   r   r   r1      s    zZipResourceFinder.get_bytesc             C   s   t | |S )N)ioBytesIOr1   )r   r   r   r   r   r-      s    zZipResourceFinder.get_streamc             C   s   |j | jd  }| j| d S )N   )r
   ri   rf   )r   r   r
   r   r   r   r2      s    zZipResourceFinder.get_sizec             C   s   |j | jd  }|r,|d tjkr,|tj7 }t|}t }t| j|}xV|t| jk r| j| |sjP | j| |d  }|	|
tjdd  |d7 }qJW |S )Nro   r   r   )r
   ri   r	   rI   rh   rX   rp   rn   rc   addrF   )r   r   r
   plenr"   rt   sr   r   r   r7     s    
zZipResourceFinder.get_resourcesc             C   sj   || j d  }|r*|d tjkr*|tj7 }t| j|}y| j| |}W n tk
rd   d}Y nX |S )Nro   F)ri   r	   rI   rp   rn   rc   rq   )r   r
   rt   r"   r   r   r   rM     s    

zZipResourceFinder._is_directory)r&   r'   r(   r4   r   rB   rL   r   r1   r-   r2   r7   rM   r)   r   r   )r   r   re      s   re   c             C   s   |t t| < d S )N)_finder_registrytype)r@   finder_makerr   r   r   register_finder2  s    r   c             C   s   | t krt |  }nv| tjkr$t|  tj|  }t|dd}|dkrJtdt|dd}tt|}|dkrxtd|  ||}|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;   zUnable to locate finder for %r)	_finder_cachera   modules
__import__r?   r   r|   r%   r}   )packager"   r>   r
   r@   r~   r   r   r   r   9  s    


r   	__dummy__c             C   sR   d}t |  tj| }tt|}|rNt}t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_importerra   path_importer_cacher%   r|   r}   _dummy_moduler	   r
   r   r<   r;   )r
   r"   r@   r   r>   r   r   r   finder_for_pathU  s    
r   )-
__future__r   rp   rv   loggingr	   r   ra   typesrk   r=   r   utilr   r   r   	getLoggerr&   rr   r/   r   objectr*   r,   r6   r9   re   r}   zipimporterr|   _frozen_importlib_externalZ_fiImportError_frozen_importlibSourceFileLoader
FileFinderSourcelessFileLoaderAttributeErrorr   r   r   
ModuleTyper   r   r   r   r   r   r   <module>   sH   
,!ZO



