Пример #1
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)
Пример #2
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()
Пример #3
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