
    wBf]                        d Z ddlm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 erdd
lmZ ddlmZ dZ G d d      Zy)zDefine binstar spec.    )annotationsN)cached_property)TYPE_CHECKING   )	from_yaml)EnvironmentFileNotDownloaded)normalized_version)
ModuleType)Environmentenvc                      e Zd ZdZdZddZddZddZddZe	dd       Z
e	dd       Ze	dd	       Ze	d
        Ze	dd       Ze	dd       Zy)BinstarSpecz
    spec = BinstarSpec('darth/deathstar')
    spec.can_handle() # => True / False
    spec.environment # => YAML string
    spec.msg # => Error messages
    :raises: EnvironmentFileNotDownloaded
    Nc                    || _         y N)name)selfr   s     7lib/python3.12/site-packages/conda/env/specs/binstar.py__init__zBinstarSpec.__init__"   s	    	    c                    | j                         r4| j                  sd| _        y| j                  duxr | j	                         S y)ze
        Validates loader can process environment definition.
        :return: True or False
        zAnaconda Client is required to interact with anaconda.org or an Anaconda API. Please run `conda install anaconda-client -n base`.FN)
valid_namebinstarmsgpackagevalid_packager   s    r   
can_handlezBinstarSpec.can_handle%   sG     ??<<X  <<t+D0B0B0DDr   c                    t        j                  dt        | j                              y| j                  d| _        yd| j                  d| _        y)z?
        Validates name
        :return: True or False
        z^(.+)/(.+)$TzCan't process without a namezInvalid name z, try the format: user/packageF)rematchstrr   r   r   s    r   r   zBinstarSpec.valid_name6   sP    
 88M3tyy>2>YY5DH  'tyym3QRDHr   c                2    t        | j                        dkD  S )z`
        Returns True if package has an environment file
        :return: True or False
        r   )len	file_datar   s    r   r   zBinstarSpec.valid_packageC   s    
 4>>"Q&&r   c                <    	 ddl m}  |       S # t        $ r Y y w xY w)Nr   )get_server_api)binstar_client.utilsr&   ImportError)r   r&   s     r   r   zBinstarSpec.binstarJ   s%    	;!## 		s    	c                `    | j                   d   D cg c]  }|d   t        k(  s| c}S c c}w )Nfilestype)r   ENVIRONMENT_TYPE)r   datas     r   r$   zBinstarSpec.file_dataS   s6     "\\'2
d6lFV6VD
 	
 
s   ++c                   | j                   D cg c]  }t        |d         |d   d }}t        |d       d   }| j                  d   D cg c]  }|d   |k(  s| }}| j                  j                  | j                  | j                  ||d   d         }| t        | j                  | j                        t        |j                        S c c}w c c}w )	Nversion)
normalizedoriginalc                    | d   S )Nr0    )xs    r   <lambda>z)BinstarSpec.environment.<locals>.<lambda>_   s
    Q|_ r   )keyr1   r*   r   basename)r$   r	   maxr   r   downloadusernamepackagenamer   r   text)r   dversionslatest_versionr-   r$   reqs          r   environmentzBinstarSpec.environmentY   s     ^^
 .a	l;9V
 
 X+DEjQ!\\'2
d9o6WD
	 
 ll##MM4++^Yq\*=U
 ;.t}}d>N>NOO""


s   CCCc                    	 | j                   j                  | j                  | j                        S # t        t
        f$ r | j                   d| _        Y y w xY w)Nz] was not found on anaconda.org.
You may need to be logged in. Try running:
    anaconda login)r   r   r:   r;   
IndexErrorAttributeErrorr   r   r   s    r   r   zBinstarSpec.packagej   sV    	<<''t7G7GHHN+ 	99+ % % H	s   /2 #AAc                @    | j                   j                  dd      d   S )N/   r   r   splitr   s    r   r:   zBinstarSpec.usernameu       yysA&q))r   c                @    | j                   j                  dd      d   S )NrF   rG   rH   r   s    r   r;   zBinstarSpec.packagenamey   rJ   r   r   )returnbool)rL   r
   )rL   zlist[dict[str, str]])rL   r   )rL   r!   )__name__
__module____qualname____doc__r   r   r   r   r   r   r   r$   rA   r   r:   r;   r3   r   r   r   r      s     C"'   
 

 # #    * * * *r   r   )rQ   
__future__r   r   	functoolsr   typingr   env.envr   
exceptionsr   models.versionr	   typesr
   r   r,   r   r3   r   r   <module>rY      s:     " 	 %     6 0 & d* d*r   