[CalendarServer-changes] [13802] PyCalendar/trunk/src/pycalendar/icalendar
source_changes at macosforge.org
source_changes at macosforge.org
Tue Jul 29 11:19:07 PDT 2014
Revision: 13802
http://trac.calendarserver.org//changeset/13802
Author: cdaboo at apple.com
Date: 2014-07-29 11:19:07 -0700 (Tue, 29 Jul 2014)
Log Message:
-----------
Fix RRULE expansion caching issue when the cached period is extended.
Modified Paths:
--------------
PyCalendar/trunk/src/pycalendar/icalendar/recurrence.py
PyCalendar/trunk/src/pycalendar/icalendar/tests/test_recurrence.py
Modified: PyCalendar/trunk/src/pycalendar/icalendar/recurrence.py
===================================================================
--- PyCalendar/trunk/src/pycalendar/icalendar/recurrence.py 2014-07-29 14:59:53 UTC (rev 13801)
+++ PyCalendar/trunk/src/pycalendar/icalendar/recurrence.py 2014-07-29 18:19:07 UTC (rev 13802)
@@ -894,24 +894,21 @@
if self.mCached and (start != self.mCacheStart):
self.mCached = False
self.mFullyCached = False
- self.mRecurrences = []
# Is the current cache complete or does it extend past the requested
# range end
if not self.mCached or not self.mFullyCached \
and (self.mCacheUpto is None or self.mCacheUpto < range.getEnd()):
- cache_range = range.duplicate()
- # If partially cached just cache from previous cache end up to new
- # end
- if self.mCached:
- cache_range = Period(self.mCacheUpto, range.getEnd())
+ # Always wipe the existing cached items as we always start from the very first instance
+ # so we can properly track the count limit
+ self.mRecurrences = []
# Simple expansion is one where there is no BYXXX rule part
if not self.hasBy():
- self.mFullyCached = self.simpleExpand(start, cache_range, self.mRecurrences, float_offset)
+ self.mFullyCached = self.simpleExpand(start, range, self.mRecurrences, float_offset)
else:
- self.mFullyCached = self.complexExpand(start, cache_range, self.mRecurrences, float_offset)
+ self.mFullyCached = self.complexExpand(start, range, self.mRecurrences, float_offset)
# Set cache values
self.mCached = True
Modified: PyCalendar/trunk/src/pycalendar/icalendar/tests/test_recurrence.py
===================================================================
--- PyCalendar/trunk/src/pycalendar/icalendar/tests/test_recurrence.py 2014-07-29 14:59:53 UTC (rev 13801)
+++ PyCalendar/trunk/src/pycalendar/icalendar/tests/test_recurrence.py 2014-07-29 18:19:07 UTC (rev 13802)
@@ -167,6 +167,48 @@
)
+ 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 testMonthlyInUTC(self):
recur = Recurrence()
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20140729/c856667e/attachment-0001.html>
More information about the calendarserver-changes
mailing list