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))
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)
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)
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), )
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())
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)
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())
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()
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)
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, } )
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)
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)