コード例 #1
0
 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')
             )
コード例 #2
0
 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'
     )
コード例 #3
0
 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})
             )
コード例 #4
0
 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
コード例 #5
0
 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
コード例 #6
0
 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 ''
コード例 #7
0
 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)
コード例 #8
0
 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 {}
コード例 #9
0
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'
        )