a
    ϑ`                     @   s   d Z ddlmZmZ ddlZddlZddlZddlmZ e	dZ
dd Z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d ZdS )z1
Package type detection and meta-data extraction
    )print_functionunicode_literalsN)pathzbinstar.detectc                 O   s   i ddit | i dfS )Ndescription )basenameattrs)r   r   )filenamefileobjargskwargs r   4lib/python3.9/site-packages/repo_cli/utils/detect.pyfile_handler   s    r   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 filer   r   r   r   r   is_ipynb,   s    

r   c                 C   s   | dkp|  dS )Nzanaconda-project.ymlz/anaconda-project.ymlr   r   r   r   r   is_anaconda_project_yaml3   s    r   c                    s   t d  fdd} fdd}| s.| r2dS  dsF dr jd	d
dd
 }tj d| d8}| D ]}t|rt W d    dS qtW d    n1 s0    Y   drt	 8}|
 D ]}t|r W d    dS qW d    n1 s0    Y  t d d S )NzTesting if project ..c                      s
     dS )Nz.pyr   r   r   r   r   is_python_file:   s    z"is_project.<locals>.is_python_filec                      s
   t  S )N)r   isdirr   r   r   r   is_directory=   s    z is_project.<locals>.is_directoryT.tar.gz.tar.bz2.   )maxsplitzr|%smodez.zipzNot a project)r   r   r   rsplittarfileopengetnamesr   zipfileZipFileZnamelist)r	   r   r   compressiontfnamezfr   r   r   
is_project7   s"    
24r.   c                 C   s   t d | drzNtj| dd,}|D ]}|jdkr* qBq*tW d    n1 sV0    Y  W n ty   t d Y dS 0 t d d	S t d
 d S )NzTesting if conda package ..r   zr|bz2r"   z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   r%   r&   r,   KeyError)r	   r+   infor   r   r   is_condaS   s    


&

r1   c                 C   s   t d | dr"t d dS | ds6| drt| P}tdd | D rhW d    dS t d	 W d    d
S W d    n1 s0    Y  t d d S )NzTesting if pypi package ..z.whlzThis is a pypi wheel packageTr   .tgzc                 s   s   | ]}| d V  qdS )z	/PKG-INFONr   .0r,   r   r   r   	<genexpr>n       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&   anyr'   r	   r+   r   r   r   is_pypig   s    



.r:   c                 C   s   t d | ds| drt| V}tdd | D rftdd | D rfW d    dS t d W d    q1 s0    Y  n
t d	 d S )
NzTesting if R package ..r   r2   c                 s   s   | ]}| d V  qdS )z/DESCRIPTIONNr   r3   r   r   r   r5   |   r6   zis_r.<locals>.<genexpr>c                 s   s   | ]}| d V  qdS )z
/NAMESPACENr   r3   r   r   r   r5   }   r6   TzFThis not is an R package (no '*/DESCRIPTION' and '*/NAMESPACE' files).z2This not is an R package (expected .tgz, .tar.gz).r7   r9   r   r   r   is_rw   s    
*r;   c                 C   sh   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| r`d	S d S d S )
Nzutf-8ignore)errorsZcondaZprojectZpypirZipynbenv)	
isinstancebytesdecoder1   r.   r:   r;   r   r   r   r   r   r   detect_package_type   s    
rC   c                 O   sJ   t |d,}t|  ||g|R i |W  d    S 1 s<0    Y  d S )Nrb)r&   	detectors)Zpackage_typer	   r   r   r
   r   r   r   	get_attrs   s    rF   )__doc__Z
__future__r   r   loggingr%   r(   osr   Z	getLoggerr   r   rE   r   r   r   r.   r1   r:   r;   rC   rF   r   r   r   r   <module>   s$   	
