B
    T[9                 @   s   d Z ddlmZmZ ddlZddlZddlmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZ dd	lmZ dd
lmZ edZdd Zde	dedededeejejdei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S )$z1
Package type detection and meta-data extraction
    )print_functionunicode_literalsN)path)inspect_conda_package)conda_installer)inspect_pypi_package)inspect_r_package)inspect_ipynb_package)inspect_env_packagezbinstar.detectc             O   s   i ddit | i dfS )NZdescription )basenameZattrs)r   r   )filenamefileobjargskwargs r   Zlib/python3.7/site-packages/anaconda_client-1.7.2-py3.7.egg/binstar_client/utils/detect.pyfile_handler   s    r   condapypiripynbenvfilec             C   s0   t d | ds| dr"dS t d d S )NzTesting if environment file ..z.ymlz.yamlTzNo environment file)loggerdebugendswith)r   r   r   r   is_environment$   s    
r   c             C   s&   t d | drdS t d d S )NzTesting if ipynb file ..z.ipynbTzNo ipynb file)r   r   r   )r   r   r   r   is_ipynb+   s    

r   c                s@   t d  fdd} fdd}| s.| r2dS t d d S )NzTesting if project ..c                  s
     dS )Nz.py)r   r   )r   r   r   is_python_file5   s    z"is_project.<locals>.is_python_filec                  s
   t  S )N)r   isdirr   )r   r   r   is_directory8   s    z is_project.<locals>.is_directoryTzNot a project)r   r   )r   r   r!   r   )r   r   
is_project2   s    
r"   c          	   C   s   t d | dr~y<tj| dd$}x|D ]}|jdkr,P q,W tW d Q R X W n tk
rn   t d dS X t d d	S t d
 d S )NzTesting if conda package ..z.tar.bz2zr|bz2)modezinfo/index.jsonz;Not conda  package no 'info/index.json' file in the tarballFzThis is a conda packageTz,Not conda package (file ext is not .tar.bz2))r   r   r   tarfileopennameKeyError)r   tfinfor   r   r   is_conda@   s    





r*   c          	   C   s   t d | dr"t d dS | ds6| drtt| .}tdd | D r\dS t d	 d
S W d Q R X t d d S )NzTesting if pypi package ..z.whlzThis is a pypi wheel packageTz.tar.gzz.tgzc             s   s   | ]}| d V  qdS )z	/PKG-INFON)r   ).0r&   r   r   r   	<genexpr>[   s    zis_pypi.<locals>.<genexpr>z6This not is a pypi package (no '/PKG-INFO' in tarball)Fz;This not is a pypi package (expected .tgz, .tar.gz or .whl))r   r   r   r$   r%   anygetnames)r   r(   r   r   r   is_pypiT   s    



r/   c          	   C   s~   t d | ds| drpt| @}tdd | D rZtdd | D rZdS t d W d Q R X n
t d	 d S )
NzTesting if R package ..z.tar.gzz.tgzc             s   s   | ]}| d V  qdS )z/DESCRIPTIONN)r   )r+   r&   r   r   r   r,   i   s    zis_r.<locals>.<genexpr>c             s   s   | ]}| d V  qdS )z
/NAMESPACEN)r   )r+   r&   r   r   r   r,   j   s    TzFThis not is an R package (no '*/DESCRIPTION' and '*/NAMESPACE' files).z2This not is an R package (expected .tgz, .tar.gz).)r   r   r   r$   r%   r-   r.   )r   r(   r   r   r   is_rd   s    
r0   c             C   sx   t | tr| jddd} t| r$dS t| r0dS t| r<dS t| rHdS t| rTdS t	| rdtj
S t| rpd	S d S d S )
Nzutf-8ignore)errorsr   r   r   r   r   Zproject)
isinstancebytesdecoder*   r/   r0   r   r   r   Zis_installerPACKAGE_TYPEr"   )r   r   r   r   detect_package_typer   s"    

r7   c          	   O   s,   t |d}t|  ||f||S Q R X d S )Nrb)r%   	detectors)Zpackage_typer   r   r   r   r   r   r   	get_attrs   s    r:   )"__doc__Z
__future__r   r   Zloggingr$   osr   Z$binstar_client.inspect_package.condar   Zbinstar_client.inspect_packager   Z#binstar_client.inspect_package.pypir   Z binstar_client.inspect_package.rr   Z$binstar_client.inspect_package.ipynbr	   Z"binstar_client.inspect_package.envr
   Z	getLoggerr   r   r6   Zinspect_packager9   r   r   r"   r*   r/   r0   r7   r:   r   r   r   r   <module>   s6   
