3
(h                 @   s  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! yDd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/ W n e0k
r   Y nX ddlm1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z> ddlm?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZW dZXdZYdZZd	Z[d
Z\dZ]dZ^dZ_d	Z`d
ZadZbdZce`ZddZedZfd	Zgd
ZhdZidZjd	Zkd
ZldZmdd ZnG dd deoZpG dd deoZqdddZrejsdejsdfddZtddlumvZvmwZw yev \ZxZyew \ZzZ{W n e0k
rt   Y nX [v[wddl|m}Z} [}x:e~eAj D ]*\ZZejddjddj ZeeAe< qW [[d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)MXDATE
MXDATETIMEMXDATETIMETZ
MXINTERVALMXTIMEMXDATEARRAYMXDATETIMEARRAYMXDATETIMETZARRAYMXINTERVALARRAYMXTIMEARRAY
DateFromMx
TimeFromMxTimestampFromMxIntervalFromMx)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=   rK   )typcallable r\   @/tmp/pip-install-q3hcpn_q/psycopg2-binary/psycopg2/extensions.pyregister_adapterg   s    r^   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seqr\   r\   r]   __init__o   s    zSQL_IN.__init__c             C   s
   || _ d S )N)ra   )rb   connr\   r\   r]   prepares   s    zSQL_IN.preparec             C   s^   dd | j D }| jd k	r>x"|D ]}t|dr |j| j q W dd |D }ddj| d S )Nc             S   s   g | ]}t |qS r\   )r<   ).0or\   r\   r]   
<listcomp>y   s    z$SQL_IN.getquoted.<locals>.<listcomp>rf   c             S   s   g | ]}|j  qS r\   )	getquoted)rg   rh   r\   r\   r]   ri   ~   s       (s   ,    ))r`   ra   hasattrrf   join)rb   ZpobjsobjZqobjsr\   r\   r]   rj   v   s    


zSQL_IN.getquotedc             C   s   t | j S )N)strrj   )rb   r\   r\   r]   __str__   s    zSQL_IN.__str__N)__name__
__module____qualname____doc__rd   rf   rj   rq   r\   r\   r\   r]   r_   m   s
   r_   c               @   s"   e Zd ZdZdd ZdddZdS )	NoneAdapterzAdapt 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 )Nr\   )rb   ro   r\   r\   r]   rd      s    zNoneAdapter.__init__   NULLc             C   s   |S )Nr\   )rb   _nullr\   r\   r]   rj      s    zNoneAdapter.getquotedN)rw   )rr   rs   rt   ru   rd   rj   r\   r\   r\   r]   rv      s   rv   c             K   s   | dkr| rdS |s"t |  | S d|krHd|kr:td|jd|d< dd |j D }| dk	rxt | }|j| |}djd	d
 |j D } t |  | S )z4Convert a set of keywords into a connection strings.N ZdatabaseZdbnamez8you can't specify both 'database' and 'dbname' argumentsc             S   s   i | ]\}}|d k	r||qS )Nr\   )rg   kvr\   r\   r]   
<dictcomp>   s    zmake_dsn.<locals>.<dictcomp> c             S   s$   g | ]\}}d |t t|f qS )z%s=%s)_param_escaperp   )rg   rz   r{   r\   r\   r]   ri      s   zmake_dsn.<locals>.<listcomp>)rD   	TypeErrorpopitemsupdatern   )Zdsnkwargstmpr\   r\   r]   make_dsn   s&    

r   z([\\'])z\sc             C   s.   | sdS |j d| } |j| r*d|  d } | S )z9
    Apply the escaping rule required by PQconnectdb
    z''z\\\1')subsearch)sZ	re_escapeZre_spacer\   r\   r]   r~      s    
r~   )register_default_jsonregister_default_jsonb)Range_ry   -)N)ru   re_reZ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-   ImportErrorr.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   ZISOLATION_LEVEL_AUTOCOMMITZ ISOLATION_LEVEL_READ_UNCOMMITTEDZISOLATION_LEVEL_READ_COMMITTEDZISOLATION_LEVEL_REPEATABLE_READZISOLATION_LEVEL_SERIALIZABLEZISOLATION_LEVEL_DEFAULTZSTATUS_SETUPZSTATUS_READYZSTATUS_BEGINZSTATUS_SYNCZSTATUS_ASYNCZSTATUS_PREPAREDZSTATUS_IN_TRANSACTIONZPOLL_OKZ	POLL_READZ
POLL_WRITEZ
POLL_ERRORZTRANSACTION_STATUS_IDLEZTRANSACTION_STATUS_ACTIVEZTRANSACTION_STATUS_INTRANSZTRANSACTION_STATUS_INERRORZTRANSACTION_STATUS_UNKNOWNr^   objectr_   rv   r   compiler~   Zpsycopg2._jsonr   r   ZJSONZ	JSONARRAYZJSONBZ
JSONBARRAYZpsycopg2._ranger   listr   rz   r{   replaceupperr\   r\   r\   r]   <module>   sb   D@l

#
