
    j                        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dS )z&
Template strings support in queries.
    )annotations)Any   )abc)errors)sql)PyFormat)InterpolationTemplate)Transformerilqc                  F    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	dS )TemplateProcessortemplater   txabc.Transformerserver_paramsboolc               h    || _         || _        || _        d| _        g | _        g | _        g | _        d S N    )r   _tx_server_paramsqueryformatsparams_chunks)selfr   r   r   s       \/DATA/AppData/hermes/projects/honcho/.venv/lib/python3.11/site-packages/psycopg/_tstrings.py__init__zTemplateProcessor.__init__   s8     +
')!#$&r   returnNonec                x    |                      | j                   d                    | j                  | _        d S r   )_process_templater   joinr   r   )r    s    r!   processzTemplateProcessor.process'   s1    t}---XXdl++


r   itemr
   want_fmtstrc                    |j         |k    rd S |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    r)   r*   fmtclsmsgs         r!   _check_template_formatz(TemplateProcessor._check_template_format+   s    x''F(,(8@$$"$$$b4:QQ#"2QQhQQQ C!K!K$/!K3!K!K!KLLLr   tc           
     F   |D ]}t          |t                    r8| j                            |                    | j        j                             Pt          |t                    sJ |j        r t          d|j
         d|j         d          t          |j        t                    r6|                     |t                     |                     |j                   t          |j        t           j                  r|                     |           |j        pt(          x}t*          k    rt          |j        t                    s:t-          j        dt1          |j                  j         d|j
         d| d          | j                            t!          j        |j                                      | j                             |t8          k    rK| j                            t!          j        |j                                      | j                             "|t          k    r:t-          j        dt1          |j                  j         d|j
         d| d          | j        r|                     ||           |                      ||           d S )	Nz*conversions not supported in query; got '{!r1   z'identifier values must be strings; got z in {r-   }z;sql values must be sql.Composed, sql.SQL, or Template; got )!
isinstancer+   r   appendencoder   encodingr
   
conversion	TypeErrorr9   r4   r   r=   FMT_SQLr&   r   
Composable_process_composabler2   FMT_AUTO	FMT_IDENTr7   r8   r3   r6   
Identifieras_bytesFMT_LITERALLiteralr   _process_server_variable_process_client_variable)r    r>   r)   r:   s       r!   r&   z#TemplateProcessor._process_template3   s    +	= +	=D$$$ ##DKK0A$B$BCCCdM22222 B?B B-1_B B B  
 $*h// =++D':::&&tz2222DJ77 =((....)5X5#)CC!$*c22 ,; ,,9; ;!%; ;36; ; ;  
 ##CN4:$>$>$G$G$Q$QRRRR####CK
$;$;$D$DTX$N$NOOOO(7 ,,97 7!_7 7/27 7 7   & =11$<<<<11$<<<<W+	= +	=r   r:   c           
     Z   	 t          |          }n1# t          $ r$ t          j        d| d|j         d| d          w xY w| j                            |           | j                            |j                   | j	                            dt          | j                  z             d S )Nformat ' ' not supported in query; got '{r-   r1   s   $%d)r	   
ValueErrorr7   r8   r9   r   rC   r   r4   r   len)r    r)   r:   pyfmts       r!   rQ   z*TemplateProcessor._process_server_variablea   s    	SMMEE 	 	 	$63 6 6?6 6-06 6 6  	 	E"""4:&&&FS%5%5566666	    .A c           
     T   	 t          |           n1# t          $ r$ t          j        d| d|j         d| d          w xY wt          j        |j                                      | j	                  }| j
                            |           | j                            |           d S )NrT   rU   r-   r1   )r	   rV   r7   r8   r9   r   rP   r4   rN   r   r   rC   r   )r    r)   r:   params       r!   rR   z*TemplateProcessor._process_client_variablen   s    	SMMMM 	 	 	$63 6 6?6 6-06 6 6  	 DJ''00::E"""5!!!!!rY   c                (   t          |j        t          j                  rT|                     |t
                     | j                            |j                            | j	                             d S t          |j        t          j
                  rT|                     |t                     | j                            |j                            | j	                             d S t          |j        t          j        t          j        f          rT|                     |t                     | j                            |j                            | j	                             d S t          j        t#          |j                  j         d          )Nz" not supported in string templates)rB   r4   r   rM   r=   rL   r   rC   rN   r   rP   rO   SQLComposedrH   r7   r8   r3   r6   )r    r)   s     r!   rJ   z%TemplateProcessor._process_composable{   sD   dj#.11 	''i888L
 3 3DH = =>>>F
CK00 	''k:::L
 3 3DH = =>>>F
SWcl$;<< 	''g666L
 3 3DH = =>>>F $
##0TTT  r   N)r   r   r   r   r   r   )r#   r$   )r)   r
   r*   r+   r#   r$   )r>   r   r#   r$   )r)   r
   r:   r+   r#   r$   )r)   r
   r#   r$   )
__name__r5   r6   r"   r(   r=   r&   rQ   rR   rJ    r   r!   r   r      s        	' 	' 	' 	', , , ,M M M M,= ,= ,= ,=\7 7 7 7" " " "     r   r   Nr>   r   contextabc.AdaptContext | Noner#   r+   c                    t          |          }t          | |d          }|                                 |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   decoderE   r>   ra   r   tps       r!   	as_stringrh      sH    
 
W		B	15	9	9	9BJJLLL8??2;'''r   bytesc                z    t          |          }t          | |d          }|                                 |j        S )zrConvert a template string to a bytes string.

    This function is exposed as part of psycopg.sql.as_bytes().
    Frd   )r   r   r(   r   rf   s       r!   rN   rN      s9    
 
W		B	15	9	9	9BJJLLL8Or   )N)r>   r   ra   rb   r#   r+   )r>   r   ra   rb   r#   ri   )__doc__
__future__r   typingr   r.   r   r   r7   r   _enumsr	   _compatr
   r   _transformerr   AUTOr4   rK   TEXTFMT_TEXTBINARY
FMT_BINARYrL   rO   rH   r   rh   rN   r`   r   r!   <module>rv      sC    # " " " " "                               , , , , , , , , % % % % % % ==_"
	
s s s s s s s sl( ( ( ( (      r   