
    e                         d Z ddlmZmZ ddlZddlZddlZddlZddlm	Z	  ej
        d          Zd ZdeiZd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd ZdS )z1
Package type detection and meta-data extraction
    )print_functionunicode_literalsN)pathzbinstar.detectc                 :    i ddit          j        |           i dfS )Ndescription )basenameattrs)r   r	   )filenamefileobjargskwargss       5lib/python3.11/site-packages/repo_cli/utils/detect.pyfile_handlerr      s'    #$-2I2ITV%W%WXX    filec                     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   s    r   is_environmentr   %   s^    
LL1222   H$5$5g$>$> t
LL&'''''r   c                     t                               d           |                     d          rdS t                               d           d S )NzTesting if ipynb file ..z.ipynbTzNo ipynb filer   r   s    r   is_ipynbr   ,   sH    
LL+,,,"" t
LL!!!!!r   c                 8    | dk    p|                      d          S )Nzanaconda-project.ymlz/anaconda-project.ymlr   r   s    r   is_anaconda_project_yamlr   3   s*    -- 1B1B2 2 r   c                     t                               d            fd} fd} |            s
 |            rdS                      d          s                     d          r                     dd	          d         }t	          j         d
|z            5 }|                                D ]}t          |          r d d d            dS  	 d d d            n# 1 swxY w Y                        d          rat          j	                   5 }|
                                D ]}t          |          r d d d            dS  	 d d d            n# 1 swxY w Y   t                               d           d S )NzTesting if project ..c                  .                          d          S )Nz.pyr   r   s   r   is_python_filez"is_project.<locals>.is_python_file<   s      '''r   c                  ,    t          j                   S )N)r   isdirr   s   r   is_directoryz is_project.<locals>.is_directory?   s    z(###r   T.tar.gz.tar.bz2.   )maxsplitzr|%smodez.zipzNot a project)r   r   r   rsplittarfileopengetnamesr   zipfileZipFilenamelist)r   r!   r$   compressiontfnamezfs   `      r   
is_projectr7   9   si   
LL()))( ( ( ( ($ $ $ $ $ |~~ )) t##  x'8'8'D'D  oocAo66q9\(+)=>>> 	 "    +D11  	  	  	  	  	  	  	  	   	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 
     _X&& 	 "    +D11  	  	  	  	  	  	  	  	   	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 
 LL!!!!!s0   'CCC"%C"'EEEEc                    t                               d           |                     d          r	 t          j        | d          5 }|D ]}|j        dk    r nt          	 d d d            n# 1 swxY w Y   t                               d           dS # t          $ r t                               d           Y d	S w xY wt                               d
           d S )NzTesting if conda package ..r&   zr|bz2r*   zinfo/index.jsonzThis is a conda packageTz;Not conda  package no 'info/index.json' file in the tarballFz,Not conda package (file ext is not .tar.bz2))r   r   r   r-   r.   r5   KeyError)r   r4   infos      r   is_condar;   U   s6   
LL.///$$ 	hW555 # # #Dy$555 6 #N # # # # # # # # # # # # # # # LL23334  	 	 	LLVWWW55	 LL?@@@@@s5   B A."B .A22B 5A26B $B=<B=c                 &   t                               d           |                     d          rt                               d           dS |                     d          s|                     d          rt          j        |           5 }t          d |                                D                       r	 d d d            dS t                               d           	 d d d            d	S # 1 swxY w Y   t                               d
           d S )NzTesting if pypi package ..z.whlzThis is a pypi wheel packageTr%   .tgzc              3   @   K   | ]}|                     d           V  dS )z	/PKG-INFONr   .0r5   s     r   	<genexpr>zis_pypi.<locals>.<genexpr>r   s.      HH$4==--HHHHHHr   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   r4   s     r   is_pypirE   i   sa   
LL-...   3444t## x'8'8( (  \(## 	rHH"++--HHHHH 	 	 	 	 	 	 	 	 UVVV	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 LLNOOOOOs   
-C,C,,C03C0c                    t                               d           |                     d          s|                     d          rt          j        |           5 }t          d |                                D                       r9t          d |                                D                       r	 d d d            dS t                               d           	 d d d            d S # 1 swxY w Y   d S t                               d           d S )	NzTesting if R package ..r%   r=   c              3   @   K   | ]}|                     d           V  dS )z/DESCRIPTIONNr   r?   s     r   rA   zis_r.<locals>.<genexpr>   s.      KKT4==00KKKKKKr   c              3   @   K   | ]}|                     d           V  dS )z
/NAMESPACENr   r?   s     r   rA   zis_r.<locals>.<genexpr>   sG       T T04l++T T T T T Tr   TzFThis not is an R package (no '*/DESCRIPTION' and '*/NAMESPACE' files).z2This not is an R package (expected .tgz, .tar.gz).rB   rD   s     r   is_rrI   {   s   
LL*+++## Kx'8'8( ( K \(## 		rKKR[[]]KKKKK PS T T8:T T T Q Q  		 		 		 		 		 		 		 		 \   		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 	IJJJJJs   AC&>C&&C*-C*c                    |                      d          sdS t                              d           t          |           5 }t	          j        |          }d d d            n# 1 swxY w Y   |                    d          st                              d           dS |                    d          }|rt          |          dk     rt                              d           dS |d	                             d
          }|st                              d           dS d |D             }|r|d	                             d          rdS t                              d           dS )Nz
.spdx.jsonFzTesting if SBOM document ..spdxVersionz)Document contains no version information!packagesr(   z)Document contains no package information!r   	checksumsz'Document contains no package checksums!c                 D    g | ]}|                     d           dk    |S )	algorithmSHA256)get)r@   xs     r   
<listcomp>zis_sbom.<locals>.<listcomp>   s.    FFFQquu['9'9X'E'Eq'E'E'Er   checksumValueTz9Document does not contain the needed package sha256 hash!)	r   r   r   r.   jsonloadrQ   warnlen)r   sbomcontentrL   rM   sha256ss         r   is_sbomr\      s   \** u
LL.///	h "4)D//" " " " " " " " " " " " " " " ;;}%% ?@@@u {{:&&H s8}}q((?@@@u ,,I =>>>uFF)FFFG 71:>>/22 t
KKKLLL5s   A""A&)A&c                 L   t          | t                    r|                     dd          } t          |           rdS t	          |           rdS t          |           rdS t          |           rdS t          |           rdS t          |           rd	S t          |           rd
S d S )Nzutf-8ignore)errorscondaprojectpypiripynbenvrY   )

isinstancebytesdecoder;   r7   rE   rI   r   r   r\   r   s    r   detect_package_typeri      s    (E"" =??78?<< w( yx vH~~ s wh ux v4r   c                     t          |d          5 }t          |          ||g|R i |cd d d            S # 1 swxY w Y   d S )Nrb)r.   	detectors)package_typer   r   r   r   s        r   	get_attrsrn      s    	h		 K&xJ4JJJ6JJK K K K K K K K K K K K K K K K K Ks   599)__doc__
__future__r   r   rU   loggingr-   r0   osr   	getLoggerr   r   rl   r   r   r   r7   r;   rE   rI   r\   ri   rn    r   r   <module>ru      sC    8 7 7 7 7 7 7 7           
	+	,	,Y Y Y L	( ( (" " "  " " "8A A A(P P P$K K K&  B  *K K K K Kr   