ֳi9/dZddlZddlmZmZmZmZmZmZm Z m Z m Z m Z ddl mZddlmZddlmZddlmZddlmZdd lmZdd lmZGd d eZdS) z? Jobs Widget for Python Scheduler Display and manage jobs list N) QWidget QVBoxLayout QHBoxLayout QTableWidgetQTableWidgetItem QPushButton QHeaderViewQLabel QMessageBoxQMenu)Qt)QAction)logger)SchedulerDatabase)SchedulerConfig)JobEditorDialog)ScheduleEditorDialogcteZdZdZdedeffd ZdZdZdZ de fd Z d Z d Z d Zd ZdZdZdZxZS) JobsWidgetzJobs list and management widgetdbconfigct||_||_||dSN)super__init__rr _setup_uirefresh)selfrr __class__s "C:\PYTHON\Frank\gui\jobs_widget.pyrzJobsWidget.__init__sH    cR t}t}td}|d|||t d_jdjj j |jt d_ j j j j d|j t d_jj jj d|jt d_jj jj d|jt d _jd jj jj d|jt d _jj j|j||t/_jd jgd jdt:jjj t.j!j"j#dj$t.j%j&j'tPj)j*jj+ j,jj- j.jj/ fd|jdS)zSetup UIzConfigured Jobsz#font-size: 14px; font-weight: bold;zNew Jobz;background-color: #4CAF50; color: white; padding: 5px 15px;EditFRun NowzCreate ScheduleDeletez(background-color: #f44336; color: white;Refresh)IDNameTypeEnabled CriticalityTagsHostTc,Sr) _edit_job)rsr z&JobsWidget._setup_ui..\sT^^5E5Er!N)0rrr setStyleSheet addWidget addStretchr new_job_btnclickedconnect_new_job edit_job_btnr1 setEnabled run_job_btn_run_jobcreate_schedule_btn_create_scheduledelete_job_btn _delete_job refresh_btnr addLayoutrtablesetColumnCountsetHorizontalHeaderLabelshorizontalHeadersetSectionResizeModer ResizeModeStretchsetSelectionBehaviorSelectionBehavior SelectRowssetAlternatingRowColorssetEditTriggers EditTriggerNoEditTriggerssetContextMenuPolicyr ContextMenuPolicyCustomContextMenucustomContextMenuRequested_show_context_menuitemSelectionChanged_on_selection_changeditemDoubleClicked)rlayout header_layout header_labels` r rzJobsWidget._setup_ui!sT""$ /00 ""#HIII ---  """'y11 &&'deee  ((777 0111'// !))$.999 $$U+++ 1222&y11  ((777 ##E*** 0111#./@#A#A   (001FGGG  ++E222 8999)(33 ))*TUUU #++D,<=== &&u--- 3444&y11  ((666 0111'''"^^  !!!$$$ ,,. . .    ##%%::1k>T>\]]] '' (F(QRRR **4000 ""<#;#JKKK ''(<(NOOO -55d6MNNN '//0JKKK $,,-E-E-E-EFFF$$$$$r!c \ddl} tj}|j|}|jt|t|D]\}}|j |dtt|dt|d}| |j |ddkr$|tjj|j |d||j |d t|d t|d rd nd }|d r%|tjjn$|tjj|j |d|t|d}|ddkr%|tjjn0|ddkr$|tjj|j |d||dr||dng} | rd| nd} |j |dt| |ddpd} |j |dt| t3jdt|d|ddS#t6$r;} t3jd| t;j|dd| Yd} ~ dSd} ~ wwxYw)uIRefresh jobs list — shows only jobs for current host (or any-host jobs)rN)hostnameidname criticalitycriticalr/job_typeenabledu✓ Yesu✗ Nohightagsz, -r^z(any)zRefreshed jobs table: z jobs for host ''zError refreshing jobs: ErrorzFailed to load jobs: )jsonsocket gethostnamer get_all_jobsrD setRowCountlen enumeratesetItemrstrsetFontfont setForegroundr GlobalColorred darkGreengrayupper darkYellowloadsjoingetrdebug Exceptionerrorr rb) rrpcurrent_hostnamejobsrowjob name_item enabled_item crit_itemritags_strhost_vales r rzJobsWidget.refresh`s 1 M%133 7''1A'BBD J " "3t99 - - -%dOO% G% GS ""3+;CD NN+K+KLLL-S[99 !!$*//"3"3444}%33++BN,>??? ""39555 ""3+;C O+L+LMMM 0S^0Y QYZZ y>D ..r~/GHHHH ..r~/BCCC ""3<888-S-?-E-E-G-GHH }%33++BN,>????'611++BN,EFFF ""3955536f+Etzz#f+...2.2;499T??? ""3+;H+E+EFFF77:r22=g ""3+;H+E+EFFFF L`#d))``M]``` a a a a a M M M L6166 7 7 7  w0K0K0K L L L L L L L L L MsMM&& N+00N&&N+c*t|jdk}|j||j||j||j|dS)zHandle selection changerN)rurD selectedItemsr:r;r<r>r@)r has_selections r rXz JobsWidget._on_selection_changedsDJ446677!;  $$]333 ##M222  ++M::: &&}55555r!returnc|j}|sdS|d}|j|d}|r!t |ndS)zGet selected job IDNr)rDselectionModel selectedRowsriteminttext)r selected_rowsr job_id_items r _get_selected_job_idzJobsWidget._get_selected_job_ids} 1133@@BB  4A""$$jooc1-- *5?s;##%%&&&4?r!ct||j}|r*|t jddSdS)zOpen dialog to create new jobz!New job created, refreshing tableN)rrexecrrinfo)rdialogs r r9zJobsWidget._new_jobsQ tw// ;;== = LLNNN K; < < < < < = =r!c|}|sdSt||j|}|r.|t jd|ddSdS)z Open dialog to edit selected jobN)job_idzJob z edited, refreshing table)rrrrrrr)rrrs r r1zJobsWidget._edit_jobs**,,  F twv>>> ;;== B LLNNN K@v@@@ A A A A A B Br!c |}|sdS|j|}tj|dd|ddtjjtjjz}|tjjkr ddlm }||j|j }| |d }tj |d d |dd |d tjd|ddS#t$r;}tjd|tj|dd|Yd}~dSd}~wwxYwdS)z Execute selected job immediatelyNzRun Jobz Execute job 'r`z' now?r) JobExecutor manual_gui) triggered_byz Job StartedJob 'z' started (Execution ID: z!) Check History tab for results.zManually executed job z from GUIzError executing job: rozFailed to execute job: )rrget_jobr questionStandardButtonYesNodaemon.job_executorrr execute_job informationrrrrrb)rrrreplyrexecutor execution_idrs r r=zJobsWidget._run_jobs**,,  Fgoof%%$   /CK / / /  & *[-G-J J    K.2 2 2 S;;;;;;&;tw <<'33F3VV '!sCKss,sss  FVFFFGGGGG S S S 8Q88999$T74Qa4Q4QRRRRRRRRR S 3 2s A.C;; E0D;;Ec|}|sdS t||j|j|}|r0t j|ddtjd|ddSdS#t$r;}tj d|t j |dd |Yd}~dSd}~wwxYw) z Create schedule for selected jobN)pre_selected_job_idSuccesszBSchedule created successfully! Check the Schedules tab to see it.zCreated schedule for job z from Jobs tabzError creating schedule: rozFailed to create schedule: ) rrrrrr rrrrrrb)rrrrs r r?zJobsWidget._create_schedules**,,  F S) $* F {{}} P'Z  NNNNOOOOO  P P S S S L8Q88 9 9 9  w0Qa0Q0Q R R R R R R R R R SsAA== C0B==Cc|}|sdS|j|}tj|dd|ddtjjtjjztjj}|tjjkr |j|tj |dd|dd| tj d |dS#t$r;}tjd |tj|d d |Yd}~dSd}~wwxYwdS) zDelete selected jobNz Delete Jobz%Are you sure you want to delete job 'r`z!'? This action cannot be undone.rrz' deleted successfullyz Deleted job zError deleting job: rozFailed to delete job: )rrrr warningrrr delete_jobrrrrrrrb)rrrrrs r rAzJobsWidget._delete_jobsn**,,  Fgoof%%#   dCK d d d  & *[-G-J J  & )    K.2 2 2 R""6***'i9dV9d9d9deee  363344444 R R R 7A77888$T74PQ4P4PQQQQQQQQQ R 3 2sA%D E 0EEc|}|sdS|j|}|d } |j|||rdnd}t j|dd|dd||tjd |d |dS#t$r;}tj d |t j |d d |Yd}~dSd}~wwxYw)z%Toggle enabled status of selected jobNre)redisabledrrr`z' z Toggled job z enabled=zError toggling job: rozFailed to toggle job: ) rrr update_jobr rrrrrrrb)rrr new_enabled status_textrs r _toggle_enabledzJobsWidget._toggle_enabled s8**,,  Fgoof%%i.(  N G  v{  ; ; ;'2B)) K  #D)5YS[5Y5YK5Y5Y Z Z Z LLNNN KEvEE EE F F F F F N N N L333 4 4 4  w0L0L0L M M M M M M M M M NsA2B11 C6;0C11C6c>|}|sdS|j|}t|}t d|}|j|j||t d|}|j|j ||| t d|}|j|j ||| |drdnd}t ||} | j|j || | t d|} | j|j || ||j|dS) zShow right-click context menuNzEdit...r$zCreate Schedule...reDisableEnabler%)rrrr r triggeredr8r1 addActionr= addSeparatorr?rrArrDviewport mapToGlobal) rpositionrrmenu edit_action run_actionschedule_action toggle_text toggle_action delete_actions r rVzJobsWidget._show_context_menus**,,  Fgoof%%T{{i.. %%dn555 {###Y-- $$T]333 z""" ""6==!))$*?@@@ ''' $'y>?iix  T22 ''(<=== }%%%  $// ''(8999 }%%% $*%%''33H==>>>>>r!)__name__ __module__ __qualname____doc__rrrrrrXrrr9r1r=r?rArrV __classcell__)rs@r rrs)),o=%=%=%~4M4M4Ml666@c@@@@=== B B BSSS>SSS0RRR4NNN(*?*?*?*?*?*?*?r!r)rrqPyQt6.QtWidgetsrrrrrrr r r r PyQt6.QtCorer PyQt6.QtGuirlogurur core.databaser core.configrgui.job_editor_dialogrgui.schedule_editor_dialogrrr!r rsP  ++++++''''''111111;;;;;;r?r?r?r?r?r?r?r?r?r?r!