o
    ?HhZ                     @  s$  d Z ddlmZ ddlmZ ddlZddl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 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 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" e	rddlm#Z# ddl$m%Z% e&dZ'G dd dej(Z)G dd  d eZ*G d!d" d"eZ+G d#d$ d$eZ,G d%d& d&ejj-Z.G d'd( d(ejj/Z0G d)d* d*eZ1G d+d, d,eZ2G d-d. d.ej3Z4G d/d0 d0ej5Z6G d1d2 d2ej7Z8G d3d4 d4ej9Z:G d5d6 d6ej;Z<G d7d8 d8ej=Z>G d9d: d:ej?Z@G d;d< d<ejAZBG d=d> d>ejCZDG d?d@ d@ejEZFG dAdB dBeZGG dCdD dDeZHG dEdF dFeZIdGdH ZJG dIdJ dJeZKG dKdL dLZLG dMdN dNeLZMG dOdP dPeZNG dQdR dReNZOG dSdT dTZPG dUdV dVeKZQeKZReQZSdS )WaH  
.. dialect:: postgresql+psycopg
    :name: psycopg (a.k.a. psycopg 3)
    :dbapi: psycopg
    :connectstring: postgresql+psycopg://user:password@host:port/dbname[?key=value&key=value...]
    :url: https://pypi.org/project/psycopg/

``psycopg`` is the package and module name for version 3 of the ``psycopg``
database driver, formerly known as ``psycopg2``.  This driver is different
enough from its ``psycopg2`` predecessor that SQLAlchemy supports it
via a totally separate dialect; support for ``psycopg2`` is expected to remain
for as long as that package continues to function for modern Python versions,
and also remains the default dialect for the ``postgresql://`` dialect
series.

The SQLAlchemy ``psycopg`` dialect provides both a sync and an async
implementation under the same dialect name. The proper version is
selected depending on how the engine is created:

* calling :func:`_sa.create_engine` with ``postgresql+psycopg://...`` will
  automatically select the sync version, e.g.::

    from sqlalchemy import create_engine
    sync_engine = create_engine("postgresql+psycopg://scott:tiger@localhost/test")

* calling :func:`_asyncio.create_async_engine` with
  ``postgresql+psycopg://...`` will automatically select the async version,
  e.g.::

    from sqlalchemy.ext.asyncio import create_async_engine
    asyncio_engine = create_async_engine("postgresql+psycopg://scott:tiger@localhost/test")

The asyncio version of the dialect may also be specified explicitly using the
``psycopg_async`` suffix, as::

    from sqlalchemy.ext.asyncio import create_async_engine
    asyncio_engine = create_async_engine("postgresql+psycopg_async://scott:tiger@localhost/test")

.. seealso::

    :ref:`postgresql_psycopg2` - The SQLAlchemy ``psycopg``
    dialect shares most of its behavior with the ``psycopg2`` dialect.
    Further documentation is available there.

Using a different Cursor class
------------------------------

One of the differences between ``psycopg`` and the older ``psycopg2``
is how bound parameters are handled: ``psycopg2`` would bind them
client side, while ``psycopg`` by default will bind them server side.

It's possible to configure ``psycopg`` to do client side binding by
specifying the ``cursor_factory`` to be ``ClientCursor`` when creating
the engine::

    from psycopg import ClientCursor

    client_side_engine = create_engine(
        "postgresql+psycopg://...",
        connect_args={"cursor_factory": ClientCursor},
    )

Similarly when using an async engine the ``AsyncClientCursor`` can be
specified::

    from psycopg import AsyncClientCursor

    client_side_engine = create_async_engine(
        "postgresql+psycopg://...",
        connect_args={"cursor_factory": AsyncClientCursor},
    )

.. seealso::

    `Client-side-binding cursors <https://www.psycopg.org/psycopg3/docs/advanced/cursors.html#client-side-binding-cursors>`_

    )annotations)dequeN)cast)TYPE_CHECKING   )ranges)_PGDialect_common_psycopg)"_PGExecutionContext_common_psycopg)INTERVAL)
PGCompiler)PGIdentifierPreparer)	REGCONFIG)JSON)JSONB)JSONPathType)CITEXT   )pool)util)AdaptedConnection)sqltypes)await_fallback)
await_only)Iterable)AsyncConnectionzsqlalchemy.dialects.postgresqlc                   @     e Zd ZdZdS )	_PGStringTN__name__
__module____qualname__render_bind_cast r"   r"   f/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/sqlalchemy/dialects/postgresql/psycopg.pyr   x       r   c                   @  r   )_PGREGCONFIGTNr   r"   r"   r"   r#   r%   |   r$   r%   c                   @      e Zd ZdZdd Zdd ZdS )_PGJSONTc                 C     |  d |jS N)_make_bind_processor_psycopg_Jsonselfdialectr"   r"   r#   bind_processor      z_PGJSON.bind_processorc                 C     d S r)   r"   r-   r.   coltyper"   r"   r#   result_processor      z_PGJSON.result_processorNr   r   r    r!   r/   r4   r"   r"   r"   r#   r'          r'   c                   @  r&   )_PGJSONBTc                 C  r(   r)   )r*   _psycopg_Jsonbr,   r"   r"   r#   r/      r0   z_PGJSONB.bind_processorc                 C  r1   r)   r"   r2   r"   r"   r#   r4      r5   z_PGJSONB.result_processorNr6   r"   r"   r"   r#   r8      r7   r8   c                   @     e Zd ZdZdZdS )_PGJSONIntIndexTypejson_int_indexTNr   r   r    __visit_name__r!   r"   r"   r"   r#   r;          r;   c                   @  r:   )_PGJSONStrIndexTypejson_str_indexTNr=   r"   r"   r"   r#   r@      r?   r@   c                   @     e Zd ZdS )_PGJSONPathTypeNr   r   r    r"   r"   r"   r#   rC          rC   c                   @  r   )_PGIntervalTNr   r"   r"   r"   r#   rF      r$   rF   c                   @  r   )_PGTimeStampTNr   r"   r"   r"   r#   rG      r$   rG   c                   @  r   )_PGDateTNr   r"   r"   r"   r#   rH      r$   rH   c                   @  r   )_PGTimeTNr   r"   r"   r"   r#   rI      r$   rI   c                   @  r   )
_PGIntegerTNr   r"   r"   r"   r#   rJ      r$   rJ   c                   @  r   )_PGSmallIntegerTNr   r"   r"   r"   r#   rK      r$   rK   c                   @  r   )_PGNullTypeTNr   r"   r"   r"   r#   rL      r$   rL   c                   @  r   )_PGBigIntegerTNr   r"   r"   r"   r#   rM      r$   rM   c                   @  r   )
_PGBooleanTNr   r"   r"   r"   r#   rN      r$   rN   c                   @     e Zd Zdd Zdd ZdS )_PsycopgRangec                   s   t t|j  fdd}|S )Nc                   s&   t | tjr | j| j| j| j} | S r)   )
isinstancer   Rangelowerupperboundsemptyvaluepsycopg_Ranger"   r#   to_range   s
   z._PsycopgRange.bind_processor.<locals>.to_range)r   PGDialect_psycopg_psycopg_Ranger-   r.   r[   r"   rY   r#   r/      s   z_PsycopgRange.bind_processorc                 C     dd }|S )Nc                 S  s2   | d urt j| j| j| jr| jnd| j d} | S )N[)rU   rV   r   rR   _lower_upper_boundsrW   r"   r"   r#   r[      s   z0_PsycopgRange.result_processor.<locals>.to_ranger"   r-   r.   r3   r[   r"   r"   r#   r4      s   
z_PsycopgRange.result_processorNr   r   r    r/   r4   r"   r"   r"   r#   rP      s    rP   c                   @  rO   )_PsycopgMultiRangec                   s4   t t|jt t|jtd   fdd}|S )Nc                   s0   t | t fr
| S fddtd| D S )Nc                   s"   g | ]} |j |j|j|jqS r"   )rS   rT   rU   rV   ).0elementrY   r"   r#   
<listcomp>   s    zG_PsycopgMultiRange.bind_processor.<locals>.to_range.<locals>.<listcomp>zIterable[ranges.Range])rQ   strr   rW   NoneTypepsycopg_MultirangerZ   r"   r#   r[      s   
z3_PsycopgMultiRange.bind_processor.<locals>.to_range)r   r\   r]   _psycopg_Multirangetyper^   r"   rm   r#   r/      s   z!_PsycopgMultiRange.bind_processorc                 C  r_   )Nc                 S  s    | d u rd S t dd | D S )Nc                 s  s6    | ]}t j|j|j|jr|jnd |j dV  qdS )r`   ra   Nrb   )ri   elemr"   r"   r#   	<genexpr>  s    
zH_PsycopgMultiRange.result_processor.<locals>.to_range.<locals>.<genexpr>)r   
MultiRangerW   r"   r"   r#   r[      s
   
z5_PsycopgMultiRange.result_processor.<locals>.to_ranger"   rf   r"   r"   r#   r4      s   z#_PsycopgMultiRange.result_processorNrg   r"   r"   r"   r#   rh      s    rh   c                   @  rB   )PGExecutionContext_psycopgNrD   r"   r"   r"   r#   ru     rE   ru   c                   @  rB   )PGCompiler_psycopgNrD   r"   r"   r"   r#   rv     rE   rv   c                   @  rB   )PGIdentifierPreparer_psycopgNrD   r"   r"   r"   r#   rw     rE   rw   c                 C  s   t d| j| j d S )Nz%s: %s)loggerinfoseveritymessage_primary)
diagnosticr"   r"   r#   _log_notices     r}   c                      s  e Zd ZdZdZdZdZdZeZ	e
ZeZdZdZdZeeji ejeeeeeeeejeeeejje ejj!e"ejj#e$ej%e&e'e&ej(e)ej*e+ej,e-ej.e/ej0e1ej2e3e4j5e6e4j7e8iZ fddZ9 fdd	Z:d
d Z; fddZ<e=dd Z>e=dd Z?ej@dd ZAej@dd ZBej@dd ZCej@dd ZDej@dd ZEej@dd ZFdd ZG fd d!ZHd"d# ZId$d% ZJd&d' ZKd(d) ZLd*d+ ZMd5d-d.ZN	,d6d/d0ZO	,d6d1d2ZPej@d3d4 ZQ  ZRS )7r\   psycopgTpyformat)r   r   Nc                   s   t  jdi | | jrxtd| jj}|r%tdd |dddD | _| jdk r.t	dd	d
l
m} || jj | _}| jdu rXd	d l}|d|jjj |d|jjj | jrgd	dlm} || j| | jrzd	dlm} || j| d S d S d S )Nz(\d+)\.(\d+)(?:\.(\d+))?c                 s  s     | ]}|d urt |V  qd S r)   )int)ri   xr"   r"   r#   rs   O  s    z-PGDialect_psycopg.__init__.<locals>.<genexpr>r      r   )r   r   r   z,psycopg version 3.0.2 or higher is required.r   )AdaptersMapFinetcidr)set_json_loads)set_json_dumpsr"   )super__init__dbapirematch__version__tuplegrouppsycopg_versionImportErrorpsycopg.adaptr   adapters_psycopg_adapters_map_native_inet_typespsycopg.types.stringregister_loadertypesstring
TextLoader_json_deserializerpsycopg.types.jsonr   _json_serializerr   )r-   kwargsmr   adapters_mapr   r   r   	__class__r"   r#   r   I  s>   





!zPGDialect_psycopg.__init__c                   s<   t  |\}}| jr| j|d< | jd ur| j|d< ||fS )Ncontextclient_encoding)r   create_connect_argsr   r   )r-   urlcargscparamsr   r"   r#   r   r  s   


z%PGDialect_psycopg.create_connect_argsc                 C  s   ddl m} ||jj|S Nr   )TypeInfo)psycopg.typesr   fetch
connectiondriver_connection)r-   r   namer   r"   r"   r#   _type_info_fetch|  s   z"PGDialect_psycopg._type_info_fetchc                   sj   t  | | jsd| _| jr1| |d}|d u| _| jr3ddlm} ||| j	 |||j
 d S d S d S )NFhstorer   )register_hstore)r   
initializeinsert_returninginsert_executemany_returninguse_native_hstorer   _has_native_hstorepsycopg.types.hstorer   r   r   )r-   r   ry   r   r   r"   r#   r     s   
zPGDialect_psycopg.initializec                 C  s   dd l }|S )Nr   )r   )clsr   r"   r"   r#   import_dbapi  s   zPGDialect_psycopg.import_dbapic                 C  s   t S r)   )PGDialectAsync_psycopg)r   r   r"   r"   r#   get_async_dialect_cls     z'PGDialect_psycopg.get_async_dialect_clsc                 C  s&   | j jj| j jj| j jj| j jjdS )N)zREAD COMMITTEDzREAD UNCOMMITTEDzREPEATABLE READSERIALIZABLE)r   IsolationLevelREAD_COMMITTEDREAD_UNCOMMITTEDREPEATABLE_READr   r-   r"   r"   r#   _isolation_lookup  s
   z#PGDialect_psycopg._isolation_lookupc                 C     ddl m} |jS Nr   )json)r   r   Jsonr-   r   r"   r"   r#   r+        zPGDialect_psycopg._psycopg_Jsonc                 C  r   r   )r   r   Jsonbr   r"   r"   r#   r9     r   z PGDialect_psycopg._psycopg_Jsonbc                 C     ddl m} |S )Nr   )TransactionStatus)
psycopg.pqr   )r-   r   r"   r"   r#   _psycopg_TransactionStatus     z,PGDialect_psycopg._psycopg_TransactionStatusc                 C  r   )Nr   )rR   )psycopg.types.rangerR   )r-   rR   r"   r"   r#   r]     r   z PGDialect_psycopg._psycopg_Rangec                 C  r   )Nr   )
Multirange)psycopg.types.multiranger   )r-   r   r"   r"   r#   rp     r   z%PGDialect_psycopg._psycopg_Multirangec                 C  s   ||_ ||_d S r)   
autocommitisolation_levelr-   r   r   r   r"   r"   r#   _do_isolation_level  s   
z%PGDialect_psycopg._do_isolation_levelc                   s,   |j j}t |}|| jjkr|  |S r)   )ry   transaction_statusr   get_isolation_levelr   IDLErollback)r-   dbapi_connectionstatus_beforerX   r   r"   r#   r     s
   z%PGDialect_psycopg.get_isolation_levelc                 C  s6   |dkr| j |dd d d S | j |d| j| d d S )N
AUTOCOMMITTr   F)r   r   )r-   r   levelr"   r"   r#   set_isolation_level  s   

z%PGDialect_psycopg.set_isolation_levelc                 C  s
   ||_ d S r)   	read_onlyr-   r   rX   r"   r"   r#   set_readonly     
zPGDialect_psycopg.set_readonlyc                 C     |j S r)   r   r-   r   r"   r"   r#   get_readonly     zPGDialect_psycopg.get_readonlyc                   s>   dd }|g j d urfdd} |  fdd}|S )Nc                 S  s   |  t d S r)   )add_notice_handlerr}   connr"   r"   r#   notices  r0   z-PGDialect_psycopg.on_connect.<locals>.noticesc                   s     |  j d S r)   )r   r   r   r   r"   r#   
on_connect     z0PGDialect_psycopg.on_connect.<locals>.on_connectc                   s    D ]}||  qd S r)   r"   )r   fn)fnsr"   r#   r     s   
)r   append)r-   r   r   r"   )r   r-   r#   r     s   

zPGDialect_psycopg.on_connectc                 C  s*   t || jjr|d ur|js|jrdS dS )NTF)rQ   r   Errorclosedbroken)r-   er   cursorr"   r"   r#   is_disconnect  s   zPGDialect_psycopg.is_disconnectFc              
   C  st   |j j}|s|jj| jjkr|  |j}z|s| |d |	| W |s.| || d S d S |s9| || w w )NT)
r   r   ry   r   r   r   r   r   _do_autocommitexecute)r-   r   commandrecover
dbapi_connbefore_autocommitr"   r"   r#   _do_prepared_twophase  s"   z'PGDialect_psycopg._do_prepared_twophasec                 C  0   |r| j |d| d|d d S | |j d S )NzROLLBACK PREPARED ''r   )r  do_rollbackr   r-   r   xidis_preparedr   r"   r"   r#   do_rollback_twophase  
   
z&PGDialect_psycopg.do_rollback_twophasec                 C  r  )NzCOMMIT PREPARED 'r  r  )r  	do_commitr   r  r"   r"   r#   do_commit_twophase!  r
  z$PGDialect_psycopg.do_commit_twophasec                 C  s   dS )N;r"   r   r"   r"   r#   _dialect_specific_select_one+  r   z.PGDialect_psycopg._dialect_specific_select_one)F)TF)Sr   r   r    driversupports_statement_cachesupports_server_side_cursorsdefault_paramstylesupports_sane_multi_rowcountru   execution_ctx_clsrv   statement_compilerrw   preparerr   r   r   r   update_copyr   colspecsr   Stringr   r   r%   r   r'   r   r   r8   r   rC   JSONIntIndexTyper;   JSONStrIndexTyper@   IntervalrF   r
   DaterH   DateTimerG   TimerI   IntegerrJ   SmallIntegerrK   
BigIntegerrM   r   AbstractSingleRangerP   AbstractMultiRangerh   r   r   r   r   classmethodr   r   memoized_propertyr   r+   r9   r   r]   rp   r   r   r   r   r   r   r   r  r	  r  r  __classcell__r"   r"   r   r#   r\      s    	
)













r\   c                   @  s|   e Zd ZdZdZdddZdd Zed	d
 Zej	dd
 Zdd Z
dddZdd Zdd Zdd ZdddZdd ZdS )AsyncAdapt_psycopg_cursor)_cursorawait__rowsNreturnNonec                 C  s   || _ || _t | _d S r)   )r)  r*  r   r+  )r-   r   r*  r"   r"   r#   r   5  s   z"AsyncAdapt_psycopg_cursor.__init__c                 C     t | j|S r)   )getattrr)  r-   r   r"   r"   r#   __getattr__:     z%AsyncAdapt_psycopg_cursor.__getattr__c                 C     | j jS r)   r)  	arraysizer   r"   r"   r#   r5  =     z#AsyncAdapt_psycopg_cursor.arraysizec                 C  s   || j _d S r)   r4  r-   rX   r"   r"   r#   r5  A  s   c                 C  s   | j   | j  d S r)   )r+  clearr)  _closer   r"   r"   r#   closeE  s   
zAsyncAdapt_psycopg_cursor.closec                 K  sT   |  | jj||fi |}| jj}|r(|j| jjkr(|  | j }t|| _	|S r)   )
r*  r)  r   pgresultstatus_psycopg_ExecStatus	TUPLES_OKfetchallr   r+  )r-   queryparamskwresultresrowsr"   r"   r#   r   J  s   
z!AsyncAdapt_psycopg_cursor.executec                 C  s   |  | j||S r)   )r*  r)  executemany)r-   r@  
params_seqr"   r"   r#   rF  V     z%AsyncAdapt_psycopg_cursor.executemanyc                 c  s"    | j r| j  V  | j sd S d S r)   r+  popleftr   r"   r"   r#   __iter__Y  s   z"AsyncAdapt_psycopg_cursor.__iter__c                 C  s   | j r| j  S d S r)   rI  r   r"   r"   r#   fetchone]  s   
z"AsyncAdapt_psycopg_cursor.fetchonec                   s6   |d u r| j j}| j  fddtt|t D S )Nc                   s   g | ]}   qS r"   )rJ  )ri   _rrr"   r#   rk   h  s    z7AsyncAdapt_psycopg_cursor.fetchmany.<locals>.<listcomp>)r)  r5  r+  rangeminlenr-   sizer"   rN  r#   	fetchmanyc  s    z#AsyncAdapt_psycopg_cursor.fetchmanyc                 C  s   t | j}| j  |S r)   )listr+  r8  )r-   retvalr"   r"   r#   r?  j  s   

z"AsyncAdapt_psycopg_cursor.fetchallr,  r-  r)   )r   r   r    	__slots__r=  r   r1  propertyr5  setterr:  r   rF  rK  rL  rU  r?  r"   r"   r"   r#   r(  0  s     




r(  c                   @  s@   e Zd ZdddZdd Zdd Zdd	d
Zdd Zdd ZdS )AsyncAdapt_psycopg_ss_cursorNc                 K  s    |  | jj||fi | | S r)   )r*  r)  r   )r-   r@  rA  rB  r"   r"   r#   r   q  s   z$AsyncAdapt_psycopg_ss_cursor.executec                 C     |  | j  d S r)   )r*  r)  r:  r   r"   r"   r#   r:  u  rH  z"AsyncAdapt_psycopg_ss_cursor.closec                 C     |  | j S r)   )r*  r)  rL  r   r"   r"   r#   rL  x     z%AsyncAdapt_psycopg_ss_cursor.fetchoner   c                 C  s   |  | j|S r)   )r*  r)  rU  rS  r"   r"   r#   rU  {  r   z&AsyncAdapt_psycopg_ss_cursor.fetchmanyc                 C  r^  r)   )r*  r)  r?  r   r"   r"   r#   r?  ~  r_  z%AsyncAdapt_psycopg_ss_cursor.fetchallc                 c  s:    | j  }	 z
| | V  W n
 ty   Y d S w qr)   )r)  	__aiter__r*  	__anext__StopAsyncIteration)r-   iteratorr"   r"   r#   rK    s   
z%AsyncAdapt_psycopg_ss_cursor.__iter__r)   )r   )	r   r   r    r   r:  rL  rU  r?  rK  r"   r"   r"   r#   r\  p  s    

r\  c                   @  s   e Zd ZU ded< dZeeZd ddZdd	 Z	d!ddZ
dd Zdd Zdd Zdd Zedd Zejdd Zdd Zdd Zdd Zdd Zd
S )"AsyncAdapt_psycopg_connectionr   _connectionr"   r,  r-  c                 C  s
   || _ d S r)   re  r   r"   r"   r#   r     r   z&AsyncAdapt_psycopg_connection.__init__c                 C  r.  r)   )r/  re  r0  r"   r"   r#   r1    r2  z)AsyncAdapt_psycopg_connection.__getattr__Nc                 K  s(   |  | jj||fi |}t|| j S r)   )r*  re  r   r(  )r-   r@  rA  rB  r   r"   r"   r#   r     s   z%AsyncAdapt_psycopg_connection.executec                 O  s4   | j j|i |}t|drt|| jS t|| jS )Nr   )re  r   hasattrr\  r*  r(  )r-   argsrB  r   r"   r"   r#   r     s   
z$AsyncAdapt_psycopg_connection.cursorc                 C  r]  r)   )r*  re  commitr   r"   r"   r#   ri    rH  z$AsyncAdapt_psycopg_connection.commitc                 C  r]  r)   )r*  re  r   r   r"   r"   r#   r     rH  z&AsyncAdapt_psycopg_connection.rollbackc                 C  r]  r)   )r*  re  r:  r   r"   r"   r#   r:    rH  z#AsyncAdapt_psycopg_connection.closec                 C  r3  r)   )re  r   r   r"   r"   r#   r     r6  z(AsyncAdapt_psycopg_connection.autocommitc                 C  s   |  | d S r)   set_autocommitr7  r"   r"   r#   r     s   c                 C     |  | j| d S r)   )r*  re  rk  r7  r"   r"   r#   rk    r~   z,AsyncAdapt_psycopg_connection.set_autocommitc                 C  rl  r)   )r*  re  r   r7  r"   r"   r#   r     r~   z1AsyncAdapt_psycopg_connection.set_isolation_levelc                 C  rl  r)   )r*  re  set_read_onlyr7  r"   r"   r#   rm    r~   z+AsyncAdapt_psycopg_connection.set_read_onlyc                 C  rl  r)   )r*  re  set_deferrabler7  r"   r"   r#   rn    r~   z,AsyncAdapt_psycopg_connection.set_deferrablerX  r)   )r   r   r    __annotations__rY  staticmethodr   r*  r   r1  r   r   ri  r   r:  rZ  r   r[  rk  r   rm  rn  r"   r"   r"   r#   rd    s&   
 



rd  c                   @  s   e Zd ZdZeeZdS )%AsyncAdaptFallback_psycopg_connectionr"   N)r   r   r    rY  rp  r   r*  r"   r"   r"   r#   rq    s    rq  c                   @  s   e Zd ZdddZdd ZdS )	PsycopgAdaptDBAPIr,  r-  c                 C  s2   || _ | j j D ]\}}|dkr|| j|< q	d S )Nconnect)r   __dict__items)r-   r   kvr"   r"   r#   r     s   
zPsycopgAdaptDBAPI.__init__c                 O  sT   | dd}| d| jjj}t|rtt||i |S tt	||i |S )Nasync_fallbackFasync_creator_fn)
popr   r   rs  r   asboolrq  r   rd  r   )r-   argrB  rx  
creator_fnr"   r"   r#   rs    s   

zPsycopgAdaptDBAPI.connectNrX  )r   r   r    r   rs  r"   r"   r"   r#   rr    s    
rr  c                   @  s\   e Zd ZdZdZedd Zedd Zdd Zdd	 Z	d
d Z
dd Zdd Zdd ZdS )r   Tc                 C  s"   dd l }ddlm} |t_t|S )Nr   )
ExecStatus)r   r   r~  r(  r=  rr  )r   r   r~  r"   r"   r#   r     s   z#PGDialectAsync_psycopg.import_dbapic                 C  s$   |j dd}t|rtjS tjS )Nrx  F)r@  getr   r{  r   FallbackAsyncAdaptedQueuePoolAsyncAdaptedQueuePool)r   r   rx  r"   r"   r#   get_pool_class  s   
z%PGDialectAsync_psycopg.get_pool_classc                 C  s&   ddl m} |j}|||j|S r   )r   r   r   r*  r   r   )r-   r   r   r   adaptedr"   r"   r#   r     s   z'PGDialectAsync_psycopg._type_info_fetchc                 C  s   | | || d S r)   )rk  r   r   r"   r"   r#   r     s   
z*PGDialectAsync_psycopg._do_isolation_levelc                 C     | | d S r)   rj  r   r"   r"   r#   r     r0   z%PGDialectAsync_psycopg._do_autocommitc                 C  r  r)   )rm  r   r"   r"   r#   r     r0   z#PGDialectAsync_psycopg.set_readonlyc                 C  r  r)   )rn  r   r"   r"   r#   rn     r0   z%PGDialectAsync_psycopg.set_deferrablec                 C  r   r)   rf  r   r"   r"   r#   get_driver_connection  r   z,PGDialectAsync_psycopg.get_driver_connectionN)r   r   r    is_asyncr  r%  r   r  r   r   r   r   rn  r  r"   r"   r"   r#   r     s    

r   )T__doc__
__future__r   collectionsr   loggingr   typingr   r    r   _psycopg_commonr   r	   baser
   r   r   r   r   r   r   r   r   r   r   r   enginer   sqlr   util.concurrencyr   r   r   r   r   	getLoggerrx   r  r   r%   r'   r8   r  r;   r  r@   rC   rF   r  rG   r  rH   r  rI   r   rJ   r!  rK   NullTyperL   r"  rM   BooleanrN   AbstractSingleRangeImplrP   AbstractMultiRangeImplrh   ru   rv   rw   r}   r\   r(  r\  rd  rq  rr  r   r.   dialect_asyncr"   r"   r"   r#   <module>   sz   M


-  @4-