[CalendarServer-changes] [11458] PyCalendar/trunk/src/pycalendar
source_changes at macosforge.org
source_changes at macosforge.org
Wed Jul 3 19:12:11 PDT 2013
Revision: 11458
http://trac.calendarserver.org//changeset/11458
Author: cdaboo at apple.com
Date: 2013-07-03 19:12:11 -0700 (Wed, 03 Jul 2013)
Log Message:
-----------
Make sure changes to a recurrence rule clears out any cached expansion.
Modified Paths:
--------------
PyCalendar/trunk/src/pycalendar/recurrence.py
PyCalendar/trunk/src/pycalendar/tests/test_recurrence.py
Modified: PyCalendar/trunk/src/pycalendar/recurrence.py
===================================================================
--- PyCalendar/trunk/src/pycalendar/recurrence.py 2013-07-03 21:03:20 UTC (rev 11457)
+++ PyCalendar/trunk/src/pycalendar/recurrence.py 2013-07-04 02:12:11 UTC (rev 11458)
@@ -266,12 +266,18 @@
return True
+ def _setAndclearIfChanged(self, attr, value):
+ if getattr(self, attr) != value:
+ self.clear()
+ setattr(self, attr, value)
+
+
def getFreq(self):
return self.mFreq
def setFreq(self, freq):
- self.mFreq = freq
+ self._setAndclearIfChanged("mFreq", freq)
def getUseUntil(self):
@@ -279,7 +285,7 @@
def setUseUntil(self, use_until):
- self.mUseUntil = use_until
+ self._setAndclearIfChanged("mUseUntil", use_until)
def getUntil(self):
@@ -287,7 +293,7 @@
def setUntil(self, until):
- self.mUntil = until
+ self._setAndclearIfChanged("mUntil", until)
def getUseCount(self):
@@ -295,7 +301,7 @@
def setUseCount(self, use_count):
- self.mUseCount = use_count
+ self._setAndclearIfChanged("mUseCount", use_count)
def getCount(self):
@@ -303,7 +309,7 @@
def setCount(self, count):
- self.mCount = count
+ self._setAndclearIfChanged("mCount", count)
def getInterval(self):
@@ -311,7 +317,7 @@
def setInterval(self, interval):
- self.mInterval = interval
+ self._setAndclearIfChanged("mInterval", interval)
def getByMonth(self):
@@ -319,7 +325,7 @@
def setByMonth(self, by):
- self.mByMonth = by[:]
+ self._setAndclearIfChanged("mByMonth", by[:])
def getByMonthDay(self):
@@ -327,7 +333,7 @@
def setByMonthDay(self, by):
- self.mByMonthDay = by[:]
+ self._setAndclearIfChanged("mByMonthDay", by[:])
def getByYearDay(self):
@@ -335,7 +341,7 @@
def setByYearDay(self, by):
- self.mByYearDay = by[:]
+ self._setAndclearIfChanged("mByYearDay", by[:])
def getByDay(self):
@@ -343,7 +349,7 @@
def setByDay(self, by):
- self.mByDay = by[:]
+ self._setAndclearIfChanged("mByDay", by[:])
def getBySetPos(self):
@@ -351,7 +357,7 @@
def setBySetPos(self, by):
- self.mBySetPos = by
+ self._setAndclearIfChanged("mBySetPos", by[:])
def parse(self, data):
@@ -734,7 +740,7 @@
def isAdvancedRule(self):
# One that has BYMONTH,
# BYMONTHDAY (with no negative value),
- # BYDAY (with multiple unumbered, or numbered with all the same number
+ # BYDAY (with multiple unnumbered, or numbered with all the same number
# (1..4, -2, -1)
# BYSETPOS with +1, or -1 only
# no others
@@ -979,7 +985,7 @@
# Exclude dates on or after the chosen one
def excludeFutureRecurrence(self, exclude):
- # Expand the rule upto the exclude date
+ # Expand the rule up to the exclude date
items = []
period = PyCalendarPeriod()
period.init(self.mCacheStart, exclude)
Modified: PyCalendar/trunk/src/pycalendar/tests/test_recurrence.py
===================================================================
--- PyCalendar/trunk/src/pycalendar/tests/test_recurrence.py 2013-07-03 21:03:20 UTC (rev 11457)
+++ PyCalendar/trunk/src/pycalendar/tests/test_recurrence.py 2013-07-04 02:12:11 UTC (rev 11458)
@@ -138,3 +138,24 @@
],
)
print items
+
+
+ def testClearOnChange(self):
+
+ recur = PyCalendarRecurrence()
+ recur.parse("FREQ=DAILY")
+
+ start = PyCalendarDateTime(2013, 1, 1, 0, 0, 0)
+ end = PyCalendarDateTime(2017, 1, 1, 0, 0, 0)
+ range = PyCalendarPeriod(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)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20130703/49e06d2e/attachment-0001.html>
More information about the calendarserver-changes
mailing list