Exemple #1
0
    def schedule(self, dt, func, interval=0, repeat=0, *args, **kwargs):
        """
        Add the job to the scheduler for the specified time, interval, and number of repeats.
        Repeat of None with a specified interval means the job will repeat forever at that
        interval.
        """
        if not isinstance(dt, datetime):
            raise ValueError("Time argument must be a datetime object.")
        if not interval and repeat != 0:
            raise ValueError(
                "Must specify an interval if the task is repeating")
        if dt.tzinfo is None:
            raise ValueError(
                "Must use a timezone aware datetime object for scheduling tasks"
            )
        if isinstance(func, Job):
            job = func
        # else, turn it into a job first.
        else:
            job = Job(func, *args, **kwargs)

        job.state = State.SCHEDULED

        with self.session_scope() as session:
            scheduled_job = ScheduledJob(
                id=job.job_id,
                queue=self.queue.name,
                interval=interval,
                repeat=repeat,
                scheduled_time=naive_utc_datetime(dt),
                obj=job,
            )
            session.merge(scheduled_job)

            return job.job_id
Exemple #2
0
    def test_schedule_a_function_sets_time(self, scheduler):
        now = local_now()
        job_id = scheduler.schedule(now, id)

        with scheduler.session_scope() as session:
            scheduled_job = (scheduler._ns_query(session).filter_by(
                id=job_id).one_or_none())
            scheduled_time = scheduled_job.scheduled_time
        assert scheduled_time == naive_utc_datetime(now)
Exemple #3
0
 def test_scheduled_repeating_function_sets_new_job_at_interval(self, scheduler):
     now = local_now()
     scheduler.schedule(now, id, interval=1000, repeat=1)
     scheduler._now = lambda: now
     scheduler.check_schedule()
     with scheduler.session_scope() as session:
         scheduled_job = scheduler._ns_query(session).one_or_none()
         scheduled_time = scheduled_job.scheduled_time
     assert scheduled_time == naive_utc_datetime(now) + datetime.timedelta(
         seconds=1000
     )
Exemple #4
0
    def test_enqueue_in_a_function_sets_time(self, scheduler):
        diff = datetime.timedelta(seconds=1000)
        now = local_now()
        scheduler._now = lambda: now
        job_id = scheduler.enqueue_in(diff, id)

        with scheduler.session_scope() as session:
            scheduled_job = (scheduler._ns_query(session).filter_by(
                id=job_id).one_or_none())
            scheduled_time = scheduled_job.scheduled_time
        assert scheduled_time == naive_utc_datetime(now) + diff
Exemple #5
0
    def change_execution_time(self, job, date_time):
        """
        Change a job's execution time.
        """
        if date_time.tzinfo is None:
            raise ValueError(
                "Must use a timezone aware datetime object for scheduling tasks"
            )

        with self.session_scope() as session:
            scheduled_job = (session.query(ScheduledJob).filter_by(
                id=job.job_id).one_or_none())
            if scheduled_job:
                scheduled_job.scheduled_time = naive_utc_datetime(date_time)
                session.merge(scheduled_job)
            else:
                raise ValueError("Job not in scheduled jobs queue")