def cron_deletelog(self): crt = crontab.Crontab.load() cron = crt.crons.get(self.request.form.get('uid'), '') changed = False to_delete = self.request.form.get('logs_to_delete', []) if not isinstance(to_delete, list): to_delete = [to_delete] if cron and self.request.form.get('alllogs_to_delete'): IStatusMessage(self.request).addStatusMessage( _('All logs have been deleted') ) cron.logs = [] changed = True elif cron and to_delete: to_delete = [int(a) for a in to_delete] to_delete.sort() to_delete.reverse() for item in to_delete: try: cron.logs.pop(item) changed = True except IndexError, e: # pragma: no cover continue if changed: IStatusMessage(self.request).addStatusMessage( _('Selected logs have been deleted') )
def crontab_toggle(self): activated = self.request.form.get('activated', '') == "1" message = { True: _('Crontab has been activated'), False: _('Crontab has been deactivated'), } if 'activated' in self.request.form: IStatusMessage(self.request).addStatusMessage( message.get(activated) ) crt = crontab.Crontab.load() crt.activated = activated crt.save() self.request.response.redirect( self.context.absolute_url() + '/@@cron-settings' )
def validate(self, value): ctx = self.view.context acl = getToolByName(ctx, 'acl_users') if value: vl = acl.searchUsers(id=value) if len(vl) < 1: raise Invalid( _('No such user ${user}', mapping={'user' : value}) )
def delete_cron(self, crt, uid): deletion = False if uid in crt.crons: cron = crt.crons[uid] IStatusMessage(self.request).addStatusMessage( _('Cron ${uid}/${name} was deleted.', mapping = {'name': cron.name, 'uid': cron.uid}) ) del crt.crons[uid] deletion = True return deletion
def run_cron(self, crt, uid): runned = False if uid in crt.crons: cron = crt.crons[uid] manager = getMultiAdapter((self.context, cron), ICronManager) manager.register_job(force=True) IStatusMessage(self.request).addStatusMessage( _('Cron ${uid}/${name} was queued.', mapping = {'name': cron.name, 'uid': cron.uid}) ) runned = True return runned
def createAndAdd(self, data): if data.get('senviron', None): data['environ'] = crontab.json.loads( data['senviron']) ncron = crontab.Cron.load(data) crt = crontab.Crontab.load() crt.add_cron(ncron) crt.save() IStatusMessage(self.request).addStatusMessage( _('A new cron was added (%s)' % ncron.uid) ) self.request.response.redirect( self.context.absolute_url() + '/@@cron-settings' ) return ''
def cron_action(self): uid = self.request.form.get('uid', None) action = self.request.form.get('cron_action', None) crt = crontab.Crontab.load() changed = False if action == 'delete-cron': if self.delete_cron(crt, uid): changed = True ep = self.context.absolute_url() + '/@@cron-settings' if action == 'run-cron': if self.run_cron(crt, uid): ep = (self.context.absolute_url() + '/@@cron-settings/cron_view?uid=%s' % uid) else: # pragma: no cover IStatusMessage(self.request).addStatusMessage( _('Cron not queued'), ) if changed: crt.save() self.request.response.redirect(ep)
def getContent(self): uid = self.request.form.get('uid', None) crons = crontab.Crontab.load().by(uid=uid) if crons: cron = crons[0] return { 'uid': cron.uid, 'name': cron.name, 'user': cron.user, 'logs_limit': cron.logs_limit, 'activated': cron.activated, 'periodicity': cron.periodicity, 'senviron': crontab.json.dumps(cron.environ), } else: # pragma: no cover IStatusMessage(self.request).addStatusMessage( _('No such cron') ) self.request.response.redirect( self.context.absolute_url() + '/@@cron-settings' ) return {}
class InvalidObject(Exception): pass class InvalidLog(InvalidObject): pass class InvalidCron(InvalidObject): pass class InvalidCrontab(InvalidObject): pass class CronFormatError(Invalid): pass class RegistryCrontabNotReady(Exception):pass class AsyncQueueNotReady(Exception):pass RESULTS_FOLDER = '--results--' MANAGE_KEY = 'ccron.adapters.manager' job_status = vocabulary.SimpleVocabulary([ vocabulary.SimpleVocabulary.createTerm(0, '0', _(u'FAILURE')), vocabulary.SimpleVocabulary.createTerm(1, '1', _(u'OK')), vocabulary.SimpleVocabulary.createTerm(3, '3', _(u'NOTRUN')), vocabulary.SimpleVocabulary.createTerm(2, '2', _(u'WARN')) ]) def is_json_dict(value): if not value: return True try: v = json.loads(value) if not isinstance(v, dict): raise Exception() except: raise Invalid( 'it is not a JSON dict' )