o
    g                     @  s   d Z ddlmZ ddlmZ ddlmZ ddlZddlZddlZ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 G dd dZdS )zsupport routines for the helpers in tools/.

These aren't imported by the enclosing util package as the are not
needed for normal library use.

    )annotations)ArgumentParser)	NamespaceN)Path)Any)Dict)Iterator)Optional)Union   )compatc                   @  s   e Zd ZU ded< ded< ded< ded< ded	< ded
< d1ddZd2ddZd2ddZd3ddZd4ddZd5d d!Z	d6d"d#Z
d$d$d%d7d)d*Zejd8d,d-Zejd9d/d0Zd$S ):code_writer_cmdr   parserr   argsboolsuppress_outputdiffs_detectedr   source_rootpyproject_toml_pathtool_scriptstrc                 C  s^   t |jj| _| jt d | _| j sJ t | _| jjdddd | jjddddd	 d S )
Nzpyproject.tomlz--stdout
store_truez)Write to stdout instead of saving to file)actionhelp-cz--checkzDon't write the files back, just return the status. Return code 0 means nothing would change. Return code 1 means some files would be reformatted)r   r   )r   parentr   r   existsr   r   add_argument)selfr    r   V/var/www/html/api-tag/env/lib/python3.10/site-packages/sqlalchemy/util/tool_support.py__init__+   s   
zcode_writer_cmd.__init__tempfilereturnNonec                 C  "   |  t|dd| j d d S )Nzimportsz--toml-config 
entrypointoptions_run_console_scriptr   r   r   r"   r   r   r    run_zimports?      
zcode_writer_cmd.run_zimportsc                 C  r%   )Nblackz	--config r'   r*   r,   r   r   r    	run_blackH   r.   zcode_writer_cmd.run_blackpathr)   Dict[str, Any]c           
      C  s   t jdk}|d }tdD ]}|j|kr|} nqtd| |dd}tj||d|g }i }	| jr?t	j
 |	d< |	d	< t	jtjd
d|j|j|jf g| fdt| ji|	 dS )zeRun a Python console application from within the process.

        Used for black, zimports

        posixr(   console_scriptsz*Could not find entrypoint console_scripts.r)    )r3   stdoutstderrr   zimport %s; %s.%s()cwdN)osnamer   importlib_metadata_get	Exceptiongetshlexsplitr   
subprocessDEVNULLrunsys
executablemoduleattrr   r   )
r   r1   r)   is_posixentrypoint_nameentryimplcmdline_options_strcmdline_options_listkwr   r   r    r+   Q   s>   


z#code_writer_cmd._run_console_scripttextc                 G  s    | j stjd| d S d S )N )r   rC   r7   writejoin)r   rN   r   r   r    write_statusx   s   zcode_writer_cmd.write_statusdestination_pathUnion[str, Path]c                 C  sb   | j jr| j||d d S | j jrt| d S | d| d t|j|ddd | d d S )N)sourceWriting ...utf-8
)encodingnewlinedone
)r   check	_run_diffr6   printrR   r   
write_text)r   rN   rS   r   r   r    write_output_file_from_text|   s   z+code_writer_cmd.write_output_file_from_textc                 C  s   | j jr| j||d t| d S | j jr7t|}t|  W d    n1 s+w   Y  t| d S | 	d| d t
|| | 	d d S )N)source_filerV   rW   r\   )r   r]   r^   r9   unlinkr6   openr_   readrR   shutilmove)r   r"   rS   tfr   r   r    write_output_file_from_tempfile   s   
z/code_writer_cmd.write_output_file_from_tempfileN)rU   rb   rU   Optional[str]rb   c          	   	   C  s   |rt |dd}t|}W d    n1 sw   Y  n|d ur(|jdd}nJ dt |dd2}tjt||t| ddd	d
}t|}|r\d| _td	| W d    d S W d    d S 1 sgw   Y  d S )NrX   )rZ   T)keependsFz!source or source_file is requiredz<proposed changes>   rY   )fromfiletofilenlinetermr5   )
rd   list
splitlinesdifflibunified_diffr   as_posixr   r_   rQ   )	r   rS   rU   rb   rh   source_linesdpd	d_as_listr   r   r    r^      s0   


"zcode_writer_cmd._run_diffIterator[ArgumentParser]c                 c  s    | j V  d S )N)r   r   r   r   r    add_arguments   s   zcode_writer_cmd.add_argumentsIterator[None]c                 c  sj    | j  | _| jjrd| _d| _n| jjrd| _nd| _d V  | jjr.| jr.td d S td d S )NFTr   r   )	r   
parse_argsr   r]   r   r   r6   rC   exitr{   r   r   r    run_program   s   zcode_writer_cmd.run_program)r   r   )r"   r   r#   r$   )r1   r   r)   r2   r#   r$   )rN   r   r#   r$   )rN   r   rS   rT   r#   r$   )r"   r   rS   r   r#   r$   )rS   rT   rU   rj   rb   rj   r#   r$   )r#   rz   )r#   r}   )__name__
__module____qualname____annotations__r!   r-   r0   r+   rR   ra   ri   r^   
contextlibcontextmanagerr|   r   r   r   r   r    r   #   s*   
 


	
	
'

r   )__doc__
__future__r   argparser   r   r   rs   r9   pathlibr   r>   rf   r@   rC   typingr   r   r   r	   r
   r5   r   r   r   r   r   r    <module>   s&   