def testMonthlyInUTC(self): recur = Recurrence() recur.parse("FREQ=MONTHLY") start = DateTime(2014, 1, 1, 12, 0, 0, tzid=Timezone(utc=True)) end = DateTime(2015, 1, 1, 0, 0, 0, tzid=Timezone(utc=True)) items = [] range = Period(start, end) recur.expand(DateTime(2014, 1, 1, 12, 0, 0, tzid=Timezone(tzid="America/New_York")), range, items) self.assertEqual( items, [ DateTime(2014, 1, 1, 12, 0, 0, tzid=Timezone(tzid="America/New_York")), DateTime(2014, 2, 1, 12, 0, 0, tzid=Timezone(tzid="America/New_York")), DateTime(2014, 3, 1, 12, 0, 0, tzid=Timezone(tzid="America/New_York")), DateTime(2014, 4, 1, 12, 0, 0, tzid=Timezone(tzid="America/New_York")), DateTime(2014, 5, 1, 12, 0, 0, tzid=Timezone(tzid="America/New_York")), DateTime(2014, 6, 1, 12, 0, 0, tzid=Timezone(tzid="America/New_York")), DateTime(2014, 7, 1, 12, 0, 0, tzid=Timezone(tzid="America/New_York")), DateTime(2014, 8, 1, 12, 0, 0, tzid=Timezone(tzid="America/New_York")), DateTime(2014, 9, 1, 12, 0, 0, tzid=Timezone(tzid="America/New_York")), DateTime(2014, 10, 1, 12, 0, 0, tzid=Timezone(tzid="America/New_York")), DateTime(2014, 11, 1, 12, 0, 0, tzid=Timezone(tzid="America/New_York")), DateTime(2014, 12, 1, 12, 0, 0, tzid=Timezone(tzid="America/New_York")), ], )
def instances(start, rrule): """ Expand an RRULE. """ recur = Recurrence() recur.parse(rrule) start = DateTime.parseText(start) end = start.duplicate() end.offsetYear(100) items = [] range = Period(start, end) recur.expand(start, range, items) print("DTSTART:{}".format(start)) print("RRULE:{}".format(rrule)) print("Instances: {}".format(", ".join(map(str, items))))
def testClearOnChange(self): recur = Recurrence() recur.parse("FREQ=DAILY") start = DateTime(2013, 1, 1, 0, 0, 0) end = DateTime(2017, 1, 1, 0, 0, 0) range = Period(start, end) items = [] recur.expand(start, range, items) self.assertTrue(recur.mCached) self.assertTrue(len(items) > 100) recur.setUseCount(True) recur.setCount(10) self.assertFalse(recur.mCached) items = [] recur.expand(start, range, items) self.assertEqual(len(items), 10)
def testWeeklyTwice(self): recur = Recurrence() recur.parse("FREQ=WEEKLY") start = DateTime(2014, 1, 1, 12, 0, 0, tzid=Timezone(utc=True)) end = DateTime(2014, 2, 1, 0, 0, 0, tzid=Timezone(utc=True)) items = [] range = Period(start, end) recur.expand(DateTime(2014, 1, 1, 12, 0, 0, tzid=Timezone(tzid="America/New_York")), range, items) self.assertEqual( items, [ DateTime(2014, 1, 1, 12, 0, 0, tzid=Timezone(tzid="America/New_York")), DateTime(2014, 1, 8, 12, 0, 0, tzid=Timezone(tzid="America/New_York")), DateTime(2014, 1, 15, 12, 0, 0, tzid=Timezone(tzid="America/New_York")), DateTime(2014, 1, 22, 12, 0, 0, tzid=Timezone(tzid="America/New_York")), DateTime(2014, 1, 29, 12, 0, 0, tzid=Timezone(tzid="America/New_York")), ], ) start = DateTime(2014, 1, 1, 12, 0, 0, tzid=Timezone(utc=True)) end = DateTime(2014, 3, 1, 0, 0, 0, tzid=Timezone(utc=True)) items = [] range = Period(start, end) recur.expand(DateTime(2014, 1, 1, 12, 0, 0, tzid=Timezone(tzid="America/New_York")), range, items) self.assertEqual( items, [ DateTime(2014, 1, 1, 12, 0, 0, tzid=Timezone(tzid="America/New_York")), DateTime(2014, 1, 8, 12, 0, 0, tzid=Timezone(tzid="America/New_York")), DateTime(2014, 1, 15, 12, 0, 0, tzid=Timezone(tzid="America/New_York")), DateTime(2014, 1, 22, 12, 0, 0, tzid=Timezone(tzid="America/New_York")), DateTime(2014, 1, 29, 12, 0, 0, tzid=Timezone(tzid="America/New_York")), DateTime(2014, 2, 5, 12, 0, 0, tzid=Timezone(tzid="America/New_York")), DateTime(2014, 2, 12, 12, 0, 0, tzid=Timezone(tzid="America/New_York")), DateTime(2014, 2, 19, 12, 0, 0, tzid=Timezone(tzid="America/New_York")), DateTime(2014, 2, 26, 12, 0, 0, tzid=Timezone(tzid="America/New_York")), ], )
def testExampleRules(self): examples = os.path.join(os.path.dirname(__file__), "rrule_examples.json") with open(examples) as f: examples = json.loads(f.read()) for ctr, i in enumerate(examples): recur = Recurrence() recur.parse(i["rule"]) start = DateTime.parseText(i["start"]) end = DateTime.parseText(i["end"]) results = map(DateTime.parseText, i["results"]) items = [] range = Period(start, end) recur.expand(start, range, items) self.assertEqual(items, results, msg="Failed rule: #{} {}".format( ctr + 1, i["rule"]))
def testExampleRules(self): examples = os.path.join(os.path.dirname(__file__), "rrule_examples.json") with open(examples) as f: examples = json.loads(f.read()) for ctr, i in enumerate(examples): recur = Recurrence() recur.parse(i["rule"]) start = DateTime.parseText(i["start"]) end = DateTime.parseText(i["end"]) results = map(DateTime.parseText, i["results"]) items = [] range = Period(start, end) recur.expand(start, range, items) self.assertEqual( items, results, msg="Failed rule: #{} {}".format(ctr + 1, i["rule"]) )