o
    DDi                     @  s   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 dZddddZddddZdS )z&
Template strings support in queries.
    )annotations)Any   )abc)errors)sql)PyFormat)InterpolationTemplate)Transformerilqc                   @  sR   e Zd ZdddZdddZd ddZd!ddZd"ddZd"ddZd#ddZ	dS )$TemplateProcessortemplater
   txabc.Transformerserver_paramsboolc                C  s.   || _ || _|| _d| _g | _g | _g | _d S N    )r   _tx_server_paramsqueryformatsparams_chunks)selfr   r   r    r   J/var/www/Datamplify/venv/lib/python3.10/site-packages/psycopg/_tstrings.py__init__   s   
zTemplateProcessor.__init__returnNonec                 C  s   |  | j d| j| _d S r   )_process_templater   joinr   r   )r   r   r   r   process'   s   zTemplateProcessor.processitemr	   want_fmtstrc                 C  sd   |j |krd S |j rd|j  nd}t|j}|j d|j d| d}t| d|j | d)N: .z require format ':'z; got '{}')format_spectypevalue
__module____qualname__eProgrammingError
expression)r   r&   r'   fmtclsmsgr   r   r   _check_template_format+   s   

z(TemplateProcessor._check_template_formattc              
   C  sx  |D ]}t |tr| j|| jj qt |tsJ |jr,t	d|j
 d|j dt |jtr?| |t | |j qt |jtjrL| | q|jpPt }tkr~t |jtsotdt|jj d|j
 d| d| jt|j| j q|tkr| jt|j| j q|tkrtdt|jj d|j
 d| d| jr| || q|  || qd S )	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 )!
isinstancer(   r   appendencoder   encodingr	   
conversion	TypeErrorr5   r0   r
   r9   FMT_SQLr#   r   
Composable_process_composabler.   FMT_AUTO	FMT_IDENTr3   r4   r/   r2   
Identifieras_bytesFMT_LITERALLiteralr   _process_server_variable_process_client_variable)r   r:   r&   r6   r   r   r   r#   3   s\   


z#TemplateProcessor._process_templater6   c                 C  sp   zt |}W n ty   td| d|j d| dw | j| | j|j | j	dt
| j  d S )Nformat ' ' not supported in query; got '{r)   r-   s   $%d)r   
ValueErrorr3   r4   r5   r   r>   r   r0   r   len)r   r&   r6   pyfmtr   r   r   rL   a   s   z*TemplateProcessor._process_server_variablec                 C  sl   zt | W n ty   td| d|j d| dw t|j| j	}| j
| | j| d S )NrN   rO   r)   r-   )r   rP   r3   r4   r5   r   rK   r0   rI   r   r   r>   r   )r   r&   r6   paramr   r   r   rM   n   s   z*TemplateProcessor._process_client_variablec                 C  s   t |jtjr| |t | j|j| j	 d S t |jtj
r4| |t | j|j| j	 d S t |jtjtjfrQ| |t | j|j| j	 d S tt|jj d)Nz" not supported in string templates)r=   r0   r   rH   r9   rG   r   r>   rI   r   rK   rJ   SQLComposedrC   r3   r4   r/   r2   )r   r&   r   r   r   rE   {   s   z%TemplateProcessor._process_composableN)r   r
   r   r   r   r   )r!   r"   )r&   r	   r'   r(   r!   r"   )r:   r
   r!   r"   )r&   r	   r6   r(   r!   r"   )r&   r	   r!   r"   )
__name__r1   r2   r    r%   r9   r#   rL   rM   rE   r   r   r   r   r      s    




.
r   Nr:   r
   contextabc.AdaptContext | Noner!   r(   c                 C  s,   t |}t| |d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   decoder@   r:   rW   r   tpr   r   r   	as_string   s   r]   bytesc                 C  s$   t |}t| |dd}|  |jS )zrConvert a template string to a bytes string.

    This function is exposed as part of psycopg.sql.as_bytes().
    FrY   )r   r   r%   r   r[   r   r   r   rI      s   rI   )N)r:   r
   rW   rX   r!   r(   )r:   r
   rW   rX   r!   r^   )__doc__
__future__r   typingr   r*   r   r   r3   r   _enumsr   _compatr	   r
   _transformerr   AUTOr0   rF   TEXTFMT_TEXTBINARY
FMT_BINARYrG   rJ   rC   r   r]   rI   r   r   r   r   <module>   s$    v