
    x
h                         d dl Z d dlZd dlmZmZ dZerd dlZ G d de      Z G d de      Z	 G d d	e      Z
 G d
 de      Z G d de      ZddZy)    N)lexyaccFc                       e Zd ZdZedz  Zedz  Zedz  ZdZdZdZdZd	Zd
ddZ	ddZ
d Zd Zd Zd Zd Zd Zd Zd Zd Zy)FilterExprLexer)IDLPARRPAR)ANDOR)NEQEQ)BOOLEANFLOATINTEGERNULLSTRINGz\(z\)!== r
   r   )andorc                 J    t        j                   | |      | _        g | _        y )N)moduledebug)r   lexererrorsselfr   s     V/var/www/html/lionshead-backend/venv/lib/python3.12/site-packages/stone/cli_helpers.py__init__zFilterExprLexer.__init__4   s    WWD6
    c                     | j                   S N)r   r   s    r   get_yacc_compat_lexerz%FilterExprLexer.get_yacc_compat_lexer8   s    zzr!   c                 .    |j                   dk(  |_         |S )z\btrue\b|\bfalse\btruevaluer   tokens     r   	t_BOOLEANzFilterExprLexer.t_BOOLEAN;   s    {{f,r!   c                     d|_         |S )z\bnull\bNr(   r*   s     r   t_NULLzFilterExprLexer.t_NULL@   s    r!   c                 :    t        |j                        |_        |S )z-?\d+(\.\d*(e-?\d+)?|e-?\d+))floatr)   r*   s     r   t_FLOATzFilterExprLexer.t_FLOATE   s    EKK(r!   c                 :    t        |j                        |_        |S )z-?\d+)intr)   r*   s     r   	t_INTEGERzFilterExprLexer.t_INTEGERJ   s    %++&r!   c                 .    |j                   dd |_         |S )z\"([^\\"]|(\\.))*\"   r(   r*   s     r   t_STRINGzFilterExprLexer.t_STRINGO   s    kk!B'r!   c                 v    |j                   | j                  v r | j                  |j                      |_        |S |S )z[a-zA-Z_][a-zA-Z0-9_-]*)r)   KEYWORDStyper*   s     r   t_IDzFilterExprLexer.t_IDT   s0    ;;$--'u{{3EJLLr!   c                     | j                   j                  dt        |j                  d         j	                  d      z         |j
                  j                  d       y )NzIllegal character %s.r   ur6   )r   appendreprr)   lstripr   skipr*   s     r   t_errorzFilterExprLexer.t_error]   sG    $tEKKN';'B'B3'GG	Jr!   c                     | j                   j                  |       	 | j                   j                         }|sy t        |       )r#   )r   inputr+   print)r   datatoks      r   testzFilterExprLexer.testc   s;    

**""$C#J	 r!   NF)__name__
__module____qualname__tokenst_LPARt_RPARt_NEQt_EQt_ignorer:   r    r%   r,   r.   r1   r4   r8   r<   rC   rI    r!   r   r   r      s    F   F   F   F FFEDH H





r!   r   c                   p    e Zd Zej                  Z ed      ZdZddZd Z	d Z
d Zd Zd Zd	 Zd
 Zd Zy)FilterExprParserexpr))leftr   )rX   r
   c                 z    || _         t        j                  | ||      | _        t        |      | _        g | _        y )N)r   r   write_tables)r   r   r   r   r   r   s     r   r    zFilterExprParser.__init__{   s0    
IITUK	$U+
r!   c                     | j                   j                  || j                  j                         | j                        }| j                  j
                  | j
                  z   | _        || j
                  fS )zF
        Args:
            data (str): Raw filter expression.
        )r   r   )r   parser   r%   r   r   )r   rG   parsed_datas      r   r\   zFilterExprParser.parse   s]    
 iioo

88:$** & Njj''$++5DKK''r!   c                     |d   |d<   y)zexpr : predr6   r   NrT   r   ps     r   p_exprzFilterExprParser.p_expr       t!r!   c                     |d   |d<   y)zexpr : LPAR expr RPAR   r   NrT   r_   s     r   p_expr_parenszFilterExprParser.p_expr_parens   rb   r!   c                 6    t        |d   |d   |d         |d<   y)z3expr : expr OR expr
                | expr AND exprrd   r6      r   N)FilterExprConjunctionr_   s     r   p_expr_groupzFilterExprParser.p_expr_group   s"     %QqT1Q416!r!   c                 6    t        |d   |d   |d         |d<   y)zpred : ID op primitiverd   r6   rg   r   N)FilterExprPredicater_   s     r   p_predzFilterExprParser.p_pred   s     "1Q41qt4!r!   c                     |d   |d<   y)zop : NEQ
              | EQr6   r   NrT   r_   s     r   p_opzFilterExprParser.p_op   s     t!r!   c                     |d   |d<   y)zprimitive : BOOLEAN
                     | FLOAT
                     | INTEGER
                     | NULL
                     | STRINGr6   r   NrT   r_   s     r   p_primitivezFilterExprParser.p_primitive   s     t!r!   c                     |rO| j                   j                  d|j                  dt        |j                        j                  d      d       y | j                   j                  d       y )NzUnexpected z with value r>   .zUnexpected end of expression.)r   r?   r;   r@   r)   rA   r*   s     r   p_errorzFilterExprParser.p_error   sN    KK**d5;;/66s;=? KK>?r!   NrJ   )rK   rL   rM   r   rN   strstart
precedencer    r\   ra   re   ri   rl   rn   rp   rs   rT   r!   r   rV   rV   l   sO     ##F KEJ
(7
5
@r!   rV   c                   H    e Zd Zej                  Zej                  d        Zy)
FilterExprc                      y r#   rT   r   routes     r   evalzFilterExpr.eval   s    r!   N)rK   rL   rM   abcABCMeta__metaclass__abstractmethodr|   rT   r!   r   rx   rx      s#    KKM r!   rx   c                       e Zd Zd Zd Zd Zy)rh   c                 .    || _         || _        || _        y r#   conjlhsrhs)r   r   r   r   s       r   r    zFilterExprConjunction.__init__   s    	r!   c                 "   | j                   dk(  r8| j                  j                  |      xr | j                  j                  |      S | j                   dk(  r8| j                  j                  |      xs | j                  j                  |      S J )Nr   r   )r   r   r|   r   rz   s     r   r|   zFilterExprConjunction.eval   si    9988=='@DHHMM%,@@YY$88=='?488==+??5r!   c                 V    d| j                   d| j                  d| j                  dS )Nz	EvalConj(, )r   r$   s    r   __repr__zFilterExprConjunction.__repr__   s    )-DHHdhhGGr!   NrK   rL   rM   r    r|   r   rT   r!   r   rh   rh      s    
Hr!   rh   c                       e Zd Zd Zd Zd Zy)rk   c                 .    || _         || _        || _        y r#   opr   r   )r   r   r   r   s       r   r    zFilterExprPredicate.__init__   s    r!   c                     |j                   j                  | j                  d       }| j                  dk(  r|| j                  k(  S | j                  dk(  r|| j                  k7  S J )Nr   r   )attrsgetr   r   r   )r   r{   vals      r   r|   zFilterExprPredicate.eval   sQ    kkoodhh-77c>$((?"WW_$((?"5r!   c                 V    d| j                   d| j                  d| j                  dS )Nz	EvalPred(r   r   r   r$   s    r   r   zFilterExprPredicate.__repr__   s    )-$((DHHEEr!   Nr   rT   r!   r   rk   rk      s    
Fr!   rk   c                     t        | t        j                        sJ t        |              t	        |      }|j                  |       S )z
    Args:
        route_attr_filter (str): The raw command-line input of the route
            filter.

    Returns:
        Tuple[FilterExpr, List[str]]: The second element is a list of errors.
    )
isinstancesix	text_typer;   rV   r\   )route_attr_filterr   parsers      r   parse_route_attr_filterr      s>     '7P>O9PP7e$F<<)**r!   rJ   )r}   r   plyr   r   _MYPYtypingobjectr   rV   rx   rh   rk   r   rT   r!   r   <module>r      sf    
 
 ^f ^BC@v C@L HF H&F& F(+r!   