[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