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)
Пример #2
0
    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)
Пример #3
0
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)))
Пример #4
0
    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()
Пример #5
0
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
Пример #6
0
 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