B
    '\                 @   sz   d dl Z d dlmZ ddlmZ ddlmZ yd dlmZ d dl	m
Z
 W n ek
r`   dZ
Y nX dZG d	d
 d
eZdS )    N)normalized_version   )env)EnvironmentFileNotDownloaded)errors)get_server_apir   c               @   s   e Zd ZdZdZdZdZdZdZdZ	dd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d Zedd Zdd ZdS )BinstarSpecz
    spec = BinstarSpec('darth/deathstar')
    spec.can_handle() # => True / False
    spec.environment # => YAML string
    spec.msg # => Error messages
    :raises: EnvironmentFileDoesNotExist, EnvironmentFileNotDownloaded
    Nc             K   s(   || _ d| _td k	rt | _nd | _d S )NF)namequietr   binstar)selfr	   kwargs r   6lib/python3.7/site-packages/conda_env/specs/binstar.py__init__$   s
    
zBinstarSpec.__init__c             C   s   |   }|S )N)_can_handle)r   resultr   r   r   
can_handle,   s    zBinstarSpec.can_handlec             C   s2   |   r.| jdkrd| _dS | jdk	o,|  S dS )ze
        Validates loader can process environment definition.
        :return: True or False
        NzyAnaconda Client is required to interact with anaconda.org or an Anaconda API. Please run `conda install anaconda-client`.F)
valid_namer   msgpackagevalid_package)r   r   r   r   r   0   s    
zBinstarSpec._can_handlec             C   s6   t dt| jdk	rdS | jdkr,d| _nd| _dS )z?
        Validates name
        :return: True or False
        z^(.+)/(.+)$NTzCan't process without a namez*Invalid name, try the format: user/packageF)rematchstrr	   r   )r   r   r   r   r   ?   s    
zBinstarSpec.valid_namec             C   s   t | jdkS )z`
        Returns True if package has an environment file
        :return: True or False
        r   )len	file_data)r   r   r   r   r   L   s    zBinstarSpec.valid_packagec             C   s&   | j d kr dd | jd D | _ | j S )Nc             S   s   g | ]}|d  t kr|qS )type)ENVIRONMENT_TYPE).0datar   r   r   
<listcomp>V   s   z)BinstarSpec.file_data.<locals>.<listcomp>files)
_file_datar   )r   r   r   r   r   S   s    
zBinstarSpec.file_datac                s   | j dkrdd | jD }t|dd dd   fdd| jd	 D }| j| j| j |d
 d }|dkrzt| j| j|j	| _ t
| j S )z7
        :raises: EnvironmentFileNotDownloaded
        Nc             S   s"   g | ]}t |d  |d  dqS )version)
normalizedoriginal)r   )r   dr   r   r   r!   a   s   z+BinstarSpec.environment.<locals>.<listcomp>c             S   s   | d S )Nr%   r   )xr   r   r   <lambda>c       z)BinstarSpec.environment.<locals>.<lambda>)keyr&   c                s   g | ]}|d   kr|qS )r$   r   )r   r    )latest_versionr   r   r!   d   s   r"   r   basename)_environmentr   maxr   r   Zdownloadusernamepackagenamer   textr   Z	from_yaml)r   Zversionsr   Zreqr   )r,   r   environment[   s    


zBinstarSpec.environmentc             C   sN   | j d krHy| j| j| j| _ W n$ tjk
rF   d| j| _	Y nX | j S )Nz_{} was not found on anaconda.org.
You may need to be logged in. Try running:
    anaconda login)
_packager   r   r0   r1   r   ZNotFoundformatr	   r   )r   r   r   r   r   n   s    
zBinstarSpec.packagec             C   s   | j d kr|  d | _ | j S )Nr   )	_usernameparse)r   r   r   r   r0   y   s    
zBinstarSpec.usernamec             C   s   | j d kr|  d | _ | j S )N   )_packagenamer7   )r   r   r   r   r1      s    
zBinstarSpec.packagenamec             C   s   | j ddS )z#Parse environment definition handle/r8   )r	   split)r   r   r   r   r7      s    zBinstarSpec.parse)N)__name__
__module____qualname____doc__r.   r6   r9   r4   r#   r   r   r   r   r   r   propertyr   r3   r   r0   r1   r7   r   r   r   r   r      s$   
r   )r   Zconda.models.versionr    r   
exceptionsr   Zbinstar_clientr   Zbinstar_client.utilsr   ImportErrorr   objectr   r   r   r   r   <module>   s   
