o
    =ax&                     @   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
 G d	d
 d
ZG dd deZG dd dZG dd deZG dd dZG dd deZG dd deZeZdS )aV  

.. dialect:: sqlite+aiosqlite
    :name: aiosqlite
    :dbapi: aiosqlite
    :connectstring: sqlite+aiosqlite:///file_path
    :url: https://pypi.org/project/aiosqlite/

The aiosqlite dialect provides support for the SQLAlchemy asyncio interface
running on top of pysqlite.

aiosqlite is a wrapper around pysqlite that uses a background thread for
each connection.   It does not actually use non-blocking IO, as SQLite
databases are not socket-based.  However it does provide a working asyncio
interface that's useful for testing and prototyping purposes.

Using a special asyncio mediation layer, the aiosqlite dialect is usable
as the backend for the :ref:`SQLAlchemy asyncio <asyncio_toplevel>`
extension package.

This dialect should normally be used only with the
:func:`_asyncio.create_async_engine` engine creation function::

    from sqlalchemy.ext.asyncio import create_async_engine
    engine = create_async_engine("sqlite+aiosqlite:///filename")

The URL passes through all arguments to the ``pysqlite`` driver, so all
connection arguments are the same as they are for that of :ref:`pysqlite`.


   )SQLiteExecutionContext)SQLiteDialect_pysqlite   )pool)util)await_fallback)
await_onlyc                   @   s`   e Zd ZdZdZdd Zdd Zddd	Zd
d Zdd Z	dd Z
dd ZdddZdd ZdS )AsyncAdapt_aiosqlite_cursor)_adapt_connection_connectiondescriptionawait__rows	arraysizerowcount	lastrowidFc                 C   s2   || _ |j| _|j| _d| _d| _d | _g | _d S )Nr   )r
   r   r   r   r   r   r   )selfadapt_connection r   Z/var/www/html/gps/gps/lib/python3.10/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py__init__>   s   
z$AsyncAdapt_aiosqlite_cursor.__init__c                 C   s   g | j d d < d S Nr   r   r   r   r   closeG   s   z!AsyncAdapt_aiosqlite_cursor.closeNc              
   C   s   zU|  | j }|d u r|  || n	|  ||| |jr8|j| _d | _| _| js7|  | | _	nd | _|j| _|j| _| jsP|  |
  W d S || _W d S  tyn } z| j| W Y d }~d S d }~ww )Nr   )r   r   cursorexecuter   r   r   server_sidefetchallr   r   _cursor	Exceptionr
   _handle_exception)r   	operation
parametersr    errorr   r   r   r   J   s*   z#AsyncAdapt_aiosqlite_cursor.executec              
   C   s   z&|  | j }|  ||| d | _|j| _|j| _|  |  W d S  ty? } z| j	
| W Y d }~d S d }~ww r   )r   r   r   executemanyr   r   r   r   r!   r
   r"   )r   r#   seq_of_parametersr    r%   r   r   r   r&   e   s   z'AsyncAdapt_aiosqlite_cursor.executemanyc                 G   s   d S r   r   )r   
inputsizesr   r   r   setinputsizesp   s   z)AsyncAdapt_aiosqlite_cursor.setinputsizesc                 c   s$    | j r| j dV  | j sd S d S N    r   popr   r   r   r   __iter__s   s   z$AsyncAdapt_aiosqlite_cursor.__iter__c                 C   s   | j r	| j dS d S r*   r,   r   r   r   r   fetchonew   s   z$AsyncAdapt_aiosqlite_cursor.fetchonec                 C   s8   |d u r| j }| jd| }| j|d  | jd d < |S r*   )r   r   )r   sizeretvalr   r   r   	fetchmany}   s
   z%AsyncAdapt_aiosqlite_cursor.fetchmanyc                 C   s    | j d d  }g | j d d < |S r   r   )r   r1   r   r   r   r      s   z$AsyncAdapt_aiosqlite_cursor.fetchallr   )__name__
__module____qualname__	__slots__r   r   r   r   r&   r)   r.   r/   r2   r   r   r   r   r   r	   0   s    	

r	   c                       sF   e Zd ZdZdZ fddZdd Zdd Zdd
dZdd Z	  Z
S )AsyncAdapt_aiosqlite_ss_cursorr    Tc                    s   t  j|i | d | _d S r   )superr   r    )r   argkw	__class__r   r   r      s   
z'AsyncAdapt_aiosqlite_ss_cursor.__init__c                 C   s(   | j d ur| | j   d | _ d S d S r   )r    r   r   r   r   r   r   r      s   

z$AsyncAdapt_aiosqlite_ss_cursor.closec                 C      |  | j S r   )r   r    r/   r   r   r   r   r/         z'AsyncAdapt_aiosqlite_ss_cursor.fetchoneNc                 C   s"   |d u r| j }| | jj|dS )N)r0   )r   r   r    r2   )r   r0   r   r   r   r2      s   z(AsyncAdapt_aiosqlite_ss_cursor.fetchmanyc                 C   r=   r   )r   r    r   r   r   r   r   r      r>   z'AsyncAdapt_aiosqlite_ss_cursor.fetchallr   )r3   r4   r5   r6   r   r   r   r/   r2   r   __classcell__r   r   r;   r   r7      s    
r7   c                   @   st   e Zd ZeeZ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 Zdd ZdS )AsyncAdapt_aiosqlite_connectiondbapir   c                 C   s   || _ || _d S r   rA   )r   rB   
connectionr   r   r   r      s   
z(AsyncAdapt_aiosqlite_connection.__init__c                 C   s   | j jS r   )r   isolation_levelr   r   r   r   rD      s   z/AsyncAdapt_aiosqlite_connection.isolation_levelc              
   C   s@   z|| j _W d S  ty } z| | W Y d }~d S d }~ww r   )r   rD   r!   r"   )r   valuer%   r   r   r   rD      s   c              
   O   sP   z|  | jj|i | W d S  ty' } z| | W Y d }~d S d }~ww r   )r   r   create_functionr!   r"   )r   argsr:   r%   r   r   r   rF      s   z/AsyncAdapt_aiosqlite_connection.create_functionFc                 C   s   |rt | S t| S r   )r7   r	   )r   r   r   r   r   r      s   z&AsyncAdapt_aiosqlite_connection.cursorc                 O   s   |  | jj|i |S r   )r   r   r   )r   rG   r:   r   r   r   r      s   z'AsyncAdapt_aiosqlite_connection.executec              
   C   H   z|  | j  W d S  ty# } z| | W Y d }~d S d }~ww r   )r   r   rollbackr!   r"   r   r%   r   r   r   rI         z(AsyncAdapt_aiosqlite_connection.rollbackc              
   C   rH   r   )r   r   commitr!   r"   rJ   r   r   r   rL      rK   z&AsyncAdapt_aiosqlite_connection.commitc              
   C   rH   r   )r   r   r   r!   r"   rJ   r   r   r   r      s   z%AsyncAdapt_aiosqlite_connection.closec                 C   s8   t |tr|jd dkrtj| jjd|d d S |)Nr+   no active connection)from_)
isinstance
ValueErrorrG   r   raise_rB   sqliteOperationalErrorrJ   r   r   r   r"      s   
z1AsyncAdapt_aiosqlite_connection._handle_exceptionN)F)r3   r4   r5   staticmethodr   r   r6   r   propertyrD   setterrF   r   r   rI   rL   r   r"   r   r   r   r   r@      s    


r@   c                   @   s   e Zd ZdZeeZdS )'AsyncAdaptFallback_aiosqlite_connectionr   N)r3   r4   r5   r6   rT   r   r   r   r   r   r   rW      s    rW   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )AsyncAdapt_aiosqlite_dbapic                 C   s   || _ || _d| _|   d S )Nqmark)	aiosqliterR   
paramstyle_init_dbapi_attributes)r   rZ   rR   r   r   r   r      s   z#AsyncAdapt_aiosqlite_dbapi.__init__c                 C   s^   dD ]}t | |t| j| qdD ]}t | |t| j| qdD ]}t | |t| j| q d S )N)DatabaseErrorErrorIntegrityErrorNotSupportedErrorrS   ProgrammingErrorsqlite_versionsqlite_version_info)PARSE_COLNAMESPARSE_DECLTYPES)Binary)setattrgetattrrZ   rR   )r   namer   r   r   r\      s   
z1AsyncAdapt_aiosqlite_dbapi._init_dbapi_attributesc                 O   sR   | dd}d|d< | jj|i |}d|_t|r"t| t|S t| t	|S )Nasync_fallbackFcheck_same_threadT)
r-   rZ   connectdaemonr   asboolrW   r   r@   r   )r   r9   r:   rj   rC   r   r   r   rl     s   
z"AsyncAdapt_aiosqlite_dbapi.connectN)r3   r4   r5   r   r\   rl   r   r   r   r   rX      s    rX   c                   @   s   e Zd Zdd ZdS ) SQLiteExecutionContext_aiosqlitec                 C   s   | j jddS )NT)r   )_dbapi_connectionr   r   r   r   r   create_server_side_cursor(  s   z:SQLiteExecutionContext_aiosqlite.create_server_side_cursorN)r3   r4   r5   rq   r   r   r   r   ro   '  s    ro   c                       sH   e Zd ZdZdZdZdZeZe	dd Z
e	dd Z fddZ  ZS )	SQLiteDialect_aiosqliterZ   Tc                 C   s   t tdtdS )NrZ   sqlite3)rX   
__import__)clsr   r   r   rB   6  s   zSQLiteDialect_aiosqlite.dbapic                 C   s   |  |rtjS tjS r   )_is_url_file_dbr   NullPool
StaticPool)ru   urlr   r   r   get_pool_class<  s   
z&SQLiteDialect_aiosqlite.get_pool_classc                    s.   t || jjrdt|v rdS t |||S )NrM   T)rO   rB   rS   strr8   is_disconnect)r   erC   r   r;   r   r   r|   C  s   
z%SQLiteDialect_aiosqlite.is_disconnect)r3   r4   r5   driversupports_statement_cacheis_asyncsupports_server_side_cursorsro   execution_ctx_clsclassmethodrB   rz   r|   r?   r   r   r;   r   rr   ,  s    

rr   N)__doc__baser   pysqliter    r   r   util.concurrencyr   r   r	   r7   r@   rW   rX   ro   rr   dialectr   r   r   r   <module>   s    [B: 