§
    eŠtj+  ã                   ó  — 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        úb/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sqlalchemy/dialects/oracle/provision.pyÚ_oracle_generate_driver_urlr.   "   sÏ   € ð ×"Ò"Ñ$Ô$€Gà�gŠgØ%˜g˜g v vÐ.ð ñ ô €Gð Ð/Ð/Ð/ð ×,Ò,Ø!Ð#7Ð8ñ
ô 
ˆˆð ×1Ò1Ø˜MÐ*ñ
ô 
ˆðØ×ÒÑÔÐð ˆøõ Ô ð ð ð Øˆtˆtðøøø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Ø×ÒÐBÀUÑJÑKÔKÐKØ×ÒÐBÀUÑJÑKÔKÐKØ×ÒÐ°%°%Ð9Ñ:Ô:Ð:Ø×ÒÐ?À%ÑGÑHÔHÐHØ×ÒÐCÀeÑKÑLÔLÐLØ×ÒÐCÀeÑ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   € ðØ×ÒÐ3°fÑ<Ñ=Ô=Ð=ÝŒ� &Ñ)Ô)Ð)ØˆtøÝÔð ð ð ÝŒÐ*¨CÑ0Ô0Ð0Øˆuˆuˆuˆuˆuøøøøðøøø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ÑÔÐÝ�c˜3œ?Ñ+Ô+Ð+Ð+Ð+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  € à	�Š‰Œð <˜Ø”<×-Ò-¨d°D¸$ÀÑEÔEð 	Hð 	HˆCØ× Ò Ð!F°°^Ô1DÐ!FÐ!FÑGÔGÐGÐGà”<×-Ò-Ø�#”/ 4¨ñ
ô 
ð 	ð 	ˆCð × Ò ØG ¤ÐGÐG°#°nÔ2EÐ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   € ð@Ý˜"ÑÔÐÐÐøÝÔð @ð @ð @ÝŒÐ9¸3Ñ?Ô?Ð?Ð?Ð?Ð?Ð?Ð?Ð?øøøøð@øøø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ñ.ô .÷ Šc‰eŒeð	Oð OÑ)��{ Eð
 ×$Ò$Ð%M¨eÐ%MÐ%M°eÐ%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Ò.ÐN°v´~Ô7NÐ3NÐ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 ™XœXÐ%Ð@¨½¸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Ý�1‰XŒXð ð ˆð	Ø/�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ð
 ./ÐÔ*Ø-/ÐÔ*Ð*Ð*øð	àˆDˆDøøøs   ‚ ™)r�   r   Úlistens_for)r   rg   Úfollower_identr   r‡   s        r-   Ú_oracle_post_configure_enginer�   Ë   sJ   € ð ÐÐÐÐÐà
×Ò�v˜yÑ)Ô)ð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, 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                 ó:   — h | ]\  }|                      ¦   «         ’ŒS © )Úlower)Ú.0Úusernames     r-   ú	<setcomp>z#_reap_oracle_dbs.<locals>.<setcomp>ö   s$   € ÐAÐAÐA©+¨8�X—^’^Ñ%Ô%Ð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Ø	�Š‰Œð 
˜ÝŒÐ*¨D¯IªI°fÑ,=Ô,=Ñ>Ô>Ð>à×&Ò&ð8ñ
ô 
ˆð
 BÐA¸ÐAÑAÔAˆ	Ý‘%”%ˆØð 	1ð 	1ˆDØ�}Š}˜VÑ$Ô$ð 1¨¯ª°fÑ(=Ô(=ð 1ØØ˜��Ø—’˜DÑ!Ô!Ð!Ø˜d‘? iÐ/Ð/Ø—K’K ¨4¡Ñ0Ô0Ð0Ø˜d‘? iÐ/Ð/Ø—K’K ¨4¡Ñ0Ô0Ð0øàÐˆ�%Ý(¨°!Ñ4Ô4ð 	ð 	‰OˆE�8Ý  hÑ/Ô/ð Ø˜1‘�øÝŒØ;¸WÀeñ	
ô 	
ð 	
ð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Ø�7Š7˜E¨Dˆ7Ñ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Ø
‡N‚NÐ8¸;ÑFÑGÔGÐGØ
‡L‚L�N„N€N€N€Nr@   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   € ð 	Ô#ð%åŒO˜FÑ#Ô#×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@   