o
    ÒèFh�  ã                   @   sp  d Z ddlZddlmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z! ddlm"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ ddlm0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZH 	 dZIdZJdZKdZLd	ZMdZN	 dZOdZPdZQd	ZRdZSd
ZTeQZU	 dZVdZWdZXd	ZY	 dZZdZ[dZ\d	Z]dZ^dd„ Z_G dd„ dƒZ`G dd„ dƒZaddd„Zbe cd¡e cd¡fdd„ZdddlemfZfmgZg zefƒ \ZhZiegƒ \ZjZkW n
 el�y   Y nw [f[gddlmmnZn [neoe2 p¡ ƒD ]\ZqZreq sdd¡ sdd¡ t¡ Zqere2eq< �q[q[rdS )aÑ  psycopg extensions to the DBAPI-2.0

This module holds all the extensions to the DBAPI-2.0 provided by psycopg.

- `connection` -- the new-type inheritable connection class
- `cursor` -- the new-type inheritable cursor class
- `lobject` -- the new-type inheritable large object class
- `adapt()` -- exposes the PEP-246_ compatible adapting mechanism used
  by psycopg to adapt Python types to PostgreSQL ones

.. _PEP-246: https://www.python.org/dev/peps/pep-0246/
é    N)ÚBINARYARRAYÚBOOLEANÚBOOLEANARRAYÚBYTESÚ
BYTESARRAYÚDATEÚ	DATEARRAYÚDATETIMEARRAYÚDECIMALÚDECIMALARRAYÚFLOATÚ
FLOATARRAYÚINTEGERÚINTEGERARRAYÚINTERVALÚINTERVALARRAYÚLONGINTEGERÚLONGINTEGERARRAYÚ
ROWIDARRAYÚSTRINGARRAYÚTIMEÚ	TIMEARRAYÚUNICODEÚUNICODEARRAYÚAsIsÚBinaryÚBooleanÚFloatÚIntÚQuotedString)ÚPYDATEÚ
PYDATETIMEÚPYDATETIMETZÚ
PYINTERVALÚPYTIMEÚPYDATEARRAYÚPYDATETIMEARRAYÚPYDATETIMETZARRAYÚPYINTERVALARRAYÚPYTIMEARRAYÚ
DateFromPyÚ
TimeFromPyÚTimestampFromPyÚIntervalFromPy)ÚadaptÚadaptersÚ	encodingsÚ
connectionÚcursorÚlobjectÚXidÚlibpq_versionÚ	parse_dsnÚquote_identÚstring_typesÚbinary_typesÚnew_typeÚnew_array_typeÚregister_typeÚ	ISQLQuoteÚNotifyÚDiagnosticsÚColumnÚConnectionInfoÚQueryCanceledErrorÚTransactionRollbackErrorÚset_wait_callbackÚget_wait_callbackÚencrypt_passwordé   é   é   é   é   c                 C   s   |t | tf< dS )z;Register 'callable' as an ISQLQuote adapter for type 'typ'.N)r/   r=   )ÚtypÚcallable© rN   úL/var/www/html/loop/nvenv/lib/python3.10/site-packages/psycopg2/extensions.pyÚregister_adapter_   s   rP   c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚSQL_INz-Adapt any iterable to an SQL quotable object.c                 C   s   || _ d | _d S ©N)Ú_seqÚ_conn)ÚselfÚseqrN   rN   rO   Ú__init__g   s   
zSQL_IN.__init__c                 C   s
   || _ d S rR   )rT   )rU   ÚconnrN   rN   rO   Úpreparek   s   
zSQL_IN.preparec                 C   sZ   dd„ | j D ƒ}| jd ur|D ]}t|dƒr| | j¡ qdd„ |D ƒ}dd |¡ d S )Nc                 S   s   g | ]}t |ƒ‘qS rN   )r.   ©Ú.0ÚorN   rN   rO   Ú
<listcomp>q   ó    z$SQL_IN.getquoted.<locals>.<listcomp>rY   c                 S   s   g | ]}|  ¡ ‘qS rN   )Ú	getquotedrZ   rN   rN   rO   r]   v   r^   ó   (s   , ó   ))rS   rT   ÚhasattrrY   Újoin)rU   ÚpobjsÚobjÚqobjsrN   rN   rO   r_   n   s   

€zSQL_IN.getquotedc                 C   s   t |  ¡ ƒS rR   )Ústrr_   )rU   rN   rN   rO   Ú__str__y   s   zSQL_IN.__str__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rW   rY   r_   rh   rN   rN   rN   rO   rQ   e   s    rQ   c                   @   s"   e Zd ZdZdd„ Zddd„ZdS )	ÚNoneAdapterz–Adapt None to NULL.

    This adapter is not used normally as a fast path in mogrify uses NULL,
    but it makes easier to adapt composite types.
    c                 C   s   d S rR   rN   )rU   re   rN   rN   rO   rW   ƒ   ó   zNoneAdapter.__init__ó   NULLc                 C   s   |S rR   rN   )rU   Ú_nullrN   rN   rO   r_   †   rn   zNoneAdapter.getquotedN)ro   )ri   rj   rk   rl   rW   r_   rN   rN   rN   rO   rm   }   s    rm   c                 K   sš   | du r|sdS |st | ƒ | S d|v r#d|v rtdƒ‚| d¡|d< dd„ | ¡ D ƒ}| dur;t | ƒ}| |¡ |}d d	d
„ | ¡ D ƒ¡} t | ƒ | S )z4Convert a set of keywords into a connection strings.NÚ ÚdatabaseÚdbnamez8you can't specify both 'database' and 'dbname' argumentsc                 S   s   i | ]\}}|d ur||“qS rR   rN   ©r[   ÚkÚvrN   rN   rO   Ú
<dictcomp>œ   s    zmake_dsn.<locals>.<dictcomp>ú c                 S   s$   g | ]\}}d   |tt|ƒƒ¡‘qS )z{}={})ÚformatÚ_param_escaperg   rt   rN   rN   rO   r]   £   s    ÿzmake_dsn.<locals>.<listcomp>)r6   Ú	TypeErrorÚpopÚitemsÚupdaterc   )ÚdsnÚkwargsÚtmprN   rN   rO   Úmake_dsnŠ   s*   ÿ

ÿr‚   z([\\'])z\sc                 C   s.   | sdS |  d| ¡} | | ¡rd|  d } | S )z9
    Apply the escaping rule required by PQconnectdb
    z''z\\\1ú')ÚsubÚsearch)ÚsÚ	re_escapeÚre_spacerN   rN   rO   rz   ¬   s   
rz   )Úregister_default_jsonÚregister_default_jsonb)ÚRangeÚ_rq   ú-rR   )url   ÚreÚ_reÚpsycopg2._psycopgr   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   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   ÚISOLATION_LEVEL_AUTOCOMMITÚ ISOLATION_LEVEL_READ_UNCOMMITTEDÚISOLATION_LEVEL_READ_COMMITTEDÚISOLATION_LEVEL_REPEATABLE_READÚISOLATION_LEVEL_SERIALIZABLEÚISOLATION_LEVEL_DEFAULTÚSTATUS_SETUPÚSTATUS_READYÚSTATUS_BEGINÚSTATUS_SYNCÚSTATUS_ASYNCÚSTATUS_PREPAREDÚSTATUS_IN_TRANSACTIONÚPOLL_OKÚ	POLL_READÚ
POLL_WRITEÚ
POLL_ERRORÚTRANSACTION_STATUS_IDLEÚTRANSACTION_STATUS_ACTIVEÚTRANSACTION_STATUS_INTRANSÚTRANSACTION_STATUS_INERRORÚTRANSACTION_STATUS_UNKNOWNrP   rQ   rm   r‚   Úcompilerz   Úpsycopg2._jsonr‰   rŠ   ÚJSONÚ	JSONARRAYÚJSONBÚ
JSONBARRAYÚImportErrorÚpsycopg2._ranger‹   Úlistr}   ru   rv   ÚreplaceÚupperrN   rN   rN   rO   Ú<module>   sh    #€@l	
#
þ
ÿ