
    2i                    $   d 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 dd	lmZmZ dd
lmZ ej"                  j$                  Zej(                  j$                  Zej,                  j$                  ZdZdZdZ G d d      ZdddZdddZy)z&
Template strings support in queries.
    )annotations)Any   )abc)errors)sql)PyFormat)InterpolationTemplate)Transformerilqc                  D    e Zd Zd	dZd
dZddZddZddZddZddZ	y)TemplateProcessorc               f    || _         || _        || _        d| _        g | _        g | _        g | _        y N    )template_tx_server_paramsqueryformatsparams_chunks)selfr   txserver_paramss       P/var/www/html/secretsanta/venv/lib/python3.12/site-packages/psycopg/_tstrings.py__init__zTemplateProcessor.__init__   s4     +
')!#$&r   c                z    | j                  | j                         dj                  | j                        | _        y r   )_process_templater   joinr   r   )r   s    r   processzTemplateProcessor.process'   s(    t}}-XXdll+
r   c                   |j                   |k(  ry |j                   rd|j                    nd}t        |j                        }|j                   d|j                   d| d}t        j                  | d|j                   | d      )N: .z require format ':'z; got '{}')format_spectypevalue
__module____qualname__eProgrammingError
expression)r   itemwant_fmtfmtclsmsgs         r   _check_template_formatz(TemplateProcessor._check_template_format+   s    x'(,(8(8$""#$b4:: #"2"2!33EhZqQ  C5	$//1B3%s!KLLr   c           
        |D ]  }t        |t              r?| j                  j                  |j	                  | j
                  j                               St        |t              sJ |j                  r&t        d|j                   d|j                   d      t        |j                  t              r2| j                  |t               | j                  |j                         t        |j                  t         j"                        r| j%                  |       |j&                  xs t(        x}t*        k(  rt        |j                  t              sFt-        j.                  dt1        |j                        j2                   d|j                   d| d      | j                  j                  t!        j4                  |j                        j7                  | j
                               |t8        k(  rS| j                  j                  t!        j:                  |j                        j7                  | j
                               F|t        k(  rFt-        j.                  dt1        |j                        j2                   d|j                   d| d      | j<                  r| j?                  ||       | jA                  ||        y )	Nz*conversions not supported in query; got '{!r*   z'identifier values must be strings; got z in {r&   }z<sql values must be sql.Composite, sql.SQL, or Template; got )!
isinstancestrr   appendencoder   encodingr
   
conversion	TypeErrorr2   r-   r   r8   FMT_SQLr"   r   
Composable_process_composabler+   FMT_AUTO	FMT_IDENTr0   r1   r,   r/   
Identifieras_bytesFMT_LITERALLiteralr   _process_server_variable_process_client_variable)r   tr3   r5   s       r   r"   z#TemplateProcessor._process_template3   s&    +	=D$$##DKK0A0A$BCdM222??+1T__,=SB 
 $**h/++D':&&tzz2DJJ7((.))5X5#)C!$**c2,, ,99:  13%r; 
 ##CNN4::$>$G$G$QR###CKK

$;$D$DTXX$NO(( ,99:T__-Qse27  &&11$<11$<W+	=r   c           
     j   	 t        |      }| j
                  j                  |       | j                  j                  |j                         | j                  j                  dt        | j                        z         y # t        $ r* t        j                  d| d|j                   d| d      w xY w)Nformat ' ' not supported in query; got '{r&   r*   s   $%d)r	   
ValueErrorr0   r1   r2   r   r>   r   r-   r   len)r   r3   r5   pyfmts       r   rL   z*TemplateProcessor._process_server_variablea   s    	SME 	E"4::&FS%556  	$$3%  ??+1SE6 	s   A? ?3B2c           
     d   	 t        |       t        j                  |j                        j                  | j                        }| j                  j                  |       | j                  j                  |       y # t        $ r* t        j                  d| d|j                   d| d      w xY w)NrP   rQ   r&   r*   )r	   rR   r0   r1   r2   r   rK   r-   rI   r   r   r>   r   )r   r3   r5   params       r   rM   z*TemplateProcessor._process_client_variablen   s    	SM DJJ'00:E"5!  	$$3%  ??+1SE6 	s   A< <3B/c                b   t        |j                  t        j                        rU| j	                  |t
               | j                  j                  |j                  j                  | j                               y t        |j                  t        j                        rU| j	                  |t               | j                  j                  |j                  j                  | j                               y t        |j                  t        j                  t        j                  f      rU| j	                  |t               | j                  j                  |j                  j                  | j                               y t        j                   t#        |j                        j$                   d      )Nz" not supported in string templates)r<   r-   r   rH   r8   rG   r   r>   rI   r   rK   rJ   SQLComposedrC   r0   r1   r,   r/   )r   r3   s     r   rE   z%TemplateProcessor._process_composable{   s   djj#..1''i8LL

 3 3DHH =>

CKK0''k:LL

 3 3DHH =>

SWWcll$;<''g6LL

 3 3DHH => $$

#0011ST r   N)r   r   r   zabc.Transformerr   bool)returnNone)r3   r
   r4   r=   r[   r\   )rN   r   r[   r\   )r3   r
   r5   r=   r[   r\   )r3   r
   r[   r\   )
__name__r.   r/   r    r$   r8   r"   rL   rM   rE    r   r   r   r      s'    	',M,=\7"r   r   Nc                    t        |      }t        | |d      }|j                          |j                  j	                  |j
                        S )zmConvert a template string to a string.

    This function is exposed as part of psycopg.sql.as_string().
    Fr   r   )r   r   r$   r   decoder@   rN   contextr   tps       r   	as_stringre      s<    
 
W	B	15	9BJJL88??2;;''r   c                l    t        |      }t        | |d      }|j                          |j                  S )zrConvert a template string to a bytes string.

    This function is exposed as part of psycopg.sql.as_bytes().
    Fr`   )r   r   r$   r   rb   s       r   rI   rI      s.    
 
W	B	15	9BJJL88Or   )N)rN   r   rc   abc.AdaptContext | Noner[   r=   )rN   r   rc   rg   r[   bytes)__doc__
__future__r   typingr   r'   r   r   r0   r   _enumsr	   _compatr
   r   _transformerr   AUTOr-   rF   TEXTFMT_TEXTBINARY
FMT_BINARYrG   rJ   rC   r   re   rI   r^   r   r   <module>rt      sy    #      , % ====__""
	
s sl(r   