o
     Zh                     @  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   S/var/www/html/lang_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 )NZ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(    )r2   stdoutstderrr   zimport %s; %s.%s()cwdN)osnamer   Zimportlib_metadata_get	Exceptiongetshlexsplitr   
subprocessDEVNULLrunsys
executablemoduleattrr   r   )
r   r0   r(   Zis_posixZentrypoint_nameentryimplZcmdline_options_strZ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   rA   r6   writejoin)r   rH   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_diffr5   printrL   r   
write_text)r   rH   rM   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_filerP   rQ   rV   )r   rW   rX   r8   unlinkr5   openrY   readrL   shutilmove)r   r"   rM   tfr   r   r    write_output_file_from_tempfile   s   
z/code_writer_cmd.write_output_file_from_tempfileN)rO   r\   rO   Optional[str]r\   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 )NrR   )rT   T)keependsFz!source or source_file is requiredz<proposed changes>   rS   )fromfiletofilenZlinetermr4   )
r^   list
splitlinesdifflibZunified_diffr   as_posixr   rY   rK   )	r   rM   rO   r\   rb   Zsource_linesZdpdZ	d_as_listr   r   r    rX      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   rW   r   r   r5   rA   exitrp   r   r   r    run_program   s   zcode_writer_cmd.run_program)r   r   )r"   r   r#   r$   )r0   r   r(   r1   r#   r$   )rH   r   r#   r$   )rH   r   rM   rN   r#   r$   )r"   r   rM   r   r#   r$   )rM   rN   rO   rd   r\   rd   r#   r$   )r#   ro   )r#   rr   )__name__
__module____qualname____annotations__r!   r,   r/   r*   rL   r[   rc   rX   
contextlibcontextmanagerrq   ru   r   r   r   r    r   #   s*   
 


	
	
'

r   )__doc__
__future__r   argparser   r   rz   rl   r8   pathlibr   r<   r`   r>   rA   typingr   r   r   r	   r
   r4   r   r   r   r   r   r    <module>   s&   