def vacaciones(request): obj = Objeto.objects.all() id_obj_t = {} id_obj_f = {} for objeto in obj: logs_obj = Log.objects.filter(output = objeto) horas_par_t = [] horas_par_f = [] for i in range(len(logs_obj)): for j in range(len(logs_obj)): ta = True if logs_obj[i].hora.hour == logs_obj[j].hora.hour and logs_obj[i].status == logs_obj[j].status and j != i: if logs_obj[i].status: for t in horas_par_t: if t.hora.hour == logs_obj[i].hora.hour: ta = False if ta: horas_par_t.append(logs_obj[i]) else: for f in horas_par_f: if f.hora.hour == logs_obj[i].hora.hour: ta = False if ta: horas_par_f.append(logs_obj[i]) id_obj_t.update({objeto.id:horas_par_t}) id_obj_f.update({objeto.id:horas_par_f}) print id_obj_t print id_obj_f context = RequestContext(request) for i in id_obj_t: for j in range(len(id_obj_t[i])): vaca_cron = CrontabSchedule() vaca_cron.minute = id_obj_f[i][j].hora.minute vaca_cron.hour = id_obj_f[i][j].hora.hour vaca_cron.save() vaca_periodic = PeriodicTask() vaca_periodic.name = 'Vacaciones ' + str(id_obj_f[i][j].output.id) vaca_periodic.task = "module_1.tasks.on" vaca_periodic.crontab = vaca_cron vaca_periodic.args = "[ " +str(id_obj_f[i][j].output.pin)+ " ]" vaca_periodic.save() for i in id_obj_f: for j in range(len(id_obj_f[i])): vaca_cron = CrontabSchedule() vaca_cron.minute = id_obj_f[i][j].hora.minute vaca_cron.hour = id_obj_f[i][j].hora.hour vaca_cron.save() vaca_periodic = PeriodicTask() vaca_periodic.name = 'Vacaciones ' + str(id_obj_f[i][j].output.id) vaca_periodic.task = "module_1.tasks.off" vaca_periodic.crontab = vaca_cron vaca_periodic.args = "[ " +str(id_obj_f[i][j].output.pin)+ " ]" vaca_periodic.save() luces = Luz.objects.all() rule = Regla.objects.all() return render_to_response('luzauto.html',{'luz':luces, 'rules':rule},context)
def save(self, *args, **kwargs): # Removes all other entries if there are any self.__class__.objects.exclude(id=self.id).delete() # creates new checkout task if self.checkout_task is None: cron = CrontabSchedule( minute=self.scheduled_verification_time.minute, hour=self.scheduled_verification_time.hour) cron.save() ctask = PeriodicTask( name="scheduled-checkout-%s" % cron.id, task="apps.organization.tasks.automatic_checkout", crontab=cron, queue="celery") ctask.save() self.checkout_task = ctask else: ctask = self.checkout_task cron = ctask.crontab cron.hour = self.scheduled_verification_time.hour cron.minute = self.scheduled_verification_time.minute cron.save() ctask.save() # creates new reminder task if self.reminder_task is None: cron = CrontabSchedule(minute=self.checkout_reminder_time.minute, hour=self.checkout_reminder_time.hour) cron.save() rtask = PeriodicTask( name="scheduled-reminder-%s" % cron.id, task="apps.organization.tasks.checkout_notification", crontab=cron, queue="celery") rtask.save() self.reminder_task = rtask else: rtask = self.reminder_task cron = rtask.crontab cron.hour = self.checkout_reminder_time.hour cron.minute = self.checkout_reminder_time.minute cron.save() rtask.save() super(OrgSettings, self).save(*args, **kwargs)
def make_periodic_crontab_task(name, task, minute, hour, day_of_week, *args, **kwargs): '''creates a new periodic crontab task, with name=name, updates fields if already exists''' pt, created = PeriodicTask.objects.get_or_create(name= name) if pt.interval: print("Warning, old task entry had an interval") if pt.interval.periodictask_set.count() == 1: print("Was the only one, deleting it") i = pt.interval i.delete() pt.interval = None if not pt.crontab: ct= CrontabSchedule() else: ct= pt.crontab ct.minute = minute ct.hour = hour ct.day_of_week = day_of_week ct.save() pt.crontab = ct pt.task = task pt.args = anyjson.serialize(args) pt.kwargs = anyjson.serialize(kwargs) pt.save() print ("saved task: %s, created: %s" % (str(pt), str(created)))
def post_save(sender, instance, created, **kwargs): """ Update djcelery beat schedule :param sender: The model class (Settings) :param instance: The actual instance being saved. :param created: A boolean; True if a new record was created :return: """ # for migrations process if created: return from djcelery.models import PeriodicTask, CrontabSchedule try: task_object = PeriodicTask.objects.get( name=Settings.MAILING_TASK_LABEL) cron_object = task_object.crontab except ObjectDoesNotExist: cron_object = CrontabSchedule() task_object = PeriodicTask(name=Settings.MAILING_TASK_LABEL, task=Settings.MAILING_TASK_NAME) cron_object.minute = instance.mailing_time.minute cron_object.hour = instance.mailing_time.hour cron_object.save() task_object.crontab = cron_object task_object.args = "[{}]".format(instance.mailing_threads) task_object.save()
def deactivate_task(uid, days=14): """ uid:user.id days: 默认两周后关闭账户 """ from djcelery.models import CrontabSchedule, PeriodicTask from django.contrib.auth.models import User import datetime now = datetime.datetime.today() deadline = now + datetime.timedelta(minutes=3) task_date = CrontabSchedule() task_date.minute = deadline.timetuple().tm_min task_date.hour = deadline.timetuple().tm_hour task_date.day_of_month = deadline.timetuple().tm_mday task_date.month_of_year = deadline.timetuple().tm_mon try: from django.db import transaction with transaction.atomic(): task_date.save() except: return False user = User.objects.get(pk=uid) name = "Deactivate_User_%s" % uid new_task = PeriodicTask(name=name) new_task.name = name new_task.task = 'templates.tasks.deactivate_tempuser' new_task.crontab = task_date new_task.args = "[%s]" % uid new_task.enabled = True try: from django.db import transaction with transaction.atomic(): new_task.save() except: return False return True
def schedule_cron(task_name, minute='*', hour='*', day_of_week='*', day_of_month='*', month_of_year='*' ,args=None, kwargs=None): # create the periodic task and the interval ptask_name = "%s_%s" % (task_name, datetime.now()) # create some name for the period task crontab_schedules = CrontabSchedule.objects.filter(minute=minute, hour=hour, day_of_week=day_of_week, day_of_month=day_of_month, month_of_year=month_of_year) if crontab_schedules: # just check if interval schedules exist like that already and reuse em crontab_schedule = crontab_schedules[0] else: # create a brand new interval schedule crontab_schedule = CrontabSchedule() crontab_schedule.minute = minute crontab_schedule.hour = hour crontab_schedule.day_of_week = day_of_week crontab_schedule.day_of_month = day_of_month crontab_schedule.month_of_year = month_of_year crontab_schedule.save() ptask = PeriodicTask(name=ptask_name, task=task_name, crontab=crontab_schedule) if args: ptask.args = args if kwargs: ptask.kwargs = kwargs ptask.save() return TaskScheduler.objects.create(periodic_task=ptask)
def add_rule(request): context = RequestContext(request) id= request.POST.get('id') lista_permitidos = Usuario.objects.filter(permisos_luces=id) if lista_permitidos.__str__() != "[]": for permitido in lista_permitidos: if permitido.user.id == request.user.id: if request.method=='POST': print "hola" luz = Luz.objects.get(id = request.POST['id']) dias = eval(request.POST['days']) print "0" print dias,"-",request.POST['days'] hora = eval(request.POST['hours']) print "1" regla = Regla() print "2" regla.relacion = luz print "3" regla.pin = luz.pin print "4" if request.POST['status'] == "false": regla.status=False print request.POST['status'] else: regla.status=True print "true" print "4" days_t = [] for i in dias: if i=="Lunes": print "Lun" regla.lun = True days_t.append(1) elif i=="Martes": print "Mar" regla.mar = True days_t.append(2) elif i=="Miercoles": print "Mie" regla.mie = True days_t.append(3) elif i=="Jueves": print "Jue" regla.jue = True days_t.append(4) elif i=="Viernes": print "Vie" regla.vie = True days_t.append(5) elif i=="Sabado": print "Sab" regla.sab = True days_t.append(6) elif i=="Domingo": print "Dom" regla.dom = True days_t.append(0) regla.from_hour = hora[0] f_h = str(hora[0]) print "from" regla.to_hour = hora[1] t_h = str(hora[1]) print "to" regla.save() print "save" cron = CrontabSchedule() cron.minute = f_h[-2:] cron.hour = f_h[:2] print days_t aux="" for i in range(len(days_t)): if i == len(days_t)-1: aux += str(days_t[i]) else: aux += str(days_t[i])+"," days_t = aux print days_t cron.day_of_week = days_t cron.save() print "cron save" regla = Regla.objects.latest('id') cronT = CrontabSchedule.objects.latest('id') print "regla y cronT" periodic = PeriodicTask() print "P_t" na = str(regla.id)+"_1" print "na" periodic.name = na print "name" if regla.status: periodic.task = "module_1.tasks.on" else: periodic.task = "module_1.tasks.off" print "status" periodic.crontab = cronT print "cron= p_t" periodic.args = "[ " +str(regla.pin)+ " ]" print "arg" periodic.save() print "periodic save" cron = CrontabSchedule() cron.minute = t_h[-2:] cron.hour = t_h[:2] print days_t aux="" for i in range(len(days_t)): if i == len(days_t)-1: aux += str(days_t[i]) else: aux += str(days_t[i])+"," days_t = aux print days_t cron.day_of_week = days_t cron.save() print "cron save" cronT = CrontabSchedule.objects.latest('id') print "regla y cronT" periodic = PeriodicTask() print "P_t" na = str(regla.id)+"_2" print "na" periodic.name = na print "name" if regla.status: periodic.task = "module_1.tasks.off" else: periodic.task = "module_1.tasks.on" print "status" periodic.crontab = cronT print "cron= p_t" periodic.args = "[ " +str(regla.pin)+ " ]" print "arg" periodic.save() print "periodic save" rule = Regla.objects.all() return render_to_response('tab.html',{'rules':rule},context) rule = Regla.objects.all() response = render_to_response('tab.html',{'rules':rule},context) response.status_code = 202 return response