B
    ðG®[  ã               @   s   d dl 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m	Z	m
Z
 yd dlmZ W n  ek
rt   d dlmZ Y nX edddd„ ƒZd	d
„ Ze  d¡Zdd„ Zdd„ Zdd„ Zyd dlmZ dd„ ZW n ek
ræ   dd„ ZY nX dd„ Zdd„ Zdd„ Zd#dd„Zdd „ Zd$d!d"„ZdS )%é    N)Ústring_types)ÚMAGIC_HEADERSÚ	DLL_TYPES)Ú	lru_cacheé    )Úmaxsizec             C   s   t  | ¡}|d kri }|S )N)ÚyamlÚload)ÚdataZres© r   ú5lib/python3.7/site-packages/conda_verify/utilities.pyÚyamlize   s    
r   c             C   s<  d  | d | d f¡}td  | d  d¡¡ƒ}td  | d  d¡¡ƒ}tdd| d	¡t|d
kƒt|dkƒt|dkƒt|dkƒt|dkƒ| d¡| d¡| d¡t|dkƒt|dkƒ| d¡| d¡|td|  koØdk n  ƒtd|  koòdk n  ƒt|dkƒt|dkƒt|dkƒt|dkƒt|dkƒt|dkƒ|dS )Nú-ÚplatformÚarchÚ ÚpythonÚ.ÚnumpyFzlinux-zlinux-32zlinux-64zlinux-armv7lzlinux-ppc64lezosx-)zlinux-zosx-zwin-zwin-32zwin-64)z-32z-64z-64é   é(   é   é   é   é!   é"   é#   é$   )ZnomklÚdebugZlinuxZlinux32Zlinux64Zarmv7lZarmZppc64leZosxZunixÚwinZwin32Zwin64Zx86Zx86_64ÚpyZpy3kZpy2kZpy26Zpy27Zpy33Zpy34Zpy35Zpy36Únp)ÚjoinÚintÚsplitÚdictÚ
startswithÚboolÚendswith)ÚcfgÚplatr    r!   r   r   r   Úns_cfg   s:    












r+   z(.+?)\s*\[(.+)\]$c             C   sl   g }xX|   ¡ D ]L}| ¡ }t |¡}|rP| d¡}t||i ƒr| | d¡¡ q| |¡ qW d |¡d S )Né   é   Ú
)Ú
splitlinesÚrstripÚsel_patÚmatchÚgroupÚevalÚappendr"   )r
   Ú	namespaceÚlinesÚlineÚmZcondr   r   r   Úselect_lines@   s    

r:   c             C   s"   |d k	rt | t|ƒƒ} tt| ƒƒS )N)r:   r+   r%   r   )r
   r)   r   r   r   ÚparseN   s    r;   c             C   s4   t  | ¡g}t jt  |¡d}| d¡}|j|dS )N)Úloaderz	meta.yaml)Zenvironment)Újinja2ZFileSystemLoaderZEnvironmentZChoiceLoaderZget_or_select_templateÚrender)Ú
recipe_dirÚloadersÚenvÚtemplater   r   r   Úrender_jinja2U   s    
rC   )Úapic             C   s0   t j| fdddœ|r|ni —Žd d }| ¡ S )NFT)ÚfinalizeZbypass_env_checkr   )rD   r>   Zget_rendered_recipe_text)r?   r)   r9   r   r   r   Úrender_metadataa   s    rF   c             C   s   t | ƒ}t||ƒS )N)rC   r;   )r?   r)   r
   r   r   r   rF   f   s    c              c   s@   x:dD ]2} x,dD ]$}|  d¡\}}t||| ddV  qW qW d S )N)Z27Z34Z35)zlinux-64zlinux-32zosx-64zwin-32zwin-64r   z1.11)r   r   r   r   )r$   r%   )r    r*   r   r   r   r   r   Ú	iter_cfgsk   s    

rG   c             C   s¨   | d d… }|t krd S t  |¡}|dkrv|  d¡}|dk r@dS tj | ¡} | |d  d| |d    }dt |¡ S | d	¡r„|S |d
kr¤d
dddœ | d ¡ S d S )Né   ZDLLs   PE  r   z<no PE header found>é   é   zDLL ZMachOZELFZ32Z64)úú)r   ÚgetÚfindÚfutureÚbuiltinsÚbytesr   r&   )r
   ÚheadÚlookupÚposÚir   r   r   Úget_object_typer   s    


rV   c             C   s   xdD ]}|| kr|S qW d S )N)z--z-.z-_z.-z..z._z_-z_.r   )ÚsÚseqr   r   r   Úget_bad_seq„   s    
rY   Fc             C   sb   dg}|r|  d¡ xH| D ]@}tjd dkr4t|ƒn|}||ksd|  krTdk sn dS qW dS )	Né
   é   r   r,   r   é   FT)r5   ÚsysÚversion_infoÚord)r
   Zallow_CRÚnewlineÚcÚnr   r   r   Ú	all_ascii   s    

rc   c             C   s(   t | tƒr| S t | tƒr"|  d¡S | gS )Nú,)Ú
isinstanceÚlistr   r$   )Zargumentr   r   r   Úensure_list˜   s
    


rg   c             C   s   t jd|  d ||dS )zbEmulate python-3.4 re.fullmatch().

    Credit: https://stackoverflow.com/questions/30212413/
    z(?:z)\Z)Úflags)Úrer2   )ZregexÚstringrh   r   r   r   Ú	fullmatch    s    rk   )F)r   )ri   r]   r=   r   Zsixr   Zfuture.builtinsrO   Zconda_verify.constantsr   r   Ú	functoolsr   ÚImportErrorZbackports.functools_lru_cacher   r+   Úcompiler1   r:   r;   rC   Zconda_buildrD   rF   rG   rV   rY   rc   rg   rk   r   r   r   r   Ú<module>   s6   	"
	
