
    z<i                        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 ddl
mZ ddl
mZ ddl
mZ h dZd Z ej0                  d      d        Z ej0                  d      d        Z ej0                  d      d        Z ej0                  d      d        Z ej0                  d      d        Z ej0                  d      d        Zd Z ej0                  d      d        Z ej0                  d      d        Z ej0                  d      d        Z  ej0                  d      ddd d!       Z!y)"    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                    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tokennew_filenames	            i/home/www/utuvibe.miabetepe.com/venv/lib/python3.12/site-packages/sqlalchemy/dialects/sqlite/provision.py_format_urlr5   &   s8   
 //#
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)r5   get_dialectr   NoSuchModuleError)r   r,   	query_strs      r4   r   r   U   s@    
c64
(C 
    s   ! 77c                     t        | d |      S r9   )r5   )r   r-   s     r4   _sqlite_follower_url_from_mainr>   a   s    sD%((r6   c                     ddl m} |r| d|j                   dn|j                   d |j                  |d      fd       } |j                  |d      fd       }y )	Nr   r   r   z_test_schema.dbconnectc                 0    | j                  d d       y )NzATTACH DATABASE "z" AS test_schema)execute)dbapi_connectionconnection_recordattach_paths     r4   r@   z._sqlite_post_configure_engine.<locals>.connecto   s      	  },<=	
r6   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.   rE   s     r4   disposez._sqlite_post_configure_engine.<locals>.dispose}   s`     77>>+&IIk"::&&J.277>>(3KIIh 4L.8r6   )
sqlalchemyr   r,   listens_for)r   rL   follower_identr   r@   rM   rE   s         @r4   _sqlite_post_configure_enginerQ   f   su     '(&--H7Uvy)
 *
 Uv01  2 r6   c                    |j                  dd      }|j                  dd      }|rG|j                  dk(  r8t        j                  |d      d        }t        j                  |d      d        }|rPt	        |j
                  d	      r9d|d
<   |j
                  j                  t        j                  j
                         y y y )Nsqlite_savepointFsqlite_share_poolr7   r@   c                     d | _         y r9   )isolation_level)rC   rD   s     r4   
do_connectz9_sqlite_post_configure_testing_engine.<locals>.do_connect   s    /3,r6   beginc                 &    | j                  d       y )NBEGIN)exec_driver_sql)conns    r4   do_beginz7_sqlite_post_configure_testing_engine.<locals>.do_begin   s      )r6   _transfer_from
use_reaper)	getnamer   rO   hasattrpoolr^   r   r   )r   rL   optionsscoperS   rT   rW   r]   s           r4   %_sqlite_post_configure_testing_enginerf      s     {{#5u=$7?FKK83			69	-	4 
.	4 
		67	+	* 
,	*  6;; 01$)GL!KK&&vyy~~6 2	 r6   c                      y r9    cfgengr-   s      r4   _sqlite_create_dbrl      s    r6   c                 Z    t        |j                  j                  |j                  |       y r9   )_drop_dbs_w_identr   r    r,   ri   s      r4   _sqlite_drop_dbro      s    cgg&&

E:r6   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)rH   listdirrI   r(   r   inforK   )databasenamer,   r-   rI   fnameexts         r4   rn   rn      sX    

3 WW]]4(
sE>c%77HH8$?IIdO	r6   c                 $    |j                          y r9   )rM   )r   r   clss      r4   r   r      s    JJLr6   c                     ddgiS )Nprefixes	TEMPORARYrh   )rj   rk   s     r4   _sqlite_temp_table_keyword_argsr|      s    &&r6   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   rs   joinr$   r%   r)   rn   r    )r   identsr-   r#   s       r4   _reap_sqlite_dbsr      se    HH)3/HH&		&(9:
//#
C ?& 	?JcllJ>	??r6   F)
set_lambdasort_by_parameter_orderc                    ddl m}  ||      }|r#|j                   ||j                              }n|j	                         } |j
                  |d|i}|S )Nr   )insert)set_r   )sqlalchemy.dialects.sqliter   on_conflict_do_updateexcludedon_conflict_do_nothing	returning)rj   tabler   r   r   r   stmts          r4   _upsertr      s_     2%=D))z$--/H)I**,4>>	,CD Kr6   )"rH   r'    r   r   rL   r   r$   testingr   testing.provisionr	   r
   r   r   r   r   r   r   r   r   r   r)   r5   for_dbr>   rQ   rf   rl   ro   rn   r|   r   r   rh   r6   r4   <module>r      s   
 	   #  * ( 7 4 $ 6 > - A 8 ',^ H% & x() )) h'&  (& R &%%h/7 070 (	 	 ; ; )!((2 3  )' *' X? ? x)-u r6   