예제 #1
0
    def test_rrule_timezone(self):
        tz = timezone.get_timezone('US/Eastern')

        start1 = datetime(2015, 12, 30, 12, 59, 22, tzinfo=timezone.utc)
        start2 = start1.astimezone(tz)

        r1 = rrule('MINUTELY', dtstart=start1, count=1)
        r2 = rrule('MINUTELY', dtstart=start2, count=1)

        self.assertEqual(self.dumps(r1), self.dumps(r2))
예제 #2
0
 def test_freq(self):
     r = rrule('MINUTELY', dtstart=datetime.utcnow() + timedelta(minutes=1))
     eta_from_now = r.remaining_estimate(datetime.utcnow())
     eta_after_one_minute = r.remaining_estimate(datetime.utcnow() +
                                                 timedelta(minutes=1))
     self.assertTrue(eta_from_now.total_seconds() > 0)
     self.assertTrue(eta_after_one_minute.total_seconds() > 0)
예제 #3
0
 def test_freq__with_multiple_count(self):
     r = rrule('MINUTELY', dtstart=datetime.utcnow() + timedelta(minutes=1), count=2)
     eta_from_now = r.remaining_estimate(datetime.utcnow())
     eta_after_one_minute = r.remaining_estimate(datetime.utcnow() + timedelta(minutes=1))
     eta_after_two_minutes = r.remaining_estimate(datetime.utcnow() + timedelta(minutes=2))
     self.assertTrue(eta_from_now.total_seconds() > 0)
     self.assertTrue(eta_after_one_minute.total_seconds() > 0)
     self.assertEquals(eta_after_two_minutes, None)
예제 #4
0
    def test_rrule(self):
        d = self.rrule()

        result = self.loads(json.dumps(d))
        self.assertEqual(
            result,
            rrule('MINUTELY', dtstart=datetime(2015, 12, 30, 12, 59, 22, tzinfo=timezone.utc), count=1),
            )
예제 #5
0
 def test_rrule(self):
     r = rrule(
         'MINUTELY',
         dtstart=datetime(2015, 12, 30, 12, 59, 22, tzinfo=timezone.utc),
         until=datetime(2015, 12, 31, 12, 59, 22, tzinfo=timezone.utc),
         count=1,
         )
     result = self.dumps(r)
     self.assertEqual(json.loads(result), self.rrule())
예제 #6
0
 def test_freq__with_single_count(self):
     r = rrule('MINUTELY', dtstart=datetime.utcnow(), count=1)
     # If job was never run, it should be due and have
     # no ETA for the following occurrence.
     is_due, next = r.is_due(datetime(1970, 1, 1))
     self.assertTrue(is_due)
     self.assertEquals(next, None)
     # It should not be due if it was already run once.
     is_due, next = r.is_due(datetime.utcnow())
     self.assertFalse(is_due)
     self.assertEquals(next, None)
예제 #7
0
    def test_rrule_timezone(self):
        tz = timezone.get_timezone('US/Eastern')

        start1 = datetime(2015, 12, 30, 12, 59, 22, tzinfo=timezone.utc)
        start2 = start1.astimezone(tz)

        r1 = rrule('MINUTELY', dtstart=start1, count=1)
        r2 = rrule('MINUTELY', dtstart=start2, count=1)

        r1_json = self.dumps(r1)
        r2_json = self.dumps(r2)

        r1_parsed = self.loads(r1_json)
        self.assertEqual(r1_parsed.dtstart.utcoffset(), r1.dtstart.utcoffset())

        r2_parsed = self.loads(r2_json)
        self.assertEqual(r2_parsed.dtstart.utcoffset(), r2.dtstart.utcoffset())

        self.assertEqual(r1_parsed.dtstart, r2_parsed.dtstart)
        self.assertNotEqual(r1_parsed.dtstart.utcoffset(), r2_parsed.dtstart.utcoffset())
예제 #8
0
def test_schedule_field_rrule_serialize():
    # to client/frontend
    # TODO(boertel) redbeat strip microsecond
    now = datetime.utcnow().replace(microsecond=0)
    schedule = rrule(DAILY, interval=30, dtstart=now)

    obj = ObjectWithSchedule(schedule=schedule)
    field = ScheduleField({'rrule': RRuleSchema})
    data = field.serialize('schedule', obj)
    assert data['type'] == 'rrule'
    assert data['freq'] == 'DAILY'
    assert data['interval'] == 30
    assert data['dtstart'] == maya.MayaDT.from_datetime(now).iso8601()
예제 #9
0
 def test_freq__with_multiple_count(self):
     r = rrule('MINUTELY', dtstart=datetime.utcnow(), count=2)
     is_due, next = r.is_due(datetime(1970, 1, 1))
     self.assertTrue(is_due)
     self.assertTrue(next > 0)
     # There should still be one more occurrence remaining
     # if it was run once after dtstart.
     is_due, next = r.is_due(datetime.utcnow())
     self.assertFalse(is_due)
     self.assertTrue(next > 0)
     # There should be no more occurrences after one minute.
     is_due, next = r.is_due(datetime.utcnow() + timedelta(minutes=1))
     self.assertFalse(is_due)
     self.assertEquals(next, None)
예제 #10
0
 def test_weekday_in_rrule(self):
     r = rrule(
         dateutil_rrule.WEEKLY,
         dtstart=datetime(2015, 12, 30, 12, 59, 22, tzinfo=timezone.utc),
         until=datetime(2015, 12, 31, 12, 59, 22, tzinfo=timezone.utc),
         byweekday=(dateutil_rrule.MO, dateutil_rrule.WE, dateutil_rrule.FR)
     )
     result = self.dumps(r)
     self.assertEqual(
         json.loads(result),
         {
             '__type__': 'rrule',
             'freq': 2,
             'dtstart': 1451480362,
             'dtstart_tz': 0,
             'interval': 1,
             'wkst': None,
             'count': None,
             'until': 1451566762,
             'until_tz': 0,
             'bysetpos': None,
             'bymonth': None,
             'bymonthday': None,
             'byyearday': None,
             'byeaster': None,
             'byweekno': None,
             'byweekday': [
                 {'__type__': 'weekday', 'wkday': 0},
                 {'__type__': 'weekday', 'wkday': 2},
                 {'__type__': 'weekday', 'wkday': 4},
             ],
             'byhour': None,
             'byminute': None,
             'bysecond': None,
         }
     )
예제 #11
0
 def test_freq__starts_after_one_minute(self):
     r = rrule('MINUTELY', dtstart=datetime.utcnow() + timedelta(minutes=1))
     is_due, next = r.is_due(datetime.utcnow())
     self.assertFalse(is_due)
     self.assertTrue(next > 0)
예제 #12
0
 def test_freq__starting_now(self):
     r = rrule('MINUTELY', dtstart=datetime.utcnow())
     # Assuming job was never run, i.e. last_run_at == epoch
     is_due, next = r.is_due(datetime(1970, 1, 1))
     self.assertTrue(is_due)
     self.assertTrue(next > 0)