o
    Ưh                     @   s   d Z ddlZddlZddlmZ ddlmZmZ ddlm	Z	m
Z
mZ dee defdd	Zdee dee fd
dZ					ddededededeee  defddZdS )zDefines a git hook to allow pre-commit warnings and errors about import order.

usage:
    exit_code = git_hook(strict=True|False, modify=True|False)
    N)Path)ListOptional)Configapi
exceptionscommandreturnc                 C   s   t j| t jdd}|j S )zRun a command and return raw output

    :param str command: the command to run
    :returns: the stdout output of the command
    T)stdoutcheck)
subprocessrunPIPEr
   decode)r   result r   H/var/www/Befach/backend/venv/lib/python3.10/site-packages/isort/hooks.py
get_output   s   
r   c                 C   s   t | }dd | D S )zRun a command and return lines of output

    :param str command: the command to run
    :returns: list of whitespace-stripped lines output by command
    c                 S   s   g | ]}|  qS r   )strip).0liner   r   r   
<listcomp>    s    zget_lines.<locals>.<listcomp>)r   
splitlines)r   r
   r   r   r   	get_lines   s   r   F strictmodifylazysettings_filedirectoriesc              	   C   s   g d}|r| d |r|| t|}|sdS d}t|tjtj|d d}|D ]7}	|	dreddd|	 g}
t	|
}zt
j|t|	|d	sY|d
7 }|rYt
j|	|d W q. tjyd   Y q.w q.| rj|S dS )a;  Git pre-commit hook to check staged files for isort errors

    :param bool strict - if True, return number of errors on exit,
        causing the hook to fail. If False, return zero so it will
        just act as a warning.
    :param bool modify - if True, fix the sources if they are not
        sorted properly. If False, only report result without
        modifying anything.
    :param bool lazy - if True, also check/fix unstaged files.
        This is useful if you frequently use ``git commit -a`` for example.
        If False, only check/fix the staged files for isort errors.
    :param str settings_file - A path to a file to be used as
                               the configuration file for this run.
        When settings_file is the empty string, the configuration file
        will be searched starting at the directory containing the first
        staged file, if any, and going upward in the directory structure.
    :param list[str] directories - A list of directories to restrict the hook to.

    :return number of errors if in strict mode, 0 otherwise.
    )gitz
diff-index--cachedz--name-onlyz--diff-filter=ACMRTUXBHEADr!   r   )r   settings_pathz.pyr    show:)	file_pathconfig   )r'   )removeextendr   r   ospathdirnameabspathendswithr   r   check_code_stringr   	sort_filer   FileSkipped)r   r   r   r   r   diff_cmdfiles_modifiederrorsr'   filename
staged_cmdstaged_contentsr   r   r   git_hook#   s<   



r9   )FFFr   N)__doc__r+   r   pathlibr   typingr   r   isortr   r   r   strr   r   boolintr9   r   r   r   r   <module>   s4    

