[CalendarServer-changes] [3903] CalendarServer/trunk/twistedcaldav
source_changes at macosforge.org
source_changes at macosforge.org
Fri Mar 20 08:58:02 PDT 2009
Revision: 3903
http://trac.macosforge.org/projects/calendarserver/changeset/3903
Author: cdaboo at apple.com
Date: 2009-03-20 08:58:01 -0700 (Fri, 20 Mar 2009)
Log Message:
-----------
Allow lazy parsing of calendar data so that vobject is only used when we need to actual filter data
in a calendar-data element. This dramatically speeds up simply multiget reports that return the entire
calendar object.
Modified Paths:
--------------
CalendarServer/trunk/twistedcaldav/caldavxml.py
CalendarServer/trunk/twistedcaldav/static.py
Modified: CalendarServer/trunk/twistedcaldav/caldavxml.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/caldavxml.py 2009-03-20 03:10:57 UTC (rev 3902)
+++ CalendarServer/trunk/twistedcaldav/caldavxml.py 2009-03-20 15:58:01 UTC (rev 3903)
@@ -396,18 +396,14 @@
@classmethod
def fromCalendar(clazz, calendar):
- assert calendar.name() == "VCALENDAR", "Not a calendar: %r" % (calendar,)
- return clazz(davxml.PCDATAElement(str(calendar)))
+ if isinstance(calendar, str):
+ return clazz(davxml.PCDATAElement(calendar))
+ elif isinstance(calendar, iComponent):
+ assert calendar.name() == "VCALENDAR", "Not a calendar: %r" % (calendar,)
+ return clazz(davxml.PCDATAElement(str(calendar)))
+ else:
+ raise ValueError("Not a calendar: %s" % (calendar,))
- @classmethod
- def fromCalendarData(clazz, caldata):
- """
- Return a CalendarData element comprised of the supplied calendar data.
- @param caldata: a string of valid calendar data.
- @return: a L{CalendarData} element.
- """
- return clazz(davxml.PCDATAElement(caldata))
-
def __init__(self, *children, **attributes):
super(CalendarData, self).__init__(*children, **attributes)
@@ -501,7 +497,7 @@
@param timezone: the L{Component} the VTIMEZONE to use for floating/all-day.
@return: an L{CalendarData} with the (filtered) calendar data.
"""
- return self.elementFromCalendar(resource.iCalendar(), timezone)
+ return self.elementFromCalendar(resource.iCalendarText(), timezone)
def elementFromCalendar(self, calendar, timezone=None):
"""
@@ -530,7 +526,7 @@
@param timezone: the L{Component} the VTIMEZONE to use for floating/all-day.
@return: an L{CalendarData} with the (filtered) calendar data.
"""
- return self.elementFromCalendarWithAccessRestrictions(resource.iCalendar(), access, timezone)
+ return self.elementFromCalendarWithAccessRestrictions(resource.iCalendarText(), access, timezone)
def elementFromCalendarWithAccessRestrictions(self, calendar, access, timezone=None):
"""
@@ -657,12 +653,22 @@
Returns a calendar object containing the data in the given calendar
which is specified by this CalendarData.
"""
- if calendar is None or calendar.name() != "VCALENDAR":
+ if calendar is None or isinstance(calendar, str) and not calendar:
raise ValueError("Not a calendar: %r" % (calendar,))
# Empty element: get all data
if not self.children: return calendar
+ # If we were passed a string, parse it out as a Component
+ if isinstance(calendar, str):
+ try:
+ calendar = iComponent.fromString(calendar)
+ except ValueError:
+ raise ValueError("Not a calendar: %r" % (calendar,))
+
+ if calendar is None or calendar.name() != "VCALENDAR":
+ raise ValueError("Not a calendar: %r" % (calendar,))
+
# Pre-process the calendar data based on expand and limit options
if self.freebusy_set:
calendar = self.limitFreeBusy(calendar)
Modified: CalendarServer/trunk/twistedcaldav/static.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/static.py 2009-03-20 03:10:57 UTC (rev 3902)
+++ CalendarServer/trunk/twistedcaldav/static.py 2009-03-20 15:58:01 UTC (rev 3903)
@@ -333,7 +333,7 @@
return calendar_data
def iCalendarXML(self, name=None):
- return caldavxml.CalendarData.fromCalendarData(self.iCalendarText(name))
+ return caldavxml.CalendarData.fromCalendar(self.iCalendarText(name))
def supportedPrivileges(self, request):
# read-free-busy support on calendar collection and calendar object resources
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20090320/185f7022/attachment.html>
More information about the calendarserver-changes
mailing list