XׯdgddlZddlZddlmZddlmZddlZddlZddlm Z ddl m Z ddl m Z Gdde ZGd d eZGd d e ZdS) N)deque)partial) WizardPage)request_password) DataMigratorceZdZdZdZedZedZedZedZ edZ edZ d Z d Z d Zd Zd ZdZdS)Taskcf||_||_||_d|_|dSNT)ownerlabelfunc_enabledreset)selfr rr s ..\modules\db_copy_progress.py__init__z Task.__init__$s/     c|tjdd|jz|jd|jz |n#tj$r:|jd|jz|YdSt$r}t|ts&tddl }|d|jd|j|}|j||||d}~wwxYw|jd|jz|dS) NWizardz Execute '%s' z%s... %s cancelledrz Error during : z%s done) set_runninggrtlog_infor r send_infor UserInterrupt set_aborted Exception isinstance ThreadedTaskprint traceback print_excformat_exception_text send_error set_failed set_finished)rer#msgs rrunzTask.run-s  X/$*<=== Wtz1222  IIKKKK     J $*!< = = =       FF   dL11 &    ##%%%+/:::tz7W7WXY7Z7Z7Z[C J ! !# & & & OOC G  Y3444 s A**AE2 E;BE  Ec|jSNrrs r is_enabledzTask.is_enabledF }rc|jSr-_runningr/s r is_runningzTask.is_runningJr1rc|jSr-) _finishedr/s r is_finishedzTask.is_finishedNs ~rc|jSr-)_failedr/s r is_failedzTask.is_failedRs |rc|jSr-)_abortedr/s r is_abortedzTask.is_abortedVr1rc@|jo|j o|j o|j Sr-)r0r8r;r>r/s r is_pendingzTask.is_pendingZs+ft'7#7fr@rrrr'r(rMrrr r #s12XXXXXggXg""" rr cZeZdZfdZGddejZdZfdZdZ xZ S)r!cjtt||||d|_dSr-)superr!r_thread)rr rr __class__s rrzThreadedTask.__init__{s0 lD!!**5$>>> rceZdZdZdZdS)ThreadedTask.TaskThreadcRtj|||_dSr-) threadingThreadrr )rr s rrz ThreadedTask.TaskThread.__init__s$   % %d + + +DJJJrc8|jdSr-)r thread_workr/s rr+zThreadedTask.TaskThread.runs J " " $ $ $ $ $rN)rNrOrPrr+rRrr TaskThreadrYs2     % % % % %rr_c||jd|jzt jdd|jz|||_|jdS)Nz%s....rzStarting thread for '%s' ) rr rr rrr_rVstartr/s rr+zThreadedTask.runsx  X 2333 X;djHIIIt,,  rcdd|_tt|dSrB)r7rUr!r)rrWs rrzThreadedTask.resets, lD!!'')))))rc  |n #tj$rK|jd|jzt j|j dYdSt$r}tddl }| tjdd|jd|d|j|jdt!|t j||fd dYd}~dSd}~wwxYw|jd |jzt j|jddS) NrFrrzThread 'z ' failed:  rcb|d|j|zS)Nz Error: %s)r'r r%)rexcs rz*ThreadedTask.thread_work..sKt_jmqmwnNnNORnSnS`SPTPTrz %s finished)rrrr rr mforms Utilitiesperform_from_main_threadrrr"r#r$ log_errorr&strr()rrfr#s rr^zThreadedTask.thread_works  IIKKKK     J $*!< = = =   5 5d6F N N N FF    GGG        ! ! ! M(($***ccc$R S S S J ! !djjj#c((("C D D D   5 5$37T7T7TV[ \ \ \ FFFFF  ]TZ788811$2CUKKKKKsAD!1 D!:BDD!) rNrOrPrr[r\r_r+rr^ __classcell__rWs@rr!r!zs %%%%%Y%%%%***** LLLLLLLrr!ceZdZd%fd ZfdZdZdZdZdZdZ d Z d%d Z d Z d Z d ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ d Z!d!Z"d"Z#d#Z$d$Z%xZ&S)&ProgressMainViewFctt||d||_g|_d|_d|_d|_t|_ d|_ d|_ d|_ dS)NzCopy DatabasesFT) rUrprmain_tasks_currently_running_task_index_progress_indeterminate_tasks_finishedr _log_queue _showing_logs_log_progress_text_cancel_requested)rrruse_private_message_handlingrWs rrzProgressMainView.__init__st %%..t5EFFF  -1*',$$''""&!&rcV|jjj|_t |j|_tt| ||r8| |j |j s| dSdSdSdSr-)rr_schema_selection_pageschema_selector get_selected _schema_listlen _schema_countrUrppage_activatedrrtrvra)r advancingrWs rrzProgressMainView.page_activateds I<LYY[[ !233 %%44Y???   JJLLL19$BV9   9999rc|jdtjd|_|j|jddtjd|_|jd|jdtjd|_ |j|j ddtj |_ |j|j dd|j|jddtjd|_ |j d|j dtjd|_ |j |j ddtj |_|j |jdd|j|j ddtjd|_|j |jddtjtj|_|jd|jdtjtj|_|jd|j|j|jd|j|jdd|jd dS) NFTz Message Log Show Logs)content set_paddingrhnewLabel _descriptionaddnewBox_schema_progress_box set_spacing _schema_labelnewProgressBar_schema_progress _progress_box _status_label _progress _detail_labelnewPanelTitledBoxPanel_log_box set_title newTextBoxVerticalScrollBar _log_text set_read_onlyshowadvanced_buttonset_textr/s r create_uizProgressMainView.create_uis   $$$"OB// *E4888$*M%$8$8! !--b111 !--a000#_R00 !%%d&8%FFF & 5 7 7 !%%d&;UDIII 2E4@@@#]511 &&r*** &&q)))#_R00 t15$???.00 t~ud;;; +UD999#_R00 t15$???(=>>   ... !!"%%%*6+CDD $$T*** $.))) 5!!! d333 %%k22222rc<g|_|dSr-)rsrr/s r clear_taskszProgressMainView.clear_taskss  rc t|Sr-)rl)rr)s rr%z&ProgressMainView.format_exception_texts 1vv rc||f|_dSr-)_progress_info)rpctstatuss rupdate_progressz ProgressMainView.update_progresss"Fmrc|j |_|jr|jdn|jd|j|j|jdS)Nz Hide Logsr)rxrrrrrrelayoutr/s r go_advancedzProgressMainView.go_advanceds!%!33   7  ) )+ 6 6 6 6  ) )+ 6 6 6 4-... rcd|_dSr rzr/s r go_cancelzProgressMainView.go_cancel s!%rcd|_d|_d|_d|_|jd|jd|jd|j d|j d|j d|j d||r|jddSdS)NFrrT)rzrvrrtrrr set_valuerrrrr next_buttonrM create_tasksr)r clear_log_boxs rrzProgressMainView.resets!&$"-1* !&&u--- ''*** &&&   ### ##B''' ##B''' $$T***   ) N $ $R ( ( ( ( ( ) )rc|j|||f|dkrQ|jrJ|ddd}|r d|d|d}nd|z}|jd |d fd S) NPROGRESS:- rrdz- %s OUTPUTrT)rwappendrysplit)rmsg_typetextdetail progress_texts r_handle_task_outputz$ProgressMainView._handle_task_output$s $7888 z ! !d&= !::c1%%b)D 2 204fff = (D 1 O " "HmR#@ A A Atrc|jSr-rr/s rquery_cancel_statusz$ProgressMainView.query_cancel_status0s %%rc@|jd|dfdS)Nrr)rwrrIs rsend_rawzProgressMainView.send_raw3s% #r233333rc^tjd||d|ddS)NrINFOrr log_debugrrIs rrzProgressMainView.send_info6s2 h$$$   b11111rcdtjdd|z|d|ddS)NrzERROR: ERRORrrrIs rr&zProgressMainView.send_error:s6 h # ...   #r22222rcdtjdd|z|d|ddS)Nrz WARNING: WARNINGrrrIs r send_warningzProgressMainView.send_warning>s6 h C000   C44444rcb|dtj|d|ddS)Nrrr)rlocalerl)rrr*s r send_progresszProgressMainView.send_progressBs3   fjooooss-KRPPPPPrcd|_d|_d|_g|_g|_d|_d|_|j|j dk|j |j d|j d|jd|jdt#j|jt#j|j|dt.jd|jdS)NrFrzKPlease wait while the selected schemas are copied. This may take some time.Tz Starting...g?) _warnings_errorsrz_task_warnings _task_errorsrrtrrrrrrrrM back_button cancel_buttonrpush_status_query_handlerrpush_message_handlerrrrhri add_timeout update_statusr/s rrazProgressMainView.startEs% !& "-.* !&&t'9A'=>>> !!! ""#pqqq $$U+++ $$U+++ &&t,,, %d&>???  !9::: }%%%$$S$*<=====rc||jrh|j\}}d|_|dkr|jsd|_n(|jrd|_|j||j||j|j\}}|j d||j |j |dz fz|j t||j z |js|jr|jr|dS |n}#t&$rp}|d|jd|d|jd ||z|Yd}~dSd}~wwxYw|jr|dS|jr|dS|js|jsQg|_g|_|xjdz c_|jt=|jkr|dSdS) NrTFz,Copying %d of %d schemas. Current schema: %srzException in task 'z': rd%s) _flush_messagesrrurrrrrsrtrrrrfloatr5r@rz _cancelledr+rr&r r%r:r;r>r8r0rrrr7)rrr schema_idxtaskrfs rrzProgressMainView.update_status[s    .+IC"&D Qww3837D0/938D0((---   ' ' - - -;t'IJ D ##$SWacgcuW[WhistuiuWvWx%x % % % ''j(9(9D  LLNNN5 ?  OO   5   4?  "D "$D   . .! 3 . .1S5E5EEE   uts'D<< F6A%F11F6c|jdks |jdkr|d||||dt jt j|j d|j d|j d|_ d|_|jd|jd|jd|jd|js||jdkr|jddS|jdkr|jddS|j|d zdS) NrzETasks finished with warnings and/or errors; view the logs for detailsz FTrzIFinished. There were errors during execution; please review log messages.zFinished. There were warnings during execution; please review log messages. Click [Next >] to continue if you think they are not important.z Click [Next >] to continue.)rrr final_messagerrpop_message_handlerpop_status_query_handlerrrrrstoprurvrrMrrrrrxrrr/s rr7zProgressMainView._finisheds >A  !1!1 NNb c c c t))++,,,  v !!! $&&& !&&u--- &&& ',$# $$T*** $$T*** &&u--- ##B'''!        9CCEE$44S]5H5MNN #33CM4FGG'ii2$  ,33C88888rcV|jjjjD]}||jkr|cSdSr-)rrrrr r)rr r s rget_log_objectzProgressMainView.get_log_objects@9>'7  Csx'' (  rc||}tj}||_||_|j|dSr-)rrr GrtLogEntry entryTyperentriesr)rtyper messagerentrys r add_log_entryzProgressMainView.add_log_entrysS'' 55  ''))   '''''rc g|_d|jjjjd<|jjjj}|#t|jjjj}|jjj j}|~|jjj jj |jjjjj krF|jjj jj d|jjjjj dkr|}|#t|jjj j}t||jjjj|jjjj||jjj j||_ |jjj|j _t!|jjjjD]\}}|j|dzt'|t)|j|df|dzt-||jdf|dzt-||jdf|dzt'||jdf|dzt-||jdf|dzt'||jd f|dzt'||jd fgdS) Nr LiveDataCopyuserNamezReverse Engineering MigratingzGenerating CodezCreating target schemazSelecting tables to copyzCounting table rows to copyzCopying table data)rsrrrrdataBulkTransferParamsmigrationSourcepasswordr connectionrhostIdentifierparameterValuesr _transfererwbcopytables_path_bincopytable_path enumerateselectedSchemataNamesextendr!r_rev_eng_schemar _migrate_schema_fwd_eng_schema_create_schema _prepare_copy _row_count _data_copy)rsource_passwordtarget_passwordidx schema_names rrzProgressMainView.create_tasks#sk FG 3NC).8A  ".ty~/M/XYYO).8A  "y~-8G49>KiKtLDDD9>1<LZX\`\e\j\z]F]VWa]bbb&5O  ".ty~/M/XYYO'din.B.Yin4?in4?RR+/).*N' )$).*H*^ _ _   C K  Q T743G+U+UWlmmnQT4#7EEFQT4#79JKKLQ T4+>@XYYZQT4#57QRRSQ T4? source_schema source_table target_schemar target_table_objectrzcolumnTypeCastExpression:%s?,source_primary_keytarget_primary_keyz, select_expression)rrrrr:r;r<rr _working_setrr rcolumns generatedisPrimaryKeyColumnroldName customDatagetreplacer)rr<source_db_moduler r>r4 table_nametarg_schema_nametarg_table_namerOsource_pk_listtarget_pk_listcolumncasts rr.zProgressMainView._prepare_copyTs/7@CJ  F9>9CCEE9>9CCEE n nE*::5;;KLLK)99%*EEJ/?? @PQQ .>>uzJJOGL(3J(8.3=5=5D k#oj8 9!# NN- _ _#++F33Y"))*:*J*J6>*Z*Z[[["))*:*J*J6;*W*WXXX'++,IFK,WY]^^_%,,T\\#?O?_?_`f`n?o?o-p-pqqqq%,,-=-M-Mfn-]-]^^^^RURZRZ[iRjRjD k#oj8 9:N ORURZRZ[iRjRjD k#oj8 9:N OQUQZQZ[lQmQmD k#oj8 9:M N N9 n nrc|jjjjjdjsdS|j|j}| d|t|jfzdS)Nrz-%i total rows in %i tables need to be copied:) rrrrr:r;r<r$count_table_rowsrPrr)rtotals rr/zProgressMainView._row_count}smy~-5>qAH  F 11$2CDD F%QTUYUfQgQgIhhiiiiirc |jjjjjdjsdS|ddd}t|j}t|j D]6}|| ddz }| |d7| d|jrd}| dd|_d |_ |j||j}d |_d|_n#d |_d|_wxYw| d| d d}t|j D]}| |d d z|d zd}| dd}|r|\} } nd} d} | r~| |krx|dz}|d d |d } d| d|d|dd |d} |d| | | d|d d |d d| d|d | d|d d |d d| d|d | d||fz|jjrt)jddS| ddS)NrzData copy starting row_countrJrzMigrating data...FTzData copy results:rIrr rzSucceeded : copied z of z rows from rGrHrz has succeeded (z rows copied)z has FAILED (z!%i tables of %i were fully copiedzCanceled by userzNothing to be done)rrrrr:r;r<rrrPlistvaluesrVrrry_migrating_datar$ migrate_datar interruptedrr) rrb table_countr thread_countsucceeded_tasks fully_copiedinfordokcountr rs rr0zProgressMainView._data_copysy~-5>qAH  F 123334,-- *113344 B BD TXXk1-- -E  $ $T*?%@ A A A A r  ( 1L NN. / / /&+D ##'D  -"&"2"?"? dN_"`"`*.'',$$+/'',$,,,, NN2    NN/ 0 0 0LT.557788 R R&**4+@+DT.EY+Y[_`` HH[!44  $IBEB R%9,,#/!#3L.2?.C.C.CT.EYEY#ZLLOTuuV_V_V_`det`u`u`uw{}KxLxLMG&&q,@@@NNNUYZiUjUjUjlpqmAmAmACHCHCHJSJSJS$TUUUUNNNRVWfRgRgRgimn|i}i}i}@E@E@EGPGPGP$QRRRR NN>,P[A\\ ] ] ]+ <'(:;;; < < NN/ 0 0 0 0 0s 5 D$$D4)F)'rNrOrPrrrrr%rrrrrrrrr&rrrarr7r:rrrrrrrrr*r+r,r-r.r/r0rmrns@rrprps_ ' ' ' ' ' '     '3'3'3T,,,   &&&))))*   &&&444222333555QQQ>>>,444n]]]@*:::$ \ \ \D... ,,, 9 9 9 (((@---!!!%%%&&&'n'n'nRjjj41414141414141rrp)rr[ collectionsr functoolsrrrh workbench.uirmigration_source_selectionrrobjectr r!rprRrrrws,,  ######777777%%%%%%SSSSS6SSSn0L0L0L0L0L40L0L0LjJ1J1J1J1J1zJ1J1J1J1J1r