Beispiel #1
0
 def schedule(args=None, kwargs=None, eta=None, convert_utc=True):
     if convert_utc and eta:
         eta = local_to_utc(eta)
     cmd = klass((args or (), kwargs or {}),
                 execute_time=eta,
                 retries=retries)
     return invoker.enqueue(cmd)
Beispiel #2
0
Datei: api.py Projekt: Kopei/huey
 def schedule(args=None,
              kwargs=None,
              eta=None,
              delay=None,
              convert_utc=True,
              task_id=None):
     if delay and eta:
         raise ValueError('Both a delay and an eta cannot be '
                          'specified at the same time')
     if delay:
         eta = (datetime.datetime.now() +
                datetime.timedelta(seconds=delay))
     if eta:
         if is_naive(eta) and convert_utc:
             eta = local_to_utc(eta)
         elif is_aware(eta) and convert_utc:
             eta = aware_to_utc(eta)
         elif is_aware(eta) and not convert_utc:
             eta = make_naive(eta)
     cmd = klass((args or (), kwargs or {}),
                 execute_time=eta,
                 retries=retries,
                 retry_delay=retry_delay,
                 task_id=task_id)
     return self.enqueue(cmd)
Beispiel #3
0
 def schedule(args=None, kwargs=None, eta=None, delay=None, convert_utc=True):
     if delay and eta:
         raise ValueError('Both a delay and an eta cannot be specified at the same time')
     if delay:
         eta = datetime.datetime.now() + datetime.timedelta(seconds=delay)
     if convert_utc and eta:
         eta = local_to_utc(eta)
     cmd = klass((args or (), kwargs or {}), execute_time=eta, retries=retries)
     return invoker.enqueue(cmd)
Beispiel #4
0
 def test_schedule_local_utc(self):
     dt = datetime.datetime(2011, 1, 1, 0, 0)
     dt2 = datetime.datetime(2037, 1, 1, 0, 0)
     r1 = modify_state.schedule(args=('k', 'v'), eta=dt)
     r2 = modify_state.schedule(args=('k2', 'v2'), eta=dt2)
     
     # dequeue a *single* message 
     pt = self.spawn(self.consumer.check_message)
     
     # work on any messages generated by the processor thread
     st = self.spawn(self.consumer.worker_pool)
     
     pt.join()
     self.assertTrue('k' in state)
     self.assertEqual(self.consumer.schedule._schedule, {})
     
     # dequeue a *single* message 
     pt = self.spawn(self.consumer.check_message)
     pt.join()
     
     # it got stored in the schedule instead of executing
     self.assertFalse('k2' in state)
     self.assertTrue(r2.task_id in self.consumer.schedule._schedule)
     
     # run through an iteration of the scheduler
     self.consumer.check_schedule(dt)
     
     # our command was not enqueued
     self.assertEqual(len(self.consumer.invoker.queue), 0)
     
     # try running the scheduler with the time the command should run
     self.consumer.check_schedule(local_to_utc(dt2))
     
     # it was enqueued
     self.assertEqual(len(self.consumer.invoker.queue), 1)
     self.assertEqual(self.consumer.schedule._schedule, {})
     
     # dequeue and inspect -- it won't be executed because the scheduler will
     # see that it is scheduled to run in the future and plop it back into the
     # schedule
     command = self.consumer.invoker.dequeue()
     self.assertEqual(command.task_id, r2.task_id)
     self.assertEqual(command.execute_time, local_to_utc(dt2))
Beispiel #5
0
    def test_schedule_local_utc(self):
        dt = datetime.datetime(2011, 1, 1, 0, 0)
        dt2 = datetime.datetime(2037, 1, 1, 0, 0)
        r1 = modify_state.schedule(args=('k', 'v'), eta=dt)
        r2 = modify_state.schedule(args=('k2', 'v2'), eta=dt2)

        # dequeue a *single* message
        pt = self.spawn(self.consumer.check_message)

        # work on any messages generated by the processor thread
        st = self.spawn(self.consumer.worker_pool)

        pt.join()
        self.assertTrue('k' in state)
        self.assertEqual(self.consumer.schedule._schedule, {})

        # dequeue a *single* message
        pt = self.spawn(self.consumer.check_message)
        pt.join()

        # it got stored in the schedule instead of executing
        self.assertFalse('k2' in state)
        self.assertTrue(r2.task_id in self.consumer.schedule._schedule)

        # run through an iteration of the scheduler
        self.consumer.check_schedule(dt)

        # our command was not enqueued
        self.assertEqual(len(self.consumer.invoker.queue), 0)

        # try running the scheduler with the time the command should run
        self.consumer.check_schedule(local_to_utc(dt2))

        # it was enqueued
        self.assertEqual(len(self.consumer.invoker.queue), 1)
        self.assertEqual(self.consumer.schedule._schedule, {})

        # dequeue and inspect -- it won't be executed because the scheduler will
        # see that it is scheduled to run in the future and plop it back into the
        # schedule
        command = self.consumer.invoker.dequeue()
        self.assertEqual(command.task_id, r2.task_id)
        self.assertEqual(command.execute_time, local_to_utc(dt2))
Beispiel #6
0
 def _normalize_execute_time(self, eta=None, delay=None, convert_utc=True):
     if delay and eta:
         raise ValueError('Both a delay and an eta cannot be '
                          'specified at the same time')
     elif delay:
         method = (convert_utc and datetime.datetime.utcnow or
                   datetime.datetime.now)
         return method() + datetime.timedelta(seconds=delay)
     elif eta:
         if is_naive(eta) and convert_utc:
             eta = local_to_utc(eta)
         elif is_aware(eta) and convert_utc:
             eta = aware_to_utc(eta)
         elif is_aware(eta) and not convert_utc:
             eta = make_naive(eta)
         return eta
Beispiel #7
0
 def _normalize_execute_time(self, eta=None, delay=None, convert_utc=True):
     if delay and eta:
         raise ValueError('Both a delay and an eta cannot be '
                          'specified at the same time')
     elif delay:
         method = (convert_utc and datetime.datetime.utcnow or
                   datetime.datetime.now)
         return method() + datetime.timedelta(seconds=delay)
     elif eta:
         if is_naive(eta) and convert_utc:
             eta = local_to_utc(eta)
         elif is_aware(eta) and convert_utc:
             eta = aware_to_utc(eta)
         elif is_aware(eta) and not convert_utc:
             eta = make_naive(eta)
         return eta
Beispiel #8
0
 def schedule(args=None, kwargs=None, eta=None, delay=None,
              convert_utc=True):
     if delay and eta:
         raise ValueError('Both a delay and an eta cannot be '
                          'specified at the same time')
     if delay:
         eta = (datetime.datetime.now() +
                datetime.timedelta(seconds=delay))
     if convert_utc and eta:
         eta = local_to_utc(eta)
     cmd = klass(
         (args or (), kwargs or {}),
         execute_time=eta,
         retries=retries,
         retry_delay=retry_delay)
     return self.enqueue(cmd)
Beispiel #9
0
    def test_schedule(self):
        dt = datetime.datetime(2011, 1, 1, 0, 1)
        add('k', 'v')
        self.assertEqual(len(queue), 1)

        task = huey.dequeue()
        self.assertEqual(task.execute_time, None)

        add.schedule(args=('k2', 'v2'), eta=dt)
        self.assertEqual(len(queue), 1)
        task = huey.dequeue()
        self.assertEqual(task.execute_time, local_to_utc(dt))

        add.schedule(args=('k3', 'v3'), eta=dt, convert_utc=False)
        self.assertEqual(len(queue), 1)
        task = huey.dequeue()
        self.assertEqual(task.execute_time, dt)
Beispiel #10
0
    def test_schedule(self):
        dt = datetime.datetime(2011, 1, 1, 0, 1)
        add('k', 'v')
        self.assertEqual(len(queue), 1)

        cmd = invoker.dequeue()
        self.assertEqual(cmd.execute_time, None)

        add.schedule(args=('k2', 'v2'), eta=dt)
        self.assertEqual(len(queue), 1)
        cmd = invoker.dequeue()
        self.assertEqual(cmd.execute_time, local_to_utc(dt))

        add.schedule(args=('k3', 'v3'), eta=dt, convert_utc=False)
        self.assertEqual(len(queue), 1)
        cmd = invoker.dequeue()
        self.assertEqual(cmd.execute_time, dt)
Beispiel #11
0
    def test_scheduled_time(self):
        put_data('k', 'v')

        task = huey.dequeue()
        self.assertEqual(len(huey), 0)
        self.assertEqual(task.execute_time, None)

        dt = datetime.datetime(2011, 1, 1, 0, 1)
        put_data.schedule(args=('k2', 'v2'), eta=dt)

        self.assertEqual(len(huey), 1)
        task = huey.dequeue()
        self.assertEqual(task.execute_time, local_to_utc(dt))

        put_data.schedule(args=('k3', 'v3'), eta=dt, convert_utc=False)
        self.assertEqual(len(huey), 1)
        task = huey.dequeue()
        self.assertEqual(task.execute_time, dt)
Beispiel #12
0
    def test_scheduled_time(self):
        put_data("k", "v")

        task = huey.dequeue()
        self.assertEqual(len(huey), 0)
        self.assertEqual(task.execute_time, None)

        dt = datetime.datetime(2011, 1, 1, 0, 1)
        put_data.schedule(args=("k2", "v2"), eta=dt)

        self.assertEqual(len(huey), 1)
        task = huey.dequeue()
        self.assertEqual(task.execute_time, local_to_utc(dt))

        put_data.schedule(args=("k3", "v3"), eta=dt, convert_utc=False)
        self.assertEqual(len(huey), 1)
        task = huey.dequeue()
        self.assertEqual(task.execute_time, dt)
Beispiel #13
0
 def schedule(args=None, kwargs=None, eta=None, delay=None,
              convert_utc=True, task_id=None):
     if delay and eta:
         raise ValueError('Both a delay and an eta cannot be '
                          'specified at the same time')
     if delay:
         eta = (datetime.datetime.now() +
                datetime.timedelta(seconds=delay))
     if convert_utc and eta:
         eta = local_to_utc(eta)
     cmd = klass(
         (args or (), kwargs or {}),
         execute_time=eta,
         retries=retries,
         retry_delay=retry_delay,
         task_id=task_id)
     enqueued = self.enqueue(cmd)
     self.emit_task("enqueued", cmd)
     return enqueued
Beispiel #14
0
    def test_schedule_persistence(self):
        # should not error out as it will be EmptyData
        self.consumer.load_schedule()

        dt = datetime.datetime(2037, 1, 1, 0, 0)
        dt2 = datetime.datetime(2037, 1, 1, 0, 1)
        r = modify_state.schedule(args=('k', 'v'), eta=dt, convert_utc=False)
        r2 = modify_state.schedule(args=('k2', 'v2'), eta=dt2, convert_utc=False)

        # two messages in the queue
        self.assertEqual(len(self.consumer.invoker.queue), 2)

        # pull 'em down
        self.consumer.check_message()
        self.consumer.check_message()

        self.consumer.save_schedule()
        self.consumer.schedule._schedule = {}

        self.consumer.load_schedule()
        self.assertTrue(r.command.task_id in self.consumer.schedule._schedule)
        self.assertTrue(r2.command.task_id in self.consumer.schedule._schedule)

        cmd1 = self.consumer.schedule._schedule[r.command.task_id]
        cmd2 = self.consumer.schedule._schedule[r2.command.task_id]

        self.assertEqual(cmd1.execute_time, dt)
        self.assertEqual(cmd2.execute_time, dt2)

        # check w/conversion
        r3 = modify_state.schedule(args=('k3', 'v3'), eta=dt)
        self.consumer.check_message()

        self.consumer.save_schedule()
        self.consumer.schedule._schedule = {}

        self.consumer.load_schedule()
        cmd3 = self.consumer.schedule._schedule[r3.command.task_id]
        self.assertEqual(cmd3.execute_time, local_to_utc(dt))
Beispiel #15
0
    def test_schedule_persistence(self):
        dt = datetime.datetime(2037, 1, 1, 0, 0)
        dt2 = datetime.datetime(2037, 1, 1, 0, 1)
        r = modify_state.schedule(args=('k', 'v'), eta=dt, convert_utc=False)
        r2 = modify_state.schedule(args=('k2', 'v2'),
                                   eta=dt2,
                                   convert_utc=False)

        # two messages in the queue
        self.assertEqual(len(self.consumer.invoker.queue), 2)

        # pull 'em down
        self.consumer.check_message()
        self.consumer.check_message()

        self.consumer.save_schedule()
        self.consumer.schedule._schedule = {}

        self.consumer.load_schedule()
        self.assertTrue(r.task_id in self.consumer.schedule._schedule)
        self.assertTrue(r2.task_id in self.consumer.schedule._schedule)

        cmd1 = self.consumer.schedule._schedule[r.task_id]
        cmd2 = self.consumer.schedule._schedule[r2.task_id]

        self.assertEqual(cmd1.execute_time, dt)
        self.assertEqual(cmd2.execute_time, dt2)

        # check w/conversion
        r3 = modify_state.schedule(args=('k3', 'v3'), eta=dt)
        self.consumer.check_message()

        self.consumer.save_schedule()
        self.consumer.schedule._schedule = {}

        self.consumer.load_schedule()
        cmd3 = self.consumer.schedule._schedule[r3.task_id]
        self.assertEqual(cmd3.execute_time, local_to_utc(dt))