o
    i                     @   s   d dl Z d dlZd dlmZ d dlmZ d dlZd dlmZm	Z	 ddl
mZ ddlmZmZmZmZmZmZ dd	lmZ ed
dd Zddd
Zddedeeef fddZdedefddZdS )    N)Path)Tuple)Printermsg   )about)get_installed_modelsget_minor_versionget_model_metaget_package_pathget_package_versionis_compatible_version   )appvalidatec                   C   s
   t   dS )a  
    Validate the currently installed pipeline packages and spaCy version. Checks
    if the installed packages are compatible and shows upgrade instructions if
    available. Should be run after `pip install -U spacy`.

    DOCS: https://spacy.io/api/cli#validate
    N)r    r   r   F/home/ubuntu/.local/lib/python3.10/site-packages/spacy/cli/validate.pyvalidate_cli   s   
	r   returnc                     s  t  \} }ttj}||i std| d dd |  D }fdd|D }fdd|D }tt	j
j
}tdtj d	 td
|  | rd}g }|  D ]A\}	}
|
d rttjddddd}tj|
d ddd}ntj|
d ddd}d|
d dgd  }||
d |
d ||f qXtj||d ntjddd |rtd td d td  fd!d|D d   |rtd"tj d#d$| |rtd% d S d S )&Nz"No compatible packages found for vz	 of spaCyc                 S   s    h | ]\}}|d  s|d qS )compatnamer   ).0_dr   r   r   	<setcomp>'   s     zvalidate.<locals>.<setcomp>c                    s   g | ]}| vr|qS r   r   r   mcurrent_compatr   r   
<listcomp>(       zvalidate.<locals>.<listcomp>c                    s   g | ]}| v r|qS r   r   r   r   r   r   r   )   r    z$Installed pipeline packages (spaCy v)zspaCy installation: )NAMESPACYVERSION r   r%   greengoodT)coloriconno_printversion)r(   r*   yellowz--> r   n/ar   spacy)headerz7No pipeline packages found in your current environment.exitszInstall updatesz2Use the following commands to update the packages:zpython -m spacy download {}
c                    s   g | ]}  |qS r   )format)r   pkg)cmdr   r   r   A   s    zNThe following packages are custom spaCy pipelines or not available for spaCy v:z, r   )get_model_pkgsr	   r   __version__getr   warnitemsr   __file__parentdividerinfotextappendtableprintjoinsysexit)
model_pkgsr   spacy_versionincompat_models	na_modelsupdate_models	spacy_dirr/   rowsr   datacompr+   r   )r5   r   r   r   !   sL   



 Fsilentc              	   C   s  t | |  d}|d  ttj}|jdkr%|jd|j dddd W d    n1 s/w   Y  |d	 |	 d
 }t
 }t  tjddd t }W d    n1 s[w   Y  t| D ]\}}||  | D ]\}}	dd |	D || |< quqfi }
|D ]R}|dd}t|}||v r||| v }tj}n/t|}t  tjddd t|}W d    n1 sw   Y  |dd}ttj|}||||d|
|< q|
|fS )N)r*   prettyzLoading compatibility table...   zServer error (r!   z#Couldn't fetch compatibility table.r   r0   zLoaded compatibility tabler.   ignorez	\[W09[45])messagec                 S   s   g | ]}t |qS r   )reformat_version)r   vr   r   r   r   _   s    z"get_model_pkgs.<locals>.<listcomp>-r   rH   r-   )r   r+   r.   r   )r   loadingrequestsr9   r   __compatibility__status_codefailr'   jsonsetwarningscatch_warningsfilterwarningsr   dictr;   updatekeysreplacer   r8   r   r
   r   )rP   r   rr   
all_modelsinstalled_modelsspacy_vmodelsmodelmodel_vspkgspkg_namepackager+   	is_compatrH   
model_path
model_metar   r   r   r7   L   sV   




r7   r+   c                 C   s"   |  dr| ddS | ddS )zEHack to reformat old versions ending on '-alpha' to match pip format.z-alphaa0a)endswithre   )r+   r   r   r   rU   w   s   
rU   )r   N)F)rE   r_   pathlibr   typingr   rY   wasabir   r   r%   r   utilr   r	   r
   r   r   r   _utilr   commandr   r   boolrb   r7   strrU   r   r   r   r   <module>   s     

++