a
    8g                      @   sf  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 h dZdd Zeddd Ze
ddd Zeddd Zeddd Ze	ddd Zdd Zeddd  Zedd!d" Zedd#d$ Zeddd%d&d'd(ZdS ))    N   )exc)url)	create_db)drop_db)follower_url_from_main)generate_driver_url)log)post_configure_engine)run_reap_dbs) stop_test_class_outside_fixtures)temp_table_keyword_args)upsert>   Zpysqlite_numericZpysqliteZ	aiosqlitepysqlcipherZpysqlite_dollarc           	      C   s  t | } |du r|  }| j}|dk}d}|r|dkrd|vsDJ td|}| }|D ]:}|tv rv|du rZ|}qZqZ|dv rqZqZ|du rZ|d}qZ|sJ d| j | d| }|r|d| 7 }|d	7 }|r|d
7 }| j|d} |r| jdd} | jd|f d} | S )zUgiven a sqlite url + desired driver + ident, make a canonical
    URL out of it

    Nr   :memory:Ztest_schemaz[_\.])dbenc_z#sqlite filename has no name token: .dbz.enc)databasetest)passwordz	sqlite+%s)
drivername)	sa_urlmake_urlZget_driver_namer   resplit_drivernamesstripset)	r   driveridentfilenameZ	needs_encZ
name_tokentokensZnew_filenametoken r%   /var/www/vosh/data/www/fastworkle.ru/webshop-tgbot-v.1.0/venv/lib/python3.9/site-packages/sqlalchemy/dialects/sqlite/provision.py_format_url$   s>    
r'   Zsqlitec                 C   s8   t | |d } z|   W n tjy.   Y d S 0 | S d S N)r'   get_dialectr   ZNoSuchModuleError)r   r    Z	query_strr%   r%   r&   r   U   s    r   c                 C   s   t | d |S r(   )r'   )r   r!   r%   r%   r&   _sqlite_follower_url_from_maina   s    r*   c                    sd   ddl m} |r$| d|j d n|j d ||d fdd}||d fd	d
}d S )Nr   )eventr   z_test_schema.dbconnectc                    s   |  d  d d S )NzATTACH DATABASE "z" AS test_schema)execute)Zdbapi_connectionZconnection_recordZattach_pathr%   r&   r,   o   s    

z._sqlite_post_configure_engine.<locals>.connectZengine_disposedc                    sD   t j rt   | jj}|r@|dkr@t j|r@t | dS )zmost databases should be dropped using
        stop_test_class_outside_fixtures

        however a few tests like AttachedDBTest might not get triggered on
        that main hook

        r   N)ospathexistsremover   r   )enginer"   r.   r%   r&   dispose}   s
    

z._sqlite_post_configure_engine.<locals>.dispose)Z
sqlalchemyr+   r    Zlistens_for)r   r3   Zfollower_identr+   r,   r4   r%   r.   r&   _sqlite_post_configure_enginef   s    

r5   c                 C   s   d S r(   r%   cfgengr!   r%   r%   r&   _sqlite_create_db   s    r9   c                 C   s   t |jj|j| d S r(   )_drop_dbs_w_identr   r   r    r6   r%   r%   r&   _sqlite_drop_db   s    r;   c                 C   sJ   t dD ]:}t j|\}}||v r
|dv r
td| t | q
d S )N.)r   z.db.encz!deleting SQLite database file: %s)r/   listdirr0   r   r	   infor2   )Zdatabasenamer    r!   r0   fnameextr%   r%   r&   r:      s
    r:   c                 C   s   |   d S r(   )r4   )configr   clsr%   r%   r&   r      s    r   c                 C   s
   ddgiS )Nprefixes	TEMPORARYr%   )r7   r8   r%   r%   r&   _sqlite_temp_table_keyword_args   s    rE   c                 C   sN   t d|  t dd| t| } |D ]}tD ]}t| j|| q4q,d S )Nzdb reaper connecting to %rzidentifiers in file: %sz, )r	   r>   joinr   r   r   r:   r   )r   Zidentsr!   r   r%   r%   r&   _reap_sqlite_dbs   s    
rG   F)
set_lambdasort_by_parameter_orderc                C   sH   ddl m} ||}|r,|j||jd}n| }|j|d|i}|S )Nr   )insert)set_rI   )Zsqlalchemy.dialects.sqliterJ   Zon_conflict_do_updateZexcludedZon_conflict_do_nothing	returning)r7   tablerL   rH   rI   rJ   stmtr%   r%   r&   _upsert   s    rO   )r/   r    r   r3   r   r   Ztesting.provisionr   r   r   r   r	   r
   r   r   r   r   r   r'   Zfor_dbr*   r5   r9   r;   r:   rE   rG   rO   r%   r%   r%   r&   <module>	   sF   	1


)




	