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): |