o
    Á=a­  ã                   @   sP  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 e d¡dd„ ƒZe d¡dd„ ƒZdd„ Ze	 d¡dd„ ƒZe d¡dd„ ƒZeƒ 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#S )$é   )Úcreate_engine)Úexc)Úurl)Úconfigure_follower)Ú	create_db)Údrop_db)Úfollower_url_from_main)Úlog)Úpost_configure_engine)Úrun_reap_dbs)Ú set_default_schema_on_connection)Ú stop_test_class_outside_fixtures)Útemp_table_keyword_argsÚoraclec                 C   s’   |  ¡ ;}| d| ¡ | d| ¡ | d| ¡ | d|f ¡ | d| ¡ | d| ¡ | d| ¡ W d   ƒ d S 1 sBw   Y  d S )Nzcreate user %s identified by xez#create user %s_ts1 identified by xez#create user %s_ts2 identified by xezgrant dba to %sz grant unlimited tablespace to %sz$grant unlimited tablespace to %s_ts1z$grant unlimited tablespace to %s_ts2)ÚbeginÚexec_driver_sql©ÚcfgÚengÚidentÚconn© r   úZ/var/www/html/gps/gps/lib/python3.10/site-packages/sqlalchemy/dialects/oracle/provision.pyÚ_oracle_create_db   s   
"ùr   c                 C   s   d| | _ d| | _d S ©Nú%s_ts1ú%s_ts2)Útest_schemaÚtest_schema_2)Úconfigr   r   r   r   Ú_oracle_configure_follower   ó   
r    c              
   C   sV   z|   d| ¡ t d|¡ W dS  tjy* } zt d|¡ W Y d }~dS d }~ww )Nzdrop user %s cascadezReaped db: %sTzcouldn't drop db: %sF)r   r	   Úinfor   ÚDatabaseErrorÚwarning)r   ÚdbnameÚerrr   r   r   Ú_ora_drop_ignore%   s   €þr'   c                 C   sT   |  ¡ }t||ƒ t|d| ƒ t|d| ƒ W d   ƒ d S 1 s#w   Y  d S r   )r   r'   r   r   r   r   Ú_oracle_drop_db/   s
   

"ør(   c              
   C   s°   z|  ¡ }| d¡ W d   ƒ n1 sw   Y  W n tjy4 } zt d|¡ W Y d }~nd }~ww tD ]}z|j}W n |jj	j
yJ   Y q7w d|_||_q7t ¡  d S )Nzpurge recyclebinz#purge recyclebin command failed: %sé    )r   r   r   r#   r	   r$   Ú
_all_connsÚstmtcachesizeÚdialectÚdbapiÚInterfaceErrorÚclear)r   ÚdbÚclsr   r&   Úcx_oracle_connÚscr   r   r   r   <   s$   
ý€€ÿ
þr   c                 C   s8   ddl m} | |d¡dd„ ƒ}| |d¡dd„ ƒ}d S )	Nr)   )ÚeventÚcheckoutc                 S   s   t  | ¡ d S )N)r*   Úadd)Ú	dbapi_conÚ
con_recordÚ	con_proxyr   r   r   r5   ]   s   z/_oracle_post_configure_engine.<locals>.checkoutÚcheckinc                 S   s   d|j v r| ¡  d S d S )NÚcx_oracle_xid)r"   Ú
invalidate)Údbapi_connectionÚconnection_recordr   r   r   r:   a   s   
ÿz._oracle_post_configure_engine.<locals>.checkin)Ú
sqlalchemyr4   Úlistens_for)r   ÚengineÚfollower_identr4   r5   r:   r   r   r   Ú_oracle_post_configure_engineY   s
   


rC   c                 C   s  t  d| ¡ t| ƒ}| ¡ r}t  dd |¡¡ | d¡}dd„ |D ƒ}tƒ }|D ]0}| d¡s5| d¡r6q)||v rY| |¡ d	| |v rL| d	| ¡ d
| |v rY| d
| ¡ q)d }}	t	|dƒD ]\}	}
t
||
ƒrp|d7 }qct  d||	¡ W d   ƒ d S 1 sƒw   Y  d S )Nzdb reaper connecting to %rzidentifiers in file: %sz, z‰select u.username from all_users u where username like 'TEST_%' and not exists (select username from v$session where username=u.username)c                 S   s   h | ]\}|  ¡ ’qS r   )Úlower)Ú.0Úusernamer   r   r   Ú	<setcomp>w   s    z#_reap_oracle_dbs.<locals>.<setcomp>Ú_ts1Ú_ts2r   r   r)   é   z-Dropped %d out of %d stale databases detected)r	   r"   r   r   Újoinr   ÚsetÚendswithr6   Ú	enumerater'   )r   Úidentsr   r   Úto_reapÚ	all_namesÚto_dropÚnameÚdroppedÚtotalrF   r   r   r   Ú_reap_oracle_dbsj   s8   
ÿ
€
€ÿ"çrV   c                 C   s   t  | ¡} | j|ddS )NÚxe)rF   Úpassword)Úsa_urlÚmake_urlrL   )r   r   r   r   r   Ú_oracle_follower_url_from_mainŒ   r!   r[   c                 C   s   dgddœS )NzGLOBAL TEMPORARYzPRESERVE ROWS)ÚprefixesÚoracle_on_commitr   )r   r   r   r   r   Ú_oracle_temp_table_keyword_args’   s   þr^   c                 C   s"   |  ¡ }| d| ¡ | ¡  d S )Nz#ALTER SESSION SET CURRENT_SCHEMA=%s)ÚcursorÚexecuteÚclose)r   r=   Úschema_namer_   r   r   r   Ú(_oracle_set_default_schema_on_connectionš   s   rc   N)Ú r   r   rA   r   rY   Útesting.provisionr   r   r   r   r	   r
   r   r   r   r   Úfor_dbr   r    r'   r(   rL   r*   rC   rV   r[   r^   rc   r   r   r   r   Ú<module>   sB    






!

