o
    Wi                     @  s|  d dl mZ d dlZd dlZd dl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 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ZejZejd=ddZ d>ddZ!d?ddZ"d@ddZ#dAd"d#Z$dBd$d%Z%dCd&d'Z&ej'd(d)dBd*d+Z(dDd-d.Z)dAd/d0Z*ej+dEd4d5Z,dFd6d7Z-dGd;d<Z.dS )H    )annotationsN)	Generator)Sequence)	lang_base)
envcontext)PatchesT)UNSET)Var)find_executable)Prefix)CalledProcessError)
cmd_output)cmd_output_b)win_exepy_envexestrreturnc                 C  s<   d}zt | dd|d  W S  ty   d|  d Y S w )Nz<import sys;print(".".join(str(p) for p in sys.version_info))z-S-c   z <<error retrieving version from z>>)r   stripr   )r   prog r   O/home/ubuntu/.local/lib/python3.10/site-packages/pre_commit/languages/python.py_version_info   s   r   filenamedict[str, str]c              
   C  sv   i }t | dd)}|D ]}z	|d\}}W n	 ty   Y qw | || < qW d    |S 1 s4w   Y  |S )NUTF-8)encoding=)opensplit
ValueErrorr   )r   retflinekvr   r   r   _read_pyvenv_cfg$   s   
r(   venvc                 C  s    t jdkrdnd}tj| |S )z;On windows there's a different directory for the virtualenvwin32Scriptsbin)sysplatformospathjoin)r)   bin_partr   r   r   bin_dir1   s   r3   r   c                 C  s(   ddt fd| fdt| tjtdfffS )N)PIP_DISABLE_PIP_VERSION_CHECK1
PYTHONHOMEVIRTUAL_ENVPATH)r   r3   r/   pathsepr	   )r)   r   r   r   get_env_patch7   s
   r:   version
str | Nonec                 C  sf   |  dr1| d}dd| ddf}ttjdd}zt|d|id	  W S  ty0   Y d S w d S )
Npythonpy-r   z!import sys; print(sys.executable)r   )PYTHONIOENCODINGenvr   )
startswithremoveprefixdictr/   environr   r   r   )r;   numcmdrA   r   r   r   _find_by_py_launcher@   s   

rH   c                   C  s   t jjdkrdS t jjS )Ncpythonr=   )r-   implementationnamer   r   r   r   _impl_exe_nameN   s   rL   c                  C  s<   ddd} t jtjt jfD ]}| |}|r|  S qd S )Nr0   r   r   r<   c                 S  s<   t j|  \}}|d\}}}|dvrt|r|S d S )Nz.exe>   r=   pythonw)r/   r0   r!   lower	partitionr
   )r0   _r   r   r   r   _normV   s
   z&_find_by_sys_executable.<locals>._norm)r0   r   r   r<   )r-   
executabler/   r0   realpath)rQ   r0   r   r   r   r   _find_by_sys_executableU   s   
rT   r   )maxsizec                  C  s   t jd  } t jd  dt jd  }|| fD ]}t  | }t|r(|  S qt }|r0|S t jdkr@d| }t|r@|S tjS )Nr   .r   r*   r=   )	r-   version_inforL   r
   rT   r.   rH   CDEFAULT)v_majorv_minor	potentialr   	maybe_exer   r   r   get_default_versionl   s   

r^   boolc                 C  sh   | dkrdS |  dsdS ztdd | ddD }W n
 ty(   Y dS w tjd t| |kS )Nr=   TFc                 s  s    | ]}t |V  qd S N)int).0pr   r   r   	<genexpr>   s    z*_sys_executable_matches.<locals>.<genexpr>rV   )rB   tuplerC   r!   r"   r-   rW   len)r;   infor   r   r   _sys_executable_matches   s   
"rh   c                 C  sX   | t jkrd S t| rd S tjdkr&t| }|r|S t| }|r&|| kr&|S tj	| S )Nr*   )
rX   rY   rh   r-   r.   rH   r
   r/   r0   
expanduser)r;   version_execr   r   r   norm_version   s   

rk   prefixr   Generator[None]c                 c  sH    t | t|}tt| d V  W d    d S 1 sw   Y  d S r`   )r   environment_dirENVIRONMENT_DIRr   r:   )rl   r;   envdirr   r   r   in_env   s
   "rq   c           	      C  s   t | t|}tj|d}tj|sdS td}| t||}t	|}d|vr,dS t
|}||d krBd| d|d  dS d	|vrHd S t
|d	 }||d kr_d
| d|d  dS d S )Nz
pyvenv.cfgz+pyvenv.cfg does not exist (old virtualenv?)r=   rW   z9created virtualenv's pyvenv.cfg is missing `version_info`zKvirtualenv python version did not match created version:
- actual version: z
- expected version: 
zbase-executablezZbase executable python version does not match created version:
- base-executable version: )r   rn   ro   r/   r0   r1   existsr   r3   r(   r   __wrapped__)	rl   r;   rp   
pyvenv_cfgexe_namepy_execfgvirtualenv_versionbase_exe_versionr   r   r   health_check   s8   
r{   additional_dependenciesSequence[str]Nonec                 C  s   t | t|}tjd|g}t|}|d ur|d|f ddddg|R }t|ddi t| | t 	| | W d    d S 1 sCw   Y  d S )	Nz-mvirtualenvz-pr=   z-mpipinstallrV   cwd/)
r   rn   ro   r-   rR   rk   extendr   rq   	setup_cmd)rl   r;   r|   rp   venv_cmdr=   install_cmdr   r   r   install_environment   s   "r   )r   r   r   r   )r   r   r   r   )r)   r   r   r   )r)   r   r   r   )r;   r   r   r<   )r   r   )r   r<   )r;   r   r   r_   )rl   r   r;   r   r   rm   )rl   r   r;   r   r   r<   )rl   r   r;   r   r|   r}   r   r~   )/
__future__r   
contextlib	functoolsr/   r-   collections.abcr   r   pre_commit.constants	constantsrX   
pre_commitr   pre_commit.envcontextr   r   r   r	   pre_commit.parse_shebangr
   pre_commit.prefixr   pre_commit.utilr   r   r   r   ro   basic_run_hookrun_hookcacher   r(   r3   r:   rH   rL   rT   	lru_cacher^   rh   rk   contextmanagerrq   r{   r   r   r   r   r   <module>   sJ    



	





'