
    g                      p   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 Z ej(                  d      d        Z e
j(                  d      d        Z ej(                  d      d        Z ej(                  d      d        Z e	j(                  d      d        Zd Z ej(                  d      d        Z ej(                  d      d        Z ej(                  d      d        Z ej(                  d      dddd       Zy)    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                    t        j                  |       } || j                         }| j                  }|dk(  }d}|r|dk7  rd|vsJ t	        j
                  d|      }| }|D ](  }|t        v r||}|dv r||j                  d      }* |sJ d| j                          | d| }|r|d| z  }|d	z  }|r|d
z  }| j                  |      } |r| j                  d      } | j                  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+)
drivername)	sa_urlmake_urlget_driver_namer   resplit_drivernamesstripset)	r   driveridentfilename	needs_enc
name_tokentokensnew_filenametokens	            c/var/www/html/AdoubleTech/venv/lib/python3.12/site-packages/sqlalchemy/dialects/sqlite/provision.py_format_urlr1   $   s?   
 //#
C~$$&||H-'IJH
*H,,,(H-  	.E$>"F-'#"[[-
	. O@OOz$Qvh/awK'LF"Lgg|g,ggvg&
''F4'
5CJ    sqlitec                 t    t        | |d       } 	 | j                          | S # t        j                  $ r Y y w xY wN)r1   get_dialectr   NoSuchModuleError)r   r(   	query_strs      r0   r	   r	   U   s@    
c64
(C 
    s   ! 77c                     t        | d |      S r5   )r1   )r   r)   s     r0   _sqlite_follower_url_from_mainr:   a   s    sD%((r2   c                     ddl m} |r| d|j                   dn|j                   d|j                  |d      fd       }|j                  |d      fd       }y )	Nr   )eventr   z_test_schema.dbconnectc                 0    | j                  d d       y )NzATTACH DATABASE "z" AS test_schema)execute)dbapi_connectionconnection_recordattach_paths     r0   r=   z._sqlite_post_configure_engine.<locals>.connecto   s      	  },<=	
r2   engine_disposedc                    t         j                  j                        rt        j                         | j                  j
                  }|r<|dk7  r6t         j                  j                  |      rt        j                  |       yyyy)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*   rB   s     r0   disposez._sqlite_post_configure_engine.<locals>.dispose}   s`     77>>+&IIk"::&&J.277>>(3KIIh 4L.8r2   )
sqlalchemyr<   r(   listens_for)r   rI   follower_identr<   r=   rJ   rB   s         @r0   _sqlite_post_configure_enginerN   f   sq     '(&--H7
vy)
 *
 v01  2 r2   c                      y r5    cfgengr)   s      r0   _sqlite_create_dbrT      s    r2   c                 Z    t        |j                  j                  |j                  |       y r5   )_drop_dbs_w_identr   r   r(   rQ   s      r0   _sqlite_drop_dbrW      s    cgg&&

E:r2   c                     t        j                  d      D ]Y  }t         j                  j                  |      \  }}||v s*|dv s/t	        j
                  d|       t        j                  |       [ y )N.)r   z.db.encz!deleting SQLite database file: %s)rE   listdirrF   r$   r
   inforH   )databasenamer(   r)   rF   fnameexts         r0   rV   rV      sX    

3 WW]]4(
sE>c%77HH8$?IIdO	r2   c                 $    |j                          y r5   )rJ   )configr   clss      r0   r   r      s    JJLr2   c                     ddgiS )Nprefixes	TEMPORARYrP   )rR   rS   s     r0   _sqlite_temp_table_keyword_argsre      s    &&r2   c                     t        j                  d|        t        j                  ddj                  |             t        j                  |       } |D ]$  }t
        D ]  }t        | j                  ||        & y )Nzdb reaper connecting to %rzidentifiers in file: %sz, )r
   r[   joinr    r!   r%   rV   r   )r   identsr)   r   s       r0   _reap_sqlite_dbsri      se    HH)3/HH&		&(9:
//#
C ?& 	?JcllJ>	??r2   F)
set_lambdasort_by_parameter_orderc                    ddl m}  ||      }|r#|j                   ||j                              }n|j	                         } |j
                  |d|i}|S )Nr   )insert)set_rk   )sqlalchemy.dialects.sqliterm   on_conflict_do_updateexcludedon_conflict_do_nothing	returning)rR   tablers   rj   rk   rm   stmts          r0   _upsertrv      s_     2%=D))z$--/H)I**,4>>	,CD Kr2   )rE   r#    r   rI   r   r    testing.provisionr   r   r   r	   r
   r   r   r   r   r   r%   r1   for_dbr:   rN   rT   rW   rV   re   ri   rv   rP   r2   r0   <module>rz      ss   
 	  # * ( 7 4 $ 6 - A 8 '.b H% & x() )) h'&  (& R (	 	 ; ; )!((2 3  )' *' X? ? x)-u r2   