src/pyams_scheduler/zmi/scheduler.py
changeset 64 e9e71b24f431
parent 58 7f1f4243b5b8
equal deleted inserted replaced
63:a72adec69419 64:e9e71b24f431
    35 
    35 
    36 # import packages
    36 # import packages
    37 from pyams_form.form import AJAXEditForm, AJAXAddForm
    37 from pyams_form.form import AJAXEditForm, AJAXAddForm
    38 from pyams_form.schema import CloseButton
    38 from pyams_form.schema import CloseButton
    39 from pyams_pagelet.pagelet import pagelet_config
    39 from pyams_pagelet.pagelet import pagelet_config
    40 from pyams_skin.container import ContainerView
    40 from pyams_skin.container import ContainerView, delete_container_element
    41 from pyams_skin.page import DefaultPageHeaderAdapter
    41 from pyams_skin.page import DefaultPageHeaderAdapter
    42 from pyams_skin.table import DefaultElementEditorAdapter, BaseTable, I18nColumn, TrashColumn, ActionColumn, TableViewlet
    42 from pyams_skin.table import DefaultElementEditorAdapter, BaseTable, I18nColumn, TrashColumn, ActionColumn, TableViewlet
    43 from pyams_skin.viewlet.menu import MenuItem
    43 from pyams_skin.viewlet.menu import MenuItem
    44 from pyams_skin.viewlet.toolbar import ToolbarMenuItem
    44 from pyams_skin.viewlet.toolbar import ToolbarMenuItem
    45 from pyams_template.template import template_config
    45 from pyams_template.template import template_config
    97 
    97 
    98     @property
    98     @property
    99     def data_attributes(self):
    99     def data_attributes(self):
   100         manager = query_utility(IScheduler)
   100         manager = query_utility(IScheduler)
   101         attributes = super(SchedulerTasksTable, self).data_attributes
   101         attributes = super(SchedulerTasksTable, self).data_attributes
   102         table_attrs = {'data-ams-location': absolute_url(manager, self.request),
   102         attributes.setdefault('table', {}).update({
   103                        'data-ams-delete-target': 'delete-task.json'}
   103             'data-ams-location': absolute_url(manager, self.request)
   104         if 'table' in attributes:
   104         })
   105             attributes['table'].update(table_attrs)
       
   106         else:
       
   107             attributes['table'] = table_attrs
       
   108         return attributes
   105         return attributes
   109 
   106 
   110     def getCSSHighlightClass(self, column, item, cssClass):
   107     def getCSSHighlightClass(self, column, item, cssClass):
   111         if column.__name__ == 'name':
   108         if column.__name__ == 'name':
   112             info = item.get_scheduling_info(self.request.registry)
   109             info = item.get_scheduling_info(self.request.registry)
   196 
   193 
   197     icon_hint = _("Delete task")
   194     icon_hint = _("Delete task")
   198     permission = MANAGE_SYSTEM_PERMISSION
   195     permission = MANAGE_SYSTEM_PERMISSION
   199 
   196 
   200 
   197 
   201 @view_config(name='delete-task.json', context=IScheduler, request_type=IPyAMSLayer,
   198 @view_config(name='delete-element.json', context=IScheduler, request_type=IPyAMSLayer,
   202              permission=MANAGE_SYSTEM_PERMISSION, renderer='json', xhr=True)
   199              permission=MANAGE_SYSTEM_PERMISSION, renderer='json', xhr=True)
   203 def delete_scheduler_task(request):
   200 def delete_scheduler_task(request):
   204     """Delete task from scheduler utility"""
   201     """Delete task from scheduler utility"""
   205     translate = request.localizer.translate
   202     return delete_container_element(request, ignore_permission=True)
   206     name = request.params.get('object_name')
       
   207     if not name:
       
   208         return {'status': 'message',
       
   209                 'messagebox': {'status': 'error',
       
   210                                'content': translate(_("No provided object_name argument!"))}}
       
   211     if name not in request.context:
       
   212         return {'status': 'message',
       
   213                 'messagebox': {'status': 'error',
       
   214                                'content': translate(_("Given task name doesn't exist!"))}}
       
   215     del request.context[name]
       
   216     return {'status': 'success'}
       
   217 
   203 
   218 
   204 
   219 @adapter_config(context=(ISite, IAdminLayer, SchedulerTasksTable), provides=IValues)
   205 @adapter_config(context=(ISite, IAdminLayer, SchedulerTasksTable), provides=IValues)
   220 class SchedulerTasksValuesAdapter(ContextRequestViewAdapter):
   206 class SchedulerTasksValuesAdapter(ContextRequestViewAdapter):
   221     """Scheduler tasks values adapter"""
   207     """Scheduler tasks values adapter"""
   263 
   249 
   264 @pagelet_config(name='properties.html', context=IScheduler, layer=IPyAMSLayer, permission=MANAGE_SYSTEM_PERMISSION)
   250 @pagelet_config(name='properties.html', context=IScheduler, layer=IPyAMSLayer, permission=MANAGE_SYSTEM_PERMISSION)
   265 class SchedulerPropertiesEditForm(AdminDialogEditForm):
   251 class SchedulerPropertiesEditForm(AdminDialogEditForm):
   266     """Scheduler properties edit form"""
   252     """Scheduler properties edit form"""
   267 
   253 
       
   254     prefix = 'scheduler_properties.'
       
   255 
   268     @property
   256     @property
   269     def title(self):
   257     def title(self):
   270         return self.context.__name__
   258         return self.context.__name__
   271 
   259 
   272     legend = _("Update tasks scheduler properties")
   260     legend = _("Update tasks scheduler properties")
   317     cssClasses = {'table': 'table table-bordered table-striped table-hover table-tight datatable'}
   305     cssClasses = {'table': 'table table-bordered table-striped table-hover table-tight datatable'}
   318     sortOn = None
   306     sortOn = None
   319 
   307 
   320     @property
   308     @property
   321     def data_attributes(self):
   309     def data_attributes(self):
   322         return {'table': {'data-ams-datatable-global-filter': 'false',
   310         return {
   323                           'data-ams-datatable-info': 'false',
   311             'table': {
   324                           'data-ams-datatable-sdom': "t<'dt-row dt-bottom-row'<'text-right'p>>",
   312                 'data-ams-datatable-global-filter': 'false',
   325                           'data-ams-datatable-display-length': '20',
   313                 'data-ams-datatable-info': 'false',
   326                           'data-ams-datatable-pagination-type': 'bootstrap_prevnext'}}
   314                 'data-ams-datatable-sdom': "t<'dt-row dt-bottom-row'<'text-right'p>>",
       
   315                 'data-ams-datatable-display-length': '20',
       
   316                 'data-ams-datatable-pagination-type': 'bootstrap_prevnext'
       
   317             }
       
   318         }
   327 
   319 
   328 
   320 
   329 @adapter_config(name='name', context=(Interface, IAdminLayer, SchedulerJobsTable), provides=IColumn)
   321 @adapter_config(name='name', context=(Interface, IAdminLayer, SchedulerJobsTable), provides=IColumn)
   330 class SchedulerJobNameColumn(I18nColumn, GetAttrColumn):
   322 class SchedulerJobNameColumn(I18nColumn, GetAttrColumn):
   331     """Scheduler job name column"""
   323     """Scheduler job name column"""
   454     """Scheduler process test form, JSON renderer"""
   446     """Scheduler process test form, JSON renderer"""
   455 
   447 
   456     def get_ajax_output(self, changes):
   448     def get_ajax_output(self, changes):
   457         status, message = changes
   449         status, message = changes
   458         if status == 200:
   450         if status == 200:
   459             return {'status': 'success',
   451             return {
   460                     'content': {'html': text_to_html(message)},
   452                 'status': 'success',
   461                     'close_form': False}
   453                 'content': {
       
   454                     'html': text_to_html(message)
       
   455                 },
       
   456                 'close_form': False
       
   457             }
   462         else:
   458         else:
   463             return {'status': 'info',
   459             return {
   464                     'content': {'html': text_to_html(message)},
   460                 'status': 'info',
   465                     'close_form': False}
   461                 'content': {
       
   462                     'html': text_to_html(message)
       
   463                 },
       
   464                 'close_form': False
       
   465             }