o
    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>   pysqlite	aiosqlitepysqlcipherpysqlite_dollarpysqlite_numericc           	      C   s  t | } |du r|  }| j}|dk}d}|rs|dkrsd|vs"J td|}| }|D ]}|tv r:|du r9|}q-|dv r?q-|du rH|d}q-|sSJ d| j | d| }|rc|d| 7 }|d	7 }|rm|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:test_schemaz[_\.])dbenc_z#sqlite filename has no name token: .dbz.enc)databasetest)passwordz	sqlite+%s)
drivername)	sa_urlmake_urlget_driver_namer   resplit_drivernamesstripset)	r   driveridentfilename	needs_enc
name_tokentokensnew_filenametoken r.   f/var/www/html/ecg_monitoring/venv/lib/python3.10/site-packages/sqlalchemy/dialects/sqlite/provision.py_format_url$   s@   

r0   sqlitec                 C   s2   t | |d } z|   W | S  tjy   Y d S w N)r0   get_dialectr   NoSuchModuleError)r   r&   	query_strr.   r.   r/   r   U   s   
r   c                 C   s   t | d |S r2   )r0   )r   r'   r.   r.   r/   _sqlite_follower_url_from_maina      r6   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)dbapi_connectionconnection_recordattach_pathr.   r/   r9   o   s   

z._sqlite_post_configure_engine.<locals>.connectengine_disposedc                    sP   t j rt   | jj}|r"|dkr$t j|r&t | dS dS dS 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)
sqlalchemyr8   r&   listens_for)r   rD   follower_identr8   r9   rE   r.   r=   r/   _sqlite_post_configure_enginef   s   

rI   c                 C   s   d S r2   r.   cfgengr'   r.   r.   r/   _sqlite_create_db   s   rM   c                 C   s   t |jj|j| d S r2   )_drop_dbs_w_identr   r   r&   rJ   r.   r.   r/   _sqlite_drop_db   s   rO   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@   listdirrA   r"   r	   inforC   )databasenamer&   r'   rA   fnameextr.   r.   r/   rN      s   
rN   c                 C   s   |   d S r2   )rE   )configr   clsr.   r.   r/   r      r7   r   c                 C   s
   ddgiS )Nprefixes	TEMPORARYr.   )rK   rL   r.   r.   r/   _sqlite_temp_table_keyword_args   s   
rZ   c                 C   sN   t d|  t dd| t| } |D ]}tD ]	}t| j|| qqd S )Nzdb reaper connecting to %rzidentifiers in file: %sz, )r	   rR   joinr   r   r#   rN   r   )r   identsr'   r   r.   r.   r/   _reap_sqlite_dbs   s   
r]   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_r_   )sqlalchemy.dialects.sqliter`   on_conflict_do_updateexcludedon_conflict_do_nothing	returning)rK   tablerf   r^   r_   r`   stmtr.   r.   r/   _upsert   s   ri   )r@   r!    r   rD   r   r   testing.provisionr   r   r   r   r	   r
   r   r   r   r   r#   r0   for_dbr6   rI   rM   rO   rN   rZ   r]   ri   r.   r.   r.   r/   <module>   sH   	1


)




	