U
    ڲg|                     @   s0   d Z ddlmZ ddlmZ dd Zdd ZdS )	zSQL formatter    )filters)SQLParseErrorc              	   C   s  |  d}|dkr td||  d}|dkr@td||  d}|dkr`td||  d	d
}|dkrtd||  dd
}|dkrtd||  dd
}|dkrtd||  d}|dk	r@zt|}W n( ttfk
r   td|Y nX |dkr(td||| d< |  dd| d< |  dd
}|dkrftd|n|rtd| d< || d< |  dd
}	|	dkrtd|	n|	rd| d< |  dd
}
|
dkrtd|	n|
rd| d< |  dd
}|dkrtd||| d< |  d d
}|dkr6td!|n|rFd"| d#< nd$| d#< |  d%d&}zt|}W n" ttfk
r   td'Y nX |dk rtd(|| d%< |  d)d*}zt|}W n" ttfk
r   td+Y nX |d*k rtd,|| d)< |  d-d
}|dkrtd.|| d-< |  d/d
}|dkr>td0|| d/< |  d1}|dk	rzt|}W n" ttfk
r   td2Y nX |d3k rtd4|| d1< | S )5zValidates options.keyword_case)Nupperlower
capitalizez$Invalid value for keyword_case: {!r}identifier_casez'Invalid value for identifier_case: {!r}output_format)NZsqlpythonphpzUnknown output format: {!r}strip_commentsF)TFz&Invalid value for strip_comments: {!r}use_space_around_operatorsz2Invalid value for use_space_around_operators: {!r}strip_whitespacez(Invalid value for strip_whitespace: {!r}truncate_stringsNz(Invalid value for truncate_strings: {!r}   truncate_charz[...]indent_columnsz&Invalid value for indent_columns: {!r}Treindentz Invalid value for reindent: {!r}reindent_alignedz(Invalid value for reindent_aligned: {!r}indent_after_firstz*Invalid value for indent_after_first: {!r}indent_tabsz#Invalid value for indent_tabs: {!r}	indent_char indent_width   z indent_width requires an integerz(indent_width requires a positive integer
wrap_afterr   zwrap_after requires an integerz&wrap_after requires a positive integercomma_firstz$comma_first requires a boolean valuecompactz compact requires a boolean valueright_marginz right_margin requires an integer
   z%right_margin requires an integer > 10)getr   formatint
ValueError	TypeError)optionsZkwcaseZidcaseZofrmtr   Zspace_around_operatorsZstrip_wsr   r   r   r   r   r   r   r   r   r   r    r'   6/tmp/pip-unpacked-wheel-4xfyt83m/sqlparse/formatter.pyvalidate_options   s    


















r)   c                 C   s  | dr | jt|d  | dr@| jt|d  | drh| jtj|d |d d | ddr|   | jt	  | dr|   | jt
  | d	s| d
r|   | jt  | d
r*|   | jtj|d |d |d |d |d |d |d d | ddrX|   | jtj|d d | dr|   | jtj|d d | dr|d }| dkrt }n| dkrt }nd}|dk	r| j| | S )zSetup and return a filter stack.

    Args:
      stack: :class:`~sqlparse.filters.FilterStack` instance
      options: Dictionary with options validated by validate_options.
    r   r   r   r   )widthcharr   Fr   r   r   r   r   r   r   r   r   r   )r+   r*   r   r   r   r   r   r   )r+   r   )r*   r	   r   r
   N)r!   
preprocessappendr   ZKeywordCaseFilterZIdentifierCaseFilterZTruncateStringFilterZenable_groupingZstmtprocessZSpacesAroundOperatorsFilterZStripCommentsFilterZStripWhitespaceFilterZReindentFilterZAlignedIndentFilterZRightMarginFilterr   ZOutputPHPFilterZOutputPythonFilterpostprocess)stackr&   ZfrmtZfltrr'   r'   r(   build_filter_stack   sn    



 




r0   N)__doc__Zsqlparser   Zsqlparse.exceptionsr   r)   r0   r'   r'   r'   r(   <module>   s   {