U
    [e                     @   s   d Z ddlZddlZddlZ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e	dZdd Zdd Zdd	 Zd
d Zdd ZG dd dZe ZejZejZejZdS )z3Use a cache layer in front of entry point scanning.    Nzstevedore._cachec                  C   s~   t jdkr<tjdkr<t jddp,t jd} t j| dS tjdkrRt jdS t jddpjt jd	} t j| d
S dS )zpLocate a platform-appropriate cache directory to use.

    Does not ensure that the cache directory exists.
    posixdarwinXDG_CACHE_HOMENz~/.cachezpython-entrypointsz$~/Library/Caches/Python Entry PointsLOCALAPPDATAz~\AppData\LocalzPython Entry Points)	osnamesysplatformenvirongetpath
expanduserjoin)	base_path r   R/var/www/html/services/stratfitenv/lib/python3.8/site-packages/stevedore/_cache.py_get_cache_dir   s    


r   c              
   C   sH   zt | }|jW S  tk
rB } z|jtjkr2 W 5 d }~X Y nX dS )Ng      )r   statst_mtimeOSErrorerrnoENOENT)r   serrr   r   r   
_get_mtime6   s    
r   c                 C   s   t d| S )Nf)structStructpack)r   r   r   r   	_ftobytes@   s    r   c                 C   s   g }t  }|tjd |tjd | D ]}t|}||d |t| |	||f t
ttj|ddttj|ddD ]8}t|}||d |t| |	||f qq4| |fS )z4Return a hash and the path settings that created it.zutf-8z*.dist-infozentry_points.txtz
*.egg-info)hashlibsha256updater   
executableencodeprefixr   r   append	itertoolschainglobiglobr   r   r   	hexdigest)r   pathshentrymtimeZep_filer   r   r   _hash_settings_for_pathD   s0    r0   c                     s   t   t ts& fdd jD  i }   D ]R\}}t }g }|| |< |D ]2}|j|j|j	f}||krnqP|
| || qPq2| tjtjdS )Nc                    s   i | ]}| j |d qS ))group)select).0r1   Zreal_groupsr   r   
<dictcomp>j   s    z)_build_cacheable_data.<locals>.<dictcomp>)groupszsys.executablez
sys.prefix)importlib_metadataentry_points
isinstancedictr6   itemssetr   valuer1   addr&   r   r#   r%   )r6   r   
group_dataexistingmembersepitemr   r4   r   _build_cacheable_datad   s(    


rD   c                   @   s<   e Zd ZdddZdd ZdddZddd	Zdd
dZdS )CacheNc                 C   sX   |d krt  }|| _i | _d| _ttjtj| jdt	j
dd dkgrTd| _d S )NFz.disabler      z/tmpT)r   _dir	_internal_disable_cachinganyr   r   isfiler   r   r#   )self	cache_dirr   r   r   __init__   s    zCache.__init__c                 C   s  |d krt j}t|}|| jkr*| j| S t|\}}tj| j|}z0t	d| t
|d}t|}W 5 Q R X W n ttjfk
r   t }||d< | jszBt	d| tj| jdd t
|d}t|| W 5 Q R X W n ttfk
r   Y nX Y nX || j|< |S )Nz
reading %srpath_valueszwriting to %sT)exist_okw)r   r   tuplerH   r0   r   r   rG   logdebugopenjsonloadIOErrorJSONDecodeErrorrD   rI   makedirsdumpr   )rL   r   Zinternal_keydigestrP   filenamer   datar   r   r   _get_data_for_path   s0    


zCache._get_data_for_pathc                 C   s@   g }|  |}|di |g }|D ]}|tj|  q&|S )Nr6   )r`   r   r&   r7   
EntryPoint)rL   r1   r   resultr_   r?   valsr   r   r   get_group_all   s    
zCache.get_group_allc                 C   s0   i }| j ||dD ]}|j|kr|||j< q|S )Nr   )rd   r   )rL   r1   r   rb   rB   r   r   r   get_group_named   s
    
zCache.get_group_namedc                 C   s@   | j ||d D ]\}}||kr|  S qtd||d S )Nre   z No entrypoint {!r} in group {!r})rf   r;   
ValueErrorformat)rL   r1   r   r   rB   r   r   r   
get_single   s    
 zCache.get_single)N)N)N)N)__name__
__module____qualname__rN   r`   rd   rf   ri   r   r   r   r   rE      s
   


rE   )__doc__r   r)   r    importlib.metadatametadatar7   r'   rW   loggingr   os.pathr   r   	getLoggerrT   r   r   r   r0   rD   rE   Z_crd   rf   ri   r   r   r   r   <module>   s,   

 "E