
    Ki                        S SK r S SKrSSKJr  SSKJr  SSKJr  SSKJ	r	  SSK
Jr  SSK
Jr  SS	K
Jr  SS
K
Jr  SSK
Jr  SSK
Jr  SSK
Jr  SSK
Jr  SSK
Jr  SSK
Jr  SSK
Jr  1 SkrS r\R0                  " S5      S 5       r\R0                  " S5      S 5       r\R0                  " S5      S 5       r\R0                  " S5      S 5       r\R0                  " S5      S 5       r\R0                  " S5      S 5       rS r\R0                  " S5      S 5       r\R0                  " S5      S 5       r\R0                  " S5      S 5       r \R0                  " S5      SSS .S! j5       r!g)"    N   event)exc)url)config)	create_db)drop_db)follower_url_from_main)generate_driver_url)log)post_configure_engine)post_configure_testing_engine)run_reap_dbs) stop_test_class_outside_fixtures)temp_table_keyword_args)upsert>   pysqlite	aiosqlitepysqlcipherpysqlite_dollarpysqlite_numericc                 :   [         R                  " U 5      n Uc  U R                  5       nU R                  nUS:H  nSnU(       a  US:w  a  SU;  d   e[        R
                  " SU5      nU H2  nU[        ;   a  Uc  UnM  US;   a  M  Ub  M!  UR                  S5      nM4     U(       d   SU R                   35       eU SU 3nU(       a  USU 3-  nUS	-  nU(       a  US
-  nU R                  US9n U(       a  U R                  SS9n U R                  SU< 3S9n U $ )zMgiven 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tokennew_filenames	            f/var/www/html/dynamic-report/venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/provision.py_format_urlr5   &   s3   
 //#
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    [        XS 5      n  U R                  5         U $ ! [        R                   a     g f = fN)r5   get_dialectr   NoSuchModuleError)r   r,   	query_strs      r4   r   r   U   s>    
c4
(C 
    s     77c                     [        U S U5      $ r9   )r5   )r   r-   s     r4   _sqlite_follower_url_from_mainr>   a   s    sD%((r6   c                    ^ SSK Jn  U(       a  U SUR                   S3mOUR                   S3mUR                  " US5      U4S j5       nUR                  " US5      U4S j5       ng )	Nr   r   r   z_test_schema.dbconnectc                 0   > U R                  ST S35        g )NzATTACH DATABASE "z" AS test_schema)execute)dbapi_connectionconnection_recordattach_paths     r4   r@   ._sqlite_post_configure_engine.<locals>.connecto   s      	  },<=	
r6   engine_disposedc                 :  > [         R                  R                  T5      (       a  [         R                  " T5        U R                  R
                  nU(       aC  US:w  a<  [         R                  R                  U5      (       a  [         R                  " U5        gggg)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.   rE   s     r4   dispose._sqlite_post_configure_engine.<locals>.dispose}   sf     77>>+&&IIk"::&&J.277>>(3K3KIIh 4L.8r6   )
sqlalchemyr   r,   listens_for)r   rM   follower_identr   r@   rN   rE   s         @r4   _sqlite_post_configure_enginerS   f   sq     '(&--H7
vy)
 *
 v01  2 r6   c                    UR                  SS5      nUR                  SS5      nU(       aJ  UR                  S:X  a:  [        R                  " US5      S 5       n[        R                  " US5      S 5       nU(       aU  [	        UR
                  S	5      (       a9  SUS
'   UR
                  R                  [        R                  R
                  5        g g g )Nsqlite_savepointFsqlite_share_poolr7   r@   c                     S U l         g r9   )isolation_level)rC   rD   s     r4   
do_connect9_sqlite_post_configure_testing_engine.<locals>.do_connect   s    /3,r6   beginc                 &    U R                  S5        g )NBEGIN)exec_driver_sql)conns    r4   do_begin7_sqlite_post_configure_testing_engine.<locals>.do_begin   s      )r6   _transfer_from
use_reaper)	getnamer   rQ   hasattrpoolrb   r   r   )r   rM   optionsscoperU   rV   rY   r`   s           r4   %_sqlite_post_configure_testing_enginerj      s     {{#5u=$7?FKK83			69	-	4 
.	4 
		67	+	* 
,	*  6;; 011$)GL!KK&&vyy~~6 2	 r6   c                     g r9    cfgengr-   s      r4   _sqlite_create_dbrp      s    r6   c                 Z    [        UR                  R                  UR                  U5        g r9   )_drop_dbs_w_identr   r    r,   rm   s      r4   _sqlite_drop_dbrs      s    cgg&&

E:r6   c                     [         R                  " S5       H`  n[         R                  R                  U5      u  pEX$;   d  M+  US;   d  M3  [        R
                  " SU5        [         R                  " U5        Mb     g )N.)r   z.db.encz!deleting SQLite database file: %s)rI   listdirrJ   r(   r   inforL   )databasenamer,   r-   rJ   fnameexts         r4   rr   rr      sO    

3WW]]4(
>c%77HH8$?IIdO	  r6   c                 $    UR                  5         g r9   )rN   )r   r   clss      r4   r   r      s    JJLr6   c                     SS/0$ )Nprefixes	TEMPORARYrl   )rn   ro   s     r4   _sqlite_temp_table_keyword_argsr      s    &&r6   c                    [         R                  " SU 5        [         R                  " SSR                  U5      5        [        R                  " U 5      n U H&  n[
         H  n[        U R                  X25        M     M(     g )Nzdb reaper connecting to %rzidentifiers in file: %sz, )r   rw   joinr$   r%   r)   rr   r    )r   identsr-   r#   s       r4   _reap_sqlite_dbsr      sY    HH)3/HH&		&(9:
//#
C&JcllJ> ' r6   F)
set_lambdasort_by_parameter_orderc                    SSK Jn  U" U5      nU(       a   UR                  U" UR                  5      S9nOUR	                  5       nUR
                  " USU06nU$ )Nr   )insert)set_r   )sqlalchemy.dialects.sqliter   on_conflict_do_updateexcludedon_conflict_do_nothing	returning)rn   tabler   r   r   r   stmts          r4   _upsertr      s]     2%=D))z$--/H)I**,>>	,CD Kr6   )"rI   r'    r   r   rM   r   r$   testingr   testing.provisionr	   r
   r   r   r   r   r   r   r   r   r   r)   r5   for_dbr>   rS   rj   rp   rs   rr   r   r   r   rl   r6   r4   <module>r      s   
 	   #  * ( 7 4 $ 6 > - A 8 ',^ H% & x() )) h'&  (& R %%h/7 070 (	 	 	; ; "((2 3 )' *' X? ? x)-u r6   