9iBSrSSKJrJrJrJrJrJrJrJ r J r J r J r J r JrJr SSKJr SSKJr SSKrSSKJr SSKJr "SS \5rg) z@ Job Editor Dialog Form for creating and editing scheduled jobs )QDialog QVBoxLayout QHBoxLayout QFormLayout QGroupBox QLineEdit QTextEdit QComboBoxQSpinBox QCheckBox QPushButton QFileDialogQLabel QMessageBox)Qt)loggerN)Path)SchedulerDatabasec|^\rSrSrSrSS\S\4U4SjjjrSrS\ 4Sjr S r S r S r S \4S jrSrSrSrU=r$)JobEditorDialogz Dialog for creating/editing jobsdbjob_idc>>[TU]U5 X lX0lUSLUlUR UR(aSOS5 UR S5 URS5 UR5 UR(aUR5 gg)NzEdit JobzNew JobTiX) super__init__rr is_edit_modesetWindowTitlesetModalsetMinimumWidth _setup_ui_load_job_data)selfparentrr __class__s ,C:\PYTHON\Scheduler\gui\job_editor_dialog.pyrJobEditorDialog.__init__s}   "$. $*;*;JK d S!        ! ct[5n[S5n[5n[5UlURR S5 UR SUR5 [5UlURRS5 URR S5 UR SUR5 URU5 URU5 [S5n[5n[5Ul URR/SQ5 UR S UR5 [5n[5UlUR R S 5 URUR 5 [#S 5UlUR$R&R)UR*5 URUR$5 UR S U5 [5UlUR,R S 5 UR SUR,5 [5n[5UlUR.R S5 URUR.5 [#S 5UlUR0R&R)UR25 URUR05 UR SU5 URU5 URU5 [S5n[5n [5UlUR4R/SQ5 UR4R6R)UR85 U R SUR45 [5UlUR:R S5 U R SUR:5 [=S5UlUR>RAS5 UR>RCS5 U R SUR>5 [E5Ul#URFRIS5 URFRKS5 U R SURF5 [E5Ul&URLRIS5 URLRKS5 U R SURL5 [E5Ul'URNRIS5 URNRKS5 U R S URN5 [E5Ul(URPRIS5 URPRKS!5 U R S"URP5 [E5Ul)URRRIS5 URRRKS!5 U R S#URR5 URFRUS$5 URLRUS$5 URNRUS$5 URPRUS$5 URRRUS$5 URU 5 URU5 [S%5n [5n [WS&5Ul,URXR[S5 U R SURX5 [WS'5Ul.UR\R_S(5 U R SUR\5 [E5Ul0UR`RcSS)5 UR`ReS*5 UR`RgS+5 U R S,UR`5 [E5Ul4URhRcSS-5 URhReS5 U R S.URh5 [E5Ul5URjRcSS*5 URjReS5 URjRgS+5 U R S/URj5 [5Ul6URlR/S0Q5 URlRoS15 U R S2URl5 [5Ul8URpR S35 U R S4URp5 U RU 5 URU 5 [5n U Rs5 URt(aZ[#S55Ul;URvR&R)URx5 U RURv5 [#URt(aS6OS75Ul=URzR}S5 URzR&R)UR~5 U RURz5 [#S85Ul@URR&R)UR5 U RUR5 URU 5 URU5 g9):zSetup dialog UIzBasic Informationze.g., DataHub Daily Refreshz Job Name:*<z$Description of what this job does...z Description:zExecution Settings)batchscript python_modulez Job Type:*zC:\path\to\script.batz Browse...z Executable:*zOptional command line argumentsz Arguments:zC:\path\to\working\directoryz Working Dir:zSchedule Settings)cronintervalmanualzSchedule Type:*z$e.g., 0 7 * * mon-fri (7am weekdays)zCron Expression:zTCron Help | Format: minute hour day month weekdayTzcolor: gray; font-size: 10pt;r4zWeeks:imzDays:zHours:;zMinutes:zSeconds:FzAdvanced SettingszJob is enabledz Show Console Window (Debug Mode)zhDisplay a visible CMD window during job execution. Useful for debugging. Output is still logged to file.iQiz secondszTimeout: z Retry Count:z Retry Delay:)normal importantcriticalr6z Criticality:z,production, daily, datahub (comma-separated)zTags:Test RunSaveCreateCancelN)Crrrr name_inputsetPlaceholderTextaddRowr description_inputsetMaximumHeight setLayout addWidgetr job_type_comboaddItemsrexecutable_inputr browse_buttonclickedconnect_browse_executablearguments_inputworking_dir_inputbrowse_dir_button_browse_directoryschedule_type_combocurrentTextChanged_on_schedule_type_changed cron_inputr cron_helpsetOpenExternalLinks setStyleSheetr interval_weeks setMinimum setMaximum interval_daysinterval_hoursinterval_minutesinterval_seconds setVisibler enabled_checkbox setCheckedshow_console_checkbox setToolTip timeout_inputsetRangesetValue setSuffixretry_count_inputretry_delay_inputcriticality_combosetCurrentText tags_input addStretchr test_button _test_run save_button setDefault _save_job cancel_buttonreject addLayout) r#layout basic_group basic_layout exec_group exec_layoutexec_path_layoutworkdir_layoutschedule_groupschedule_layoutadvanced_groupadvanced_layout button_layouts r&r!JobEditorDialog._setup_ui%sy 34 "} #+ **+HIL$//:!* //3 112XYND,B,BCl+%34 !m 'k $$%IJ<)<)<='= )  001KL""4#8#89(5 ""**4+B+BC""4#5#56>+;<({ //0QR<)=)=>%!* 112TU  !7!78!,[!9 &&..t/E/EF  !7!78>>:[)$##67%-#,;    ))*HI   33;;D>2'j &&q) &&r*x)<)<=%Z %%a( %%c*w(:(:;&j &&q) &&r*x)<)<= (  ((+ ((,z4+@+@A (  ((+ ((,z4+@+@A &&u- %%e, &&u- ((/ ((/  1(##67%- )*: ; ((.r4#8#89%./Q%R" ""-- D  r4#=#=>%Z ##Au- ##D) $$Z0z4+=+=>!) ''2. ''*~t/E/EF!) ''40 ''+ ((4~t/E/EF!* ''(KL --h7~t/E/EF#+ **+YZw8  1($   "   *:6D     $ $ , ,T^^ <  # #D$4$4 5&1B1BvQ ##D)   ((8 0 01(2 ""**4;;7 2 23' vr( schedule_typec US:HnUS:HnURRU5 URRU5 URRU5 URRU5 UR RU5 UR RU5 URRU5 US:XaURRS5 gURRS5 g)zHandle schedule type changer.r/r0zManual execution onlyze.g., 0 7 * * mon-friN) rRr]rSrVrYrZr[r\r>)r#ris_cron is_intervals r&rQ)JobEditorDialog._on_schedule_type_changeds 6)#z1  ""7+ !!'* &&{3 %%k2 &&{3 ((5 ((5 H $ OO . ./F G OO . ./F Gr(c.[R"USSS5upU(asURRU5 URR 5(d8URR[ [U5R55 ggg)zOpen file picker for executablezSelect Executabler1zgAll Files (*.bat *.cmd *.py *.exe);;Batch Files (*.bat *.cmd);;Python Files (*.py);;Executables (*.exe)N) rgetOpenFileNamerFsetTextrLtextstrrr$)r# file_path_s r&rJ"JobEditorDialog._browse_executables}"22    u    ! ! ) )) 4))..00&&..s4 ?3I3I/JK1 r(cz[R"USS5nU(aURRU5 gg)z(Open folder picker for working directoryzSelect Working Directoryr1N)rgetExistingDirectoryrLr)r#dir_paths r&rN!JobEditorDialog._browse_directorys933  &     " " * *8 4 r(c2URRUR5nU(d7[R"USSURS35 UR 5 gUR RUS5 URRUS=(d S5 URRUS5 URRUS 5 URRUS =(d S5 URRUS =(d S5 URRUS 5 [ R""US 5nUS S:Xa,UR$RUR'SS55 OUS S:XaUR(R+UR'SS55 UR,R+UR'SS55 UR.R+UR'SS55 UR0R+UR'SS55 UR2R+UR'SS55 UR4R7[9US55 UR:R+US5 UR<R+US5 UR>R+US5 UR@RUS5 US(a[ R""US5O/nURBRSREU55 URFR7UR'SS55 [HRJ"SURS 35 g![LaNn[HRN"S!U35 [RP"USS"U35 UR 5 SnAgSnAff=f)#z"Load existing job data for editingErrorzJob ID z not foundNname descriptionr1job_typeexecutable_path argumentsworking_directoryrschedule_configr.r/weeksrdayshoursminutessecondsenabledtimeout_seconds retry_countretry_delay_seconds criticalitytagsz, show_consoleFz Loaded job z for editingzError loading job data: zFailed to load job: ))rget_jobrrwarningrrr=rr@ setPlainTextrDrirFrKrLrOjsonloadsrRgetrVrdrYrZr[r\r^r_boolrbrfrgrhrjjoinr`rinfo Exceptionerrorr8)r#jobrres r&r"JobEditorDialog._load_job_data s1) ''//$++.C##D'WT[[M3TU  OO # #CK 0  " " / /M0B0Hb I    . .s: ?  ! ! ) )#.?*@ A  ( ([)9)?R @  " " * *3/B+C+Ir J  $ $ 3 3C4H I"jj->)?@O?#v-''(;(;FB(GH_%3##,,_-@-@!-LM""++O,?,?,JK##,,_-@-@!-LM%%../B/B9a/PQ%%../B/B9a/PQ  ! ! , ,T#i.-A B    ' ',=(> ?  " " + +C ,> ?  " " + +C0E,F G  " " 1 1#m2D E.1&k4::c&k*rD OO # #DIIdO 4  & & 1 1#''.%2P Q KK+dkk],? @  LL3A37 8  w2Fqc0J K KKMM s A"N>%MN>> PAPPreturncURR5R5(d3[R"USS5 URR 5 gUR R5R5(d3[R"USS5 UR R 5 gURR5S:Xa`URR5R5(d3[R"USS5 URR 5 gg)zValidate form inputszValidation ErrorzJob name is requiredFzExecutable path is requiredr.z2Cron expression is required for cron schedule typeT) r=rstriprrsetFocusrFrO currentTextrR)r#s r&_validate_inputs JobEditorDialog._validate_inputs:s##%++--   &8:P Q OO $ $ &$$))+1133   &8:W X  ! ! * * ,  # # / / 1V ;??'')//11##D*<>rs((*r(cUR5(dgURR5n0nUS:Xa,URR 5R 5US'OUS:XaUR R5US'URR5US'URR5US'URR5US'URR5US'URR 5R 5nU(aFURS 5Vs/sH)oDR 5(dMUR 5PM+ snO/nURR 5R 5URR!5R 5=(d SUR"R5UR$R 5R 5UR&R 5R 5=(d SUR(R 5R 5=(d SUUUR*R-5UR.R5UR0R5UR2R5UR4R5UUR6R-5S .nUR8(apUR:R<"UR>40UD6 [@RB"S UR>S US 35 [DRF"USSUS S35 O]UR:RH"S0UD6n[@RB"SUS US 35 [DRF"USSUS SUS35 URK5 gs snf![La>n[@RN"SU35 [DRP"USSU35 SnAgSnAff=f)zSave job to databaseNr.r/rrrrr,)rrrrrrrrrrrrrrrz Updated job z: rSuccesszJob 'z' updated successfullyz Created job z' created successfully (ID: )zError saving job: rzFailed to save job: ))rrOrrRrrrVvaluerYrZr[r\rjsplitr=r@ toPlainTextrDrFrKrLr^ isCheckedrbrfrgrhr`rr update_jobrrrr information create_jobacceptrrr8) r#rr tags_texttrjob_datarrs r&rpJobEditorDialog._save_jobNsw$$&& 3 L 44@@BM O&*.//*>*>*@*F*F*H'*,+/+>+>+D+D+F(*.*<*<*B*B*D'+/+>+>+D+D+F(-1-B-B-H-H-J *-1-B-B-H-H-J *,,.446IMVys';I';!wwyIAGGI';I\^D,,.446#55AACIIKSt //;;=#'#8#8#=#=#?#E#E#G!11668>>@HD%)%;%;%@%@%B%H%H%J%Rd!.#200::<#'#5#5#;#;#=#55;;='+'='='C'C'E#55AAC $ : : D D FH$  ""4;;;(; l4;;-r(6:J9KLM''i5&AQ@RRh9ij++7h7 l6("Xf5E4FGH''i5&AQ@RRnounvvw9xy KKMAJD L LL-aS1 2  w2Fqc0J K K Ls1D'O;?O6O6/JO;6O;; Q4P>>QcUR(dg[R"USSURR 5S3[R R [R R-5nU[R R :XaSSKJ n SSK J n U"5nU"URU5nURURSS 9n[R"US S US 35 [R "S URSU35 gg!["a>n[R$"SU35 [R&"USSU35 SnAgSnAff=f)zExecute test run of the jobNr9z Execute job 'z' now?r) JobExecutor)SchedulerConfig manual_test) triggered_byzTest Run StartedzJob execution started (ID: z!) Check History tab for results.zTest run started for job z , execution zError starting test run: rzFailed to start test run: )rrquestionr=rStandardButtonYesNodaemon.job_executorr core.configrr execute_jobrrrrrr8)r#replyrrconfigexecutor execution_idrs r&rmJobEditorDialog._test_runs>{{ $$  DOO00236 :  & & * *[-G-G-J-J J   K..22 2 V;7(*&tww7'33DKKm3\ ''&1,?bc  7 }LQ]P^_` 3  V 8<=$$T76PQRPS4TUU VsBD E&(4E!!E&)rKrGrMrqrhrSrRrr@r^rFrYrZr[r\rVrrrDr=rfrgrnrOr`rjrlrbrL)N)__name__ __module__ __qualname____firstlineno____doc__rintrr!rrQrJrNr"rrrprm__static_attributes__ __classcell__)r%s@r&rrsd* "#4 "c " "vpHsH. L5+Z$(8LtVVr(r)rPyQt6.QtWidgetsrrrrrrr r r r r rrr PyQt6.QtCorerlogururrpathlibr core.databaserrrr(r&rs?   +SVgSVr(