
    wBf                    2   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 ddlmZ ddlmZ ddlmZmZ e	rddlZ ee      ZdZdZ edd      dd       ZddZddZddZ edd      dd d       Z d dZ!d dZ"d dZ#ed        Z$y)!z0Backend logic implementation for `conda doctor`.    )annotationsN)	getLogger)Path)TYPE_CHECKING   )context)get_user_environments_txt_file)
deprecated)
CondaError)compute_sum   )CondaHealthCheckhookimplu   ✅u   ❌z24.3z24.9c                4    t        dt        |        d       y)zDisplays our report heading.Environment Health Report for: 
N)printr   )prefixs    Nlib/python3.12/site-packages/conda/plugins/subcommands/doctor/health_checks.pydisplay_report_headingr      s     
+DL>
<=    c                V   t        |       } t        t                     }dd}	 |j                         j                         D ])  }|j	                         }|s || t        |            s) y 	 y# t
        t        t        f$ r$}t        j                  | d|        Y d}~yd}~ww xY w)zEChecks whether the environment is listed in the environments.txt filec                N    	 | j                  |      S # t        $ r | |k(  cY S w xY w)N)samefileFileNotFoundError)path1path2s     r   r   z%check_envs_txt_file.<locals>.samefile'   s/    	">>%((  	"E>!	"s    $$Tz7 could not be accessed because of the following error: NF)r   r   r   r   returnbool)
r   r	   	read_text
splitlinesstripIsADirectoryErrorr   PermissionErrorloggererror)r   envs_txt_filer   linestripped_lineerrs         r   check_envs_txt_filer+   "   s    &\F79:M"	
!++-88: 	D JJLM&$}2E!F	  0/B 
o 88;u>	
 	
 
s)   3A0 A0 +A0 -A0 0B(B##B(c                @   i }t        |       } | dz  j                  d      D ]y  }t        j                  |j	                               j                  dg       D ]A  }| |z  j                         r|j                  |j                  g       j                  |       C { |S )z=Finds packages listed in conda-meta which have missing files.
conda-meta*.jsonfiles)
r   globjsonloadsr    getexists
setdefaultstemappend)r   packages_with_missing_filesfile	file_names       r    find_packages_with_missing_filesr;   ;   s    "$&\F,&,,X6 XDNN$4599'2F 	XIY&..0+66tyy"ELLYW	XX
 '&r   c           
        i }t        |       } | dz  j                  d      D ]  }	 t        j                  |j	                               }	 |d   }|d   }|j                  d	      d
k7  rG|D ]}  }|j                  d      }|j                  d      }	||	*| |z  }
|
j                         s@	 t        |
d      }|	|k7  sS|j                  |j                  g       j!                  |         |S # t
        $ r&}t        j                  d| d| d       Y d}~d}~ww xY w# t        $ r Y w xY w# t        $ r}t        d|
 d| d      d}~ww xY w)zFinds altered packagesr-   r.   zCould not load the json file z! because of the following error: .N
paths_datapathspaths_version   _pathsha256_in_prefixsha256z%Could not generate checksum for file )r   r0   r1   r2   r    	Exceptionr%   r&   KeyErrorr3   is_filer   OSErrorr   r5   r6   r7   )r   altered_packagesr9   metadataexcr>   r?   pathrB   
old_sha256file_location
new_sha256r*   s                r   find_altered_packagesrP   G   s   &\F,&,,X6 %I	zz$.."23H	!,/Jw'E >>/*a/ 	IDHHW%E"45J}
 2"UNM ((*(A
 Z' ++DIIr:AA%H'	I%%IN I  	LL/v5VWZV[[\] 		  		$   ;M? K77:e1> sA   #C/

D!,D1/	D8DD!	D.-D.1	E:EEc                b    t        d|  d       t        j                  j                  | |       y)zPrints health report.r   r   N)r   r   plugin_managerinvoke_health_checks)r   verboses     r   display_health_checksrU   v   s,     
+F82
67//@r   c           	     
   t        d       t        |       }|rY|j                         D ]E  \  }}|r$d}t        | d| |j                  |              ,t        | dt	        |       d       G y t        t
         d       y )NzMissing Files:

  :: r   z+ There are no packages with missing files.
)r   r;   itemsjoinlenOK_MARK)r   rT   missing_filespackage_name	delimiters        r   r^   r^   }   s    	
4V<M+8+>+>+@ 	A'L-"	a	{9>>-3P2QRSb]);(<B?@	A 		EFGr   c           	        t        d       t        |       }|rZ|j                         D ]F  \  }}|r%d}t        | d| |j                  |       d       -t        | dt	        |       d       H y t        t
         d       y )NzAltered Files:
rW   rX   r   rY   z+ There are no packages with altered files.
)r   rP   rZ   r[   r\   r]   )r   rT   rI   r_   altered_filesr`   s         r   rb   rb      s    	
,V4+;+A+A+C 	A'L-"	a	{9>>-3P2QQSTUb]);(<B?@	A 		EFGr   c                P    t        |       rt        nt        }t        d| d       y )Nz-Environment listed in environments.txt file: r   )r+   r]   X_MARKr   )r   rT   presents      r   env_txt_checkrf      s"    ,V4g&G	9'"
EFr   c               #  ~   K   t        dt               t        dt               t        dt               y w)NzMissing Files)nameactionzAltered FileszEnvironment.txt File Check)r   r^   rb   rf    r   r   conda_health_checksrk      s.     

FF

FF
 <]
SSs   ;=)r   strr   None)r   zstr | os.PathLike | Pathr   r   )r   z
str | Pathr   zdict[str, list[str]])F)r   rl   rT   r   r   rm   )%__doc__
__future__r   r1   loggingr   pathlibr   typingr   base.contextr   core.envs_managerr	   deprecationsr
   
exceptionsr   gateways.disk.readr    r   r   os__name__r%   r]   rd   r   r+   r;   rP   rU   r^   rb   rf   rk   rj   r   r   <module>r{      s    7 "      $ @ ' % . *	8	
	 FF> >
2	',^ FFA AHHG
 
T 
Tr   