o
    6i                     @   sZ   d Z ddlZddlZddlmZ ddlZddlmZ dd Zdd Z	d	d
 Z
dddZdS )ae  Module that contains the command line app.

Why does this file exist, and why not put this in __main__?
  You might be tempted to import things from __main__ later, but that will
  cause problems: the code will get executed twice:
  - When you run `python -m sqlparse` python will execute
    ``__main__.py`` as a script. That means there won't be any
    ``sqlparse.__main__`` in ``sys.modules``.
  - When you import __main__ it will get executed again (as a module) because
    there's no ``sqlparse.__main__`` in ``sys.modules``.
  Also see (1) from http://click.pocoo.org/5/setuptools/#setuptools-integration
    N)TextIOWrapper)SQLParseErrorc                  C   s  g d} t jdddd}|jdddd	 |jd
ddddd |jdddddd |jddtjd |d}|jdddd| ddd d! | D d" |jd#d$dd%| d&dd'd! | D d" |jd(d)d*d+d,d-gd.d" |jd/d0ddd1d |jd2d3d4ddd5d |jd6d7d8td9d: |jd;d<ddd=d |jd>d?ddd@d |jdAdBdddCdD |jdEdFdddGdD |jdHdIdJtdKd: |jdLdMdt	dNd: |jdOdPdt	dQd: |jdRdSdTdUdV |S )WN)upperlower
capitalize	sqlformatzEFormat FILE according to OPTIONS. Use "-" as FILE to read from stdin.z"%(prog)s [OPTIONS] FILE [FILE ...])progdescriptionusagefilename+z%file(s) to format (use "-" for stdin))nargshelpz-oz	--outfileoutfileFILEz)write output to FILE (defaults to stdout))destmetavarr   z
--in-placeinplace
store_trueFz0format files in-place (overwrite existing files))r   actiondefaultr   z	--versionversion)r   r   zFormatting Optionsz-kz
--keywordsCHOICEkeyword_casez,change case of keywords, CHOICE is one of {}z, c                 s       | ]	}d | d V  qdS "N .0xr   r   Q/var/www/hoanhtaovolam_webdjango/env/lib/python3.10/site-packages/sqlparse/cli.py	<genexpr>G       z create_parser.<locals>.<genexpr>)r   r   choicesr   z-iz--identifiersidentifier_casez/change case of identifiers, CHOICE is one of {}c                 s   r   r   r   r   r   r   r!   r"   O   r#   z-lz
--languageLANGoutput_formatpythonphpzJoutput a snippet in programming language LANG, choices are "python", "php"z--strip-commentsstrip_commentszremove commentsz-rz
--reindentreindentzreindent statementsz--indent_widthindent_width   z(indentation width (defaults to 2 spaces))r   r   typer   z--indent_after_firstindent_after_firstz2indent after first line of statement (e.g. SELECT)z--indent_columnsindent_columnsz<indent all columns by indent_width instead of keyword lengthz-az--reindent_alignedz%reindent statements to aligned format)r   r   r   z-sz--use_space_around_operatorsz*place spaces around mathematical operatorsz--wrap_after
wrap_afterr   z*Column after which lists should be wrappedz--comma_firstcomma_firstz-Insert linebreak before comma (default False)z	--compactcompactz2Try to produce more compact output (default False)z
--encodingencodingzutf-8z*Specify the input encoding (default utf-8))r   r   r   )
argparseArgumentParseradd_argumentsqlparse__version__add_argument_groupformatjoinintbool)_CASE_CHOICESparsergroupr   r   r!   create_parser   s  
rB   c                 C   s   t jd|  d dS )z5Print msg and optionally exit with return code exit_.z[ERROR] 
   )sysstderrwrite)msgr   r   r!   _error   s   rI   c           
   
   C   s
  | dkr|j rtdS | dkr(ttjj|jd}z
| }W |  nB|  w z t	| |jd}d
| }W d   n1 sBw   Y  W n tyd } ztd|  d| W  Y d}~S d}~ww d}|j rzt	| d	|jd}d
}W nM ty } ztd|  d| W  Y d}~S d}~ww |jrzt	|jd	|jd}d
}W n  ty } ztd|j d| W  Y d}~S d}~ww tj}t|}ztj|}W n ty } ztd| W  Y d}~S d}~ww tj|fi |}	||	 |  |r|  dS )zdProcess a single file with the given formatting options.

    Returns 0 on success, 1 on error.
    -z Cannot use --in-place with stdin)r4    NzFailed to read z: FwTzFailed to open zInvalid options: r   )r   rI   r   rE   stdinbufferr4   readdetachopenr<   	readlinesOSErrorr   stdoutvarsr8   	formattervalidate_optionsr   r;   rG   flushclose)
r   argswrapperdatafeclose_streamstreamformatter_optssr   r   r!   _process_file   s^   
  "
rc   c                 C   sd   t  }|| } t| jdkr| jrtdS | jstdS d}| jD ]}t|| }|dkr/|}q"|S )NrD   z+Cannot use -o/--outfile with multiple filesz&Multiple files require --in-place flagr   )rB   
parse_argslenr   r   rI   r   rc   )rZ   r@   	exit_coder   resultr   r   r!   main   s   


rh   )N)__doc__r5   rE   ior   r8   sqlparse.exceptionsr   rB   rI   rc   rh   r   r   r   r!   <module>   s    	7