src/pyams_scheduler/zmi/scheduler.py
changeset 22 b1a1ccc1fa26
parent 19 687d616d7dfb
child 29 a456add728e3
equal deleted inserted replaced
21:8b3250991530 22:b1a1ccc1fa26
    24 from pyams_scheduler.interfaces import IScheduler, SCHEDULER_HANDLER_KEY
    24 from pyams_scheduler.interfaces import IScheduler, SCHEDULER_HANDLER_KEY
    25 from pyams_scheduler.zmi.interfaces import ISchedulerMenu
    25 from pyams_scheduler.zmi.interfaces import ISchedulerMenu
    26 from pyams_skin.interfaces import IInnerPage, IPageHeader
    26 from pyams_skin.interfaces import IInnerPage, IPageHeader
    27 from pyams_skin.interfaces.container import ITableElementEditor
    27 from pyams_skin.interfaces.container import ITableElementEditor
    28 from pyams_skin.layer import IPyAMSLayer
    28 from pyams_skin.layer import IPyAMSLayer
       
    29 from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION, MANAGE_SYSTEM_PERMISSION
    29 from pyams_zmi.interfaces.menu import IControlPanelMenu
    30 from pyams_zmi.interfaces.menu import IControlPanelMenu
    30 from pyams_zmi.layer import IAdminLayer
    31 from pyams_zmi.layer import IAdminLayer
    31 from z3c.table.interfaces import IColumn, IValues
    32 from z3c.table.interfaces import IColumn, IValues
    32 from zope.component.interfaces import ISite
    33 from zope.component.interfaces import ISite
    33 
    34 
    70         site = get_parent(self.context, ISite)
    71         site = get_parent(self.context, ISite)
    71         return resource_url(site, self.request, 'admin.html#{0}'.format(self.view_name))
    72         return resource_url(site, self.request, 'admin.html#{0}'.format(self.view_name))
    72 
    73 
    73 
    74 
    74 @viewlet_config(name='scheduler.menu', context=ISite, layer=IAdminLayer, manager=IControlPanelMenu,
    75 @viewlet_config(name='scheduler.menu', context=ISite, layer=IAdminLayer, manager=IControlPanelMenu,
    75                 permission='system.view', weight=10)
    76                 permission=VIEW_SYSTEM_PERMISSION, weight=10)
    76 @viewletmanager_config(name='scheduler.menu', context=ISite, layer=IAdminLayer)
    77 @viewletmanager_config(name='scheduler.menu', context=ISite, layer=IAdminLayer)
    77 @implementer(ISchedulerMenu)
    78 @implementer(ISchedulerMenu)
    78 class SchedulerMenuItem(MenuItem):
    79 class SchedulerMenuItem(MenuItem):
    79     """Scheduler menu"""
    80     """Scheduler menu"""
    80 
    81 
   118     icon_hint = _("Task settings")
   119     icon_hint = _("Task settings")
   119     url = 'settings.html'
   120     url = 'settings.html'
   120     target = None
   121     target = None
   121     modal_target = True
   122     modal_target = True
   122 
   123 
   123     permission = 'system.view'
   124     permission = VIEW_SYSTEM_PERMISSION
   124     weight = 1
   125     weight = 1
   125 
   126 
   126 
   127 
   127 @adapter_config(name='scheduler', context=(Interface, IAdminLayer, SchedulerTasksTable), provides=IColumn)
   128 @adapter_config(name='scheduler', context=(Interface, IAdminLayer, SchedulerTasksTable), provides=IColumn)
   128 class SchedulerTasksScheduleColumn(ActionColumn):
   129 class SchedulerTasksScheduleColumn(ActionColumn):
   132     icon_hint = _("Schedule task")
   133     icon_hint = _("Schedule task")
   133     url = 'schedule.html'
   134     url = 'schedule.html'
   134     target = None
   135     target = None
   135     modal_target = True
   136     modal_target = True
   136 
   137 
   137     permission = 'system.view'
   138     permission = VIEW_SYSTEM_PERMISSION
   138     weight = 2
   139     weight = 2
   139 
   140 
   140 
   141 
   141 @adapter_config(name='name', context=(Interface, IAdminLayer, SchedulerTasksTable), provides=IColumn)
   142 @adapter_config(name='name', context=(Interface, IAdminLayer, SchedulerTasksTable), provides=IColumn)
   142 class SchedulerTasksNameColumn(I18nColumn, GetAttrColumn):
   143 class SchedulerTasksNameColumn(I18nColumn, GetAttrColumn):
   155     icon_hint = _("Run task")
   156     icon_hint = _("Run task")
   156     url = 'run.html'
   157     url = 'run.html'
   157     target = None
   158     target = None
   158     modal_target = True
   159     modal_target = True
   159 
   160 
   160     permission = 'system.manage'
   161     permission = MANAGE_SYSTEM_PERMISSION
   161     weight = 20
   162     weight = 20
   162 
   163 
   163 
   164 
   164 @adapter_config(name='history', context=(Interface, IAdminLayer, SchedulerTasksTable), provides=IColumn)
   165 @adapter_config(name='history', context=(Interface, IAdminLayer, SchedulerTasksTable), provides=IColumn)
   165 class SchedulerTasksHistoryColumn(ActionColumn):
   166 class SchedulerTasksHistoryColumn(ActionColumn):
   169     icon_hint = _("Task run history")
   170     icon_hint = _("Task run history")
   170     url = 'history.html'
   171     url = 'history.html'
   171     target = None
   172     target = None
   172     modal_target = True
   173     modal_target = True
   173 
   174 
   174     permission = 'system.view'
   175     permission = VIEW_SYSTEM_PERMISSION
   175     weight = 30
   176     weight = 30
   176 
   177 
   177 
   178 
   178 @adapter_config(name='trash', context=(Interface, IAdminLayer, SchedulerTasksTable), provides=IColumn)
   179 @adapter_config(name='trash', context=(Interface, IAdminLayer, SchedulerTasksTable), provides=IColumn)
   179 class SchedulerTasksTrashColumn(TrashColumn):
   180 class SchedulerTasksTrashColumn(TrashColumn):
   180     """Scheduler tasks trash column"""
   181     """Scheduler tasks trash column"""
   181 
   182 
   182     icon_hint = _("Delete task")
   183     icon_hint = _("Delete task")
   183     permission = 'system.manage'
   184     permission = MANAGE_SYSTEM_PERMISSION
   184 
   185 
   185 
   186 
   186 @view_config(name='delete-task.json', context=IScheduler, request_type=IPyAMSLayer,
   187 @view_config(name='delete-task.json', context=IScheduler, request_type=IPyAMSLayer,
   187              permission='system.manage', renderer='json', xhr=True)
   188              permission=MANAGE_SYSTEM_PERMISSION, renderer='json', xhr=True)
   188 def delete_scheduler_task(request):
   189 def delete_scheduler_task(request):
   189     """Delete task from scheduler utility"""
   190     """Delete task from scheduler utility"""
   190     translate = request.localizer.translate
   191     translate = request.localizer.translate
   191     name = request.params.get('object_name')
   192     name = request.params.get('object_name')
   192     if not name:
   193     if not name:
   211         if manager is not None:
   212         if manager is not None:
   212             return list(manager.values())
   213             return list(manager.values())
   213         return ()
   214         return ()
   214 
   215 
   215 
   216 
   216 @pagelet_config(name='scheduler-tasks.html', context=ISite, layer=IPyAMSLayer, permission='system.view')
   217 @pagelet_config(name='scheduler-tasks.html', context=ISite, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
   217 @implementer(IInnerPage)
   218 @implementer(IInnerPage)
   218 class SchedulerTasksView(AdminView, ContainerView):
   219 class SchedulerTasksView(AdminView, ContainerView):
   219     """Scheduler tasks view"""
   220     """Scheduler tasks view"""
   220 
   221 
   221     table_class = SchedulerTasksTable
   222     table_class = SchedulerTasksTable
   232     title = _("Control panel")
   233     title = _("Control panel")
   233     subtitle = _("Tasks scheduler")
   234     subtitle = _("Tasks scheduler")
   234 
   235 
   235 
   236 
   236 @viewlet_config(name='scheduler.properties.menu', context=ISite, layer=IAdminLayer,
   237 @viewlet_config(name='scheduler.properties.menu', context=ISite, layer=IAdminLayer,
   237                 manager=ISchedulerMenu, permission='system.view', weight=1)
   238                 manager=ISchedulerMenu, permission=VIEW_SYSTEM_PERMISSION, weight=1)
   238 class SchedulerPropertiesMenuItem(MenuItem):
   239 class SchedulerPropertiesMenuItem(MenuItem):
   239     """Scheduler properties menu"""
   240     """Scheduler properties menu"""
   240 
   241 
   241     label = _("Properties...")
   242     label = _("Properties...")
   242     url = 'properties.html'
   243     url = 'properties.html'
   245     def get_url(self):
   246     def get_url(self):
   246         manager = query_utility(IScheduler)
   247         manager = query_utility(IScheduler)
   247         return resource_url(manager, self.request, self.url)
   248         return resource_url(manager, self.request, self.url)
   248 
   249 
   249 
   250 
   250 @pagelet_config(name='properties.html', context=IScheduler, layer=IPyAMSLayer, permission='system.view')
   251 @pagelet_config(name='properties.html', context=IScheduler, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
   251 class SchedulerPropertiesEditForm(AdminDialogEditForm):
   252 class SchedulerPropertiesEditForm(AdminDialogEditForm):
   252     """Scheduler properties edit form"""
   253     """Scheduler properties edit form"""
   253 
   254 
   254     @property
   255     @property
   255     def title(self):
   256     def title(self):
   257 
   258 
   258     legend = _("Update tasks scheduler properties")
   259     legend = _("Update tasks scheduler properties")
   259 
   260 
   260     fields = field.Fields(IScheduler).omit('__parent__', '__name__', 'tasks', 'history')
   261     fields = field.Fields(IScheduler).omit('__parent__', '__name__', 'tasks', 'history')
   261     ajax_handler = 'properties.json'
   262     ajax_handler = 'properties.json'
   262     edit_permission = 'system.manage'
   263     edit_permission = MANAGE_SYSTEM_PERMISSION
   263 
   264 
   264 
   265 
   265 @view_config(name='properties.json', context=IScheduler, request_type=IPyAMSLayer,
   266 @view_config(name='properties.json', context=IScheduler, request_type=IPyAMSLayer,
   266              permission='system.manage', renderer='json', xhr=True)
   267              permission=MANAGE_SYSTEM_PERMISSION, renderer='json', xhr=True)
   267 class SchedulerPropertiesAJAXEditForm(AJAXEditForm, SchedulerPropertiesEditForm):
   268 class SchedulerPropertiesAJAXEditForm(AJAXEditForm, SchedulerPropertiesEditForm):
   268     """Scheduler properties edit form, AJAX view"""
   269     """Scheduler properties edit form, AJAX view"""
   269 
   270 
   270 
   271 
   271 @viewlet_config(name='scheduler.jobs.menu', context=ISite, layer=IAdminLayer,
   272 @viewlet_config(name='scheduler.jobs.menu', context=ISite, layer=IAdminLayer,
   272                 manager=ISchedulerMenu, permission='system.view', weight=5)
   273                 manager=ISchedulerMenu, permission=VIEW_SYSTEM_PERMISSION, weight=5)
   273 class SchedulerJobsMenuItem(MenuItem):
   274 class SchedulerJobsMenuItem(MenuItem):
   274     """Scheduler jobs menu"""
   275     """Scheduler jobs menu"""
   275 
   276 
   276     label = _("Active jobs...")
   277     label = _("Active jobs...")
   277     url = 'jobs.html'
   278     url = 'jobs.html'
   280     def get_url(self):
   281     def get_url(self):
   281         manager = query_utility(IScheduler)
   282         manager = query_utility(IScheduler)
   282         return resource_url(manager, self.request, self.url)
   283         return resource_url(manager, self.request, self.url)
   283 
   284 
   284 
   285 
   285 @pagelet_config(name='jobs.html', context=IScheduler, layer=IPyAMSLayer, permission='system.view')
   286 @pagelet_config(name='jobs.html', context=IScheduler, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
   286 class SchedulerJobsDisplayForm(AdminDialogDisplayForm):
   287 class SchedulerJobsDisplayForm(AdminDialogDisplayForm):
   287     """Scheduler jobs display form"""
   288     """Scheduler jobs display form"""
   288 
   289 
   289     @property
   290     @property
   290     def title(self):
   291     def title(self):