B
    nb\E                 @   sZ   d Z ddlZddlmZ G dd deZg adddZd	d
 Ztej	fddZ
dd ZdS )z+Module checking Spyder runtime dependencies    N)programsc               @   s:   e Zd ZdZdZdZdddZdd	 Zd
d Zdd Z	dS )
DependencyzSpyder's dependency

    version may starts with =, >=, > or < to specify the exact requirement ;
    multiple conditions may be separated by ';' (e.g. '>=0.13;<1.0')OKNOKNFc             C   sP   || _ || _|| _|| _|d krFyt|| _W qL   d | _Y qLX n|| _d S )N)modnamefeaturesrequired_versionoptionalr   Zget_module_versioninstalled_version)selfr   r   r   r
   r	    r   2lib/python3.7/site-packages/spyder/dependencies.py__init__   s    zDependency.__init__c             C   s   t | j| j| jS )z Check if dependency is installed)r   Zis_module_installedr   r   r
   )r   r   r   r   check*   s    zDependency.checkc             C   s,   |   rd| j| jf S d| j| jf S dS )z!Return dependency status (string)z%s (%s)N)r   r
   r   r   )r   r   r   r   get_installed_version0   s    z Dependency.get_installed_versionc             C   s   |   r| jS | jS dS )z!Return dependency status (string)N)r   r   r   )r   r   r   r   
get_status7   s    zDependency.get_status)NF)
__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   r   r   r      s   
r   Fc             C   s>   x"t D ]}|j| krtd|  qW t t| ||||g7 a dS )zAdd Spyder dependencyz*Dependency has already been registered: %sN)DEPENDENCIESr   
ValueErrorr   )r   r   r   r
   r	   
dependencyr   r   r   addB   s    


r   c             C   s0   x*t D ]}|j| kr| S qW td|  dS )z)Check if required dependency is installedzUnkwown dependency %sN)r   r   r   RuntimeError)r   r   r   r   r   r   N   s    

r   c       	      C   s   d}g }g }xH| D ]@}|j }|d|j 7 }|| t|t|g}||  qW d}x6tt| D ]&}||| |d ||  | 7 }qhW |dd S )zReturn a status of dependenciesr     z:  N)r   r   appendmaxlenr   rangeljust)	depslinesepZmaxwidthZcol1Zcol2r   Ztitle1textindexr   r   r   statusW   s    

&r'   c              C   sB   g } x$t D ]}| s
|js
| | q
W | r:t| ddS dS dS )z2Return the status of missing dependencies (if any)z<br>)r#   r$   r   N)r   r   r	   r   r'   )Zmissing_depsr   r   r   r   missing_dependenciesh   s    
r(   )NF)r   osZspyder.utilsr   objectr   r   r   r   r$   r'   r(   r   r   r   r   <module>   s   / 
	