
    $TXg                        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 dd
lmZ erddlmZ ddl
mZ  e	j&                  dd        e	j(                  dddd        e	dd       G d d             Zy)zDefine binstar spec.    )annotationsN)cached_property)TYPE_CHECKING   )
deprecated)	from_yaml)EnvironmentFileNotDownloaded)normalized_version)
ModuleType)Environmentz24.7z25.9ENVIRONMENT_TYPE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_name:   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_packageG   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.binstarN   s%    	;!## 		s    	c                X    | j                   d   D cg c]  }|d   dk(  s| c}S c c}w )Nfilestyper   )r   )r   datas     r   r&   zBinstarSpec.file_dataW   s0    !%g!6P!6$v,%:O!6PPPs   ''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 )Nr1    )xs    r   <lambda>z)BinstarSpec.environment.<locals>.<lambda>a   s    Q|_r   )keyr2   r,   r   basename)r&   r
   maxr   r   downloadusernamepackagenamer	   r   text)r   dversionslatest_versionr.   r&   reqs          r   environmentzBinstarSpec.environment[   s     ^^
# .a	l;9V# 	 
 X+DEjQ!\\'2
2Td9o6WD2 	 
 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.packagel   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.usernamew       yysA&q))r   c                @    | j                   j                  dd      d   S )NrG   rH   rI   r   s    r   r<   zBinstarSpec.packagename{   rK   r   r   )returnbool)rM   zModuleType | None)rM   zlist[dict[str, str]])rM   r   )rM   r#   )__name__
__module____qualname____doc__r   r   r   r   r   r   r   r&   rB   r   r;   r<   r4   r   r   r   r      s     C"'   Q Q # #    * * * *r   r   )rR   
__future__r   r!   	functoolsr   typingr   deprecationsr   env.envr   
exceptionsr	   models.versionr
   typesr   r   moduleconstantr   r4   r   r   <module>r]      sw     " 	 %   &   6 0 & 
  && ! 
  FF$6 > FFb* b* b*r   