
    XeIi+                        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 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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              Z#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'             Z* ej        d          d(             Z+ ej        d          d)             Z, ej        d          d*             Z-dS ),    N   )create_engine)exc)inspect)url)configure_follower)	create_db)#drop_all_schema_objects_post_tables)"drop_all_schema_objects_pre_tables)drop_db)follower_url_from_main)generate_driver_url)is_preferred_driver)log)post_configure_engine)post_configure_testing_engine)run_reap_dbs) set_default_schema_on_connection) stop_test_class_outside_fixtures)temp_table_keyword_args)update_db_opts)warn_test_suiteoraclec                     |                                  }|                     |d|          }|dv r|                    ddg          }n|                    ddg          }	 |                                 |S # t
          j        $ r Y d S w xY w)N+)
drivername)oracledboracledb_async)retry_count5)retry_delay2r   r!   )get_backend_namesetupdate_query_pairsdifference_update_queryget_dialectr   NoSuchModuleError)r   driver	query_strbackendnew_urls        i/var/www/html/MCyber-Diagnostic/venv/lib/python3.11/site-packages/sqlalchemy/dialects/oracle/provision.py_oracle_generate_driver_urlr.   "   s     ""$$Ggg%ggvv.   G /// ,,!#78
 
 11M*
 
      tts   $A: :BBc                 @   |                                 5 }|                    d|z             |                    d|z             |                    d|z             |                    d|           |                    d|z             |                    d|z             |                    d|z             |                    d|z             |                    d	|z             |                    d
|z             d d d            d S # 1 swxY w 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 z grant unlimited tablespace to %sz$grant unlimited tablespace to %s_ts1z$grant unlimited tablespace to %s_ts2zgrant create table to %szgrant create table to %s_ts1zgrant create table to %s_ts2)beginexec_driver_sqlcfgengidentconns       r-   _oracle_create_dbr7   C   s   
 
 E>FGGGBUJKKKBUJKKK%%9:::?%GHHHCeKLLLCeKLLL7%?@@@;eCDDD;eCDDDE E E E E E E E E E E E E E E E E Es   C1DDDc                 .    d|z  | _         d|z  | _        d S N%s_ts1%s_ts2)test_schematest_schema_2)configr5   s     r-   _oracle_configure_followerr?   V   s"    !E)F#e+F    c                     	 |                      d|z             t          j        d|           dS # t          j        $ r }t          j        d|           Y d }~dS d }~ww xY w)Nzdrop user %s cascadezReaped db: %sTzcouldn't drop db: %sF)r1   r   infor   DatabaseErrorwarning)r6   dbnameerrs      r-   _ora_drop_ignorerG   \   sz    3f<===&)))t   *C000uuuuus   -1 A  AA c                 N    t          |           t          || j                   d S N)_purge_recyclebinr<   r3   r4   s     r-   '_ora_drop_all_schema_objects_pre_tablesrL   f   s(    cc3?+++++r@   c           	         |                                 5 }|j                            |d d d           D ] }|                    d|d                     !|j                            || j        d d           D ](}|                    d| j         d|d                     )t          |                                          D ]}|                    d|            	 d d d            d S # 1 swxY w Y   d S )Nzdrop synonym synonym_name.zdrop table )r0   dialect_get_synonymsr1   r<   r   get_temp_table_names)r3   r4   r6   syn	tmp_tables        r-   (_ora_drop_all_schema_objects_post_tablesrU   l   sj   	 <<--dD$EE 	H 	HC  !F^1D!F!FGGGG<--#/4
 
 	 	C   GGG#n2EGG    !;;== 	< 	<I  !:y!:!:;;;;	<< < < < < < < < < < < < < < < < < <s   CC))C-0C-c                     |                                 5 }t          ||           t          |d|z             t          |d|z             d d d            d S # 1 swxY w Y   d S r9   )r0   rG   r2   s       r-   _oracle_drop_dbrW   }   s    	 1 	u%%%x%/000x%/0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1s   7AA Ac                     	 t          |           d S # t          j        $ r }t          j        d|           Y d }~d S d }~ww xY w)Nz#purge recyclebin command failed: %s)rJ   r   rC   r   rD   )r>   dbclsrF   s       r-   %_ora_stop_test_class_outside_fixturesr[      sg    @" @ @ @93?????????@s    A=Ac                 `   |                                  5 }||                    d           nh|                    dd|j                            |          i                                          D ]%\  }}}|                    d| d| d| d           &d d d            d S # 1 swxY w Y   d S )Nzpurge recyclebinzWselect owner, object_name,type from dba_recyclebin where owner=:schema and type='TABLE'schemazpurge  z."")r0   r1   rP   denormalize_nameall)r4   r]   r6   ownerobject_nametype_s         r-   rJ   rJ      s+   	 O>   !34444 .2-A-AF4<88@@A. . cee	O O){E
 $$%Me%M%Me%M%M{%M%M%MNNNNO O O O O O O O O O O O O O O O O Os   BB##B'*B'c                 <    |j         j        dk    o|j         j         S )ztestablish oracledb as the preferred driver to use for tests, even
    though cx_Oracle is still the "default" driverr   )rP   r)   is_async)r3   engines     r-   _oracle_is_preferred_driverrh      s!    
 > J.Nv~7N3NNr@   c                 L   | j         dk    sJ d }d }t          d          D ]o}	  | j        j        |i |c S # | j        j        | j        j        f$ r;}|} ||          r(t          d           t          j        d           Y d }~g d }~ww xY w|t          d          |d S )N	cx_oraclec                 F    dt          |           v pdt          |           v S )NzDPY-6005z	ORA-12516)str)rF   s    r-   _is_couldnt_connectz0_connect_with_retry.<locals>._is_couldnt_connect   s#    SXX%@C)@@r@      zOracle database reconnecting...   z"connect failed after five attempts)
r)   rangeloaded_dbapiconnectrC   OperationalErrorr   timesleep	Exception)rP   conn_reccargscparamsrm   err__rF   s           r-   _connect_with_retryr|      s   >[((((A A A D1XX  	/7'/B'BBBBB . 1
 
	 
	 
	 D""3''  ABBB
1
	 <==4G s   9B0B
	B

Bc                 n    ddl m} |j        j        dk    r|                    |dt
                     d S d S )Nr   eventrj   
do_connect) r   rP   r)   listenr|   )r   rg   optionsscoper   s        r-   %_oracle_post_configure_testing_enginer      sI    ~++V\+>????? ,+r@   c                 P    ddl m} |                    |d          d             }d S )Nr   r~   checkinc                 B    	 | j         }d| _         || _         d S #  Y d S xY w)Nr   )stmtcachesize)dbapi_connectionconnection_recordscs      r-   r   z._oracle_post_configure_engine.<locals>.checkin   s9     	0!/B
 ./*-/***	DDs    )r   r   listens_for)r   rg   follower_identr   r   s        r-   _oracle_post_configure_enginer      sJ     
vy))0 0 *)0 0 0r@   c                    t          j        d|            t          |           }|                                5 }t          j        dd                    |                     |                    d          }d |D             }t                      }|D ]}|                    d          s|                    d          r-||v rS|                    |           d|z  |v r|                    d|z             d	|z  |v r|                    d	|z             d
x}}	t          |d          D ]\  }	}
t          ||
          r|dz  }t          j        d||	           d d d            d S # 1 swxY w Y   d S )Nzdb reaper connecting to %rzidentifiers in file: %sz, zselect u.username from all_users u where username like 'TEST_%' and not exists (select username from v$session where username=u.username)c                 :    h | ]\  }|                                 S  )lower).0usernames     r-   	<setcomp>z#_reap_oracle_dbs.<locals>.<setcomp>   s$    AAA+8X^^%%AAAr@   _ts1_ts2r:   r;   r      z-Dropped %d out of %d stale databases detected)r   rB   r   r0   joinr1   r$   endswithadd	enumeraterG   )r   identsr4   r6   to_reap	all_namesto_dropnamedroppedtotalr   s              r-   _reap_oracle_dbsr      s   H)3///


C	 
*DIIf,=,=>>>&&8
 

 BAAAA	%% 	1 	1D}}V$$ 1f(=(= 1D!!!d?i//KK4000d?i//KK4000%(!44 	 	OE8h// 1;We	
 	
 	
1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   D$E**E.1E.c                 X    t          j        |           } |                     |d          S )Nxe)r   password)sa_urlmake_urlr$   )r   r5   s     r-   _oracle_follower_url_from_mainr     s'    
/#

C77ED7111r@   c                     dgddS )NzGLOBAL TEMPORARYzPRESERVE ROWS)prefixesoracle_on_commitr   rK   s     r-   _oracle_temp_table_keyword_argsr     s     ((+  r@   c                     |                                 }|                    d|z             |                                 d S )Nz#ALTER SESSION SET CURRENT_SCHEMA=%s)cursorexecuteclose)r3   r   schema_namer   s       r-   (_oracle_set_default_schema_on_connectionr     s>     $$&&F
NN8;FGGG
LLNNNNNr@   c                 z    |j         r1t          j        |                                           dk    r	d|d<   dS dS dS )zCSet database options (db_opts) for a test database that we created.r   T
thick_modeN)oracledb_thick_moder   r   get_driver_name)db_urldb_optsr   s      r-   _update_db_optsr   "  sP     	#%OF##3355CC $	% %CCr@   rI   ).rt   r   r   r   r   rg   r   r   testing.provisionr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   testing.warningsr   for_dbr.   r7   r?   rG   rL   rU   rW   r[   rJ   rh   r|   r   r   r   r   r   r   r   r   r@   r-   <module>r      sL                      # # # # # # 3 3 3 3 3 3 * * * * * * D D D D D D C C C C C C ( ( ( ( ( ( 7 7 7 7 7 7 4 4 4 4 4 4 4 4 4 4 4 4 $ $ $ $ $ $ 6 6 6 6 6 6 > > > > > > - - - - - - A A A A A A A A A A A A 8 8 8 8 8 8 / / / / / / / / / / / / H%%  &%@ (E E E$ 8$$, , %$,
   +#*844, , 54,
 ,$+H55< < 65<  	1 	1 	1 )!(22@ @ 32@O O O O  H%%O O &%OH H H2 &%h//@ @ 0/@ h''0 0 ('0< X
 
 
@ x((2 2 )(2
  ))  *) )!(22  32 x  % % ! % % %r@   