[CalendarServer-changes] [15132] CalendarServer/branches/users/cdaboo/rscale
source_changes at macosforge.org
source_changes at macosforge.org
Thu Sep 17 11:15:38 PDT 2015
Revision: 15132
http://trac.calendarserver.org//changeset/15132
Author: cdaboo at apple.com
Date: 2015-09-17 11:15:38 -0700 (Thu, 17 Sep 2015)
Log Message:
-----------
RSCALE support.
Modified Paths:
--------------
CalendarServer/branches/users/cdaboo/rscale/requirements-dev.txt
CalendarServer/branches/users/cdaboo/rscale/requirements-stable.txt
CalendarServer/branches/users/cdaboo/rscale/twistedcaldav/caldavxml.py
CalendarServer/branches/users/cdaboo/rscale/twistedcaldav/ical.py
CalendarServer/branches/users/cdaboo/rscale/twistedcaldav/resource.py
CalendarServer/branches/users/cdaboo/rscale/twistedcaldav/stdconfig.py
CalendarServer/branches/users/cdaboo/rscale/twistedcaldav/storebridge.py
Modified: CalendarServer/branches/users/cdaboo/rscale/requirements-dev.txt
===================================================================
--- CalendarServer/branches/users/cdaboo/rscale/requirements-dev.txt 2015-09-17 18:12:16 UTC (rev 15131)
+++ CalendarServer/branches/users/cdaboo/rscale/requirements-dev.txt 2015-09-17 18:15:38 UTC (rev 15132)
@@ -8,4 +8,4 @@
q
tl.eggdeps
--editable svn+http://svn.calendarserver.org/repository/calendarserver/CalDAVClientLibrary/trunk@14856#egg=CalDAVClientLibrary
---editable svn+http://svn.calendarserver.org/repository/calendarserver/CalDAVTester/trunk@15066#egg=CalDAVTester
+--editable svn+http://svn.calendarserver.org/repository/calendarserver/CalDAVTester/trunk@15130#egg=CalDAVTester
Modified: CalendarServer/branches/users/cdaboo/rscale/requirements-stable.txt
===================================================================
--- CalendarServer/branches/users/cdaboo/rscale/requirements-stable.txt 2015-09-17 18:12:16 UTC (rev 15131)
+++ CalendarServer/branches/users/cdaboo/rscale/requirements-stable.txt 2015-09-17 18:15:38 UTC (rev 15132)
@@ -36,7 +36,7 @@
#pyOpenSSL
pycrypto==2.6.1
- --editable svn+http://svn.calendarserver.org/repository/calendarserver/twext/trunk@15118#egg=twextpy
+ --editable svn+http://svn.calendarserver.org/repository/calendarserver/twext/trunk@15129#egg=twextpy
cffi==1.1.0
pycparser==2.13
#twisted
@@ -70,7 +70,7 @@
--editable svn+http://svn.calendarserver.org/repository/calendarserver/PyKerberos/trunk@13420#egg=kerberos
- --editable svn+http://svn.calendarserver.org/repository/calendarserver/PyCalendar/trunk@15020#egg=pycalendar
+ --editable svn+http://svn.calendarserver.org/repository/calendarserver/PyCalendar/branches/rscale@15020#egg=pycalendar
python-dateutil==1.5 # Note: v2.0+ is for Python 3
pytz==2015.4
Modified: CalendarServer/branches/users/cdaboo/rscale/twistedcaldav/caldavxml.py
===================================================================
--- CalendarServer/branches/users/cdaboo/rscale/twistedcaldav/caldavxml.py 2015-09-17 18:12:16 UTC (rev 15131)
+++ CalendarServer/branches/users/cdaboo/rscale/twistedcaldav/caldavxml.py 2015-09-17 18:15:38 UTC (rev 15132)
@@ -1467,6 +1467,33 @@
#
+# RFC7529 (RSCALE)
+#
+
+ at registerElement
+class SupportedRscaleSet (CalDAVElement):
+ """
+ List of supported RSCALE values.
+ """
+ name = "supported-rscale-set"
+
+ allowed_children = {(dav_namespace, "supported-rscale"): (0, None)}
+
+ hidden = True
+ protected = True
+
+
+
+ at registerElement
+class SupportedRscale (CalDAVTextElement):
+ """
+ A supported RSCALE value.
+ """
+ name = "supported-rscale"
+
+
+
+#
# Extensions to ResourceType
#
Modified: CalendarServer/branches/users/cdaboo/rscale/twistedcaldav/ical.py
===================================================================
--- CalendarServer/branches/users/cdaboo/rscale/twistedcaldav/ical.py 2015-09-17 18:12:16 UTC (rev 15131)
+++ CalendarServer/branches/users/cdaboo/rscale/twistedcaldav/ical.py 2015-09-17 18:15:38 UTC (rev 15132)
@@ -57,8 +57,10 @@
from pycalendar.componentbase import ComponentBase
from pycalendar.datetime import DateTime
from pycalendar.duration import Duration
-from pycalendar.exceptions import ErrorBase
+from pycalendar.exceptions import ErrorBase, InvalidProperty
from pycalendar.period import Period
+from pycalendar.icalendar.icudatetime import ICUDateTime
+from pycalendar.icalendar.exceptions import InvalidRscaleError
from pycalendar.icalendar.property import Property as PyProperty
from pycalendar.timezone import Timezone
from pycalendar.utcoffsetvalue import UTCOffsetValue
@@ -418,6 +420,11 @@
@classmethod
+ def allowedRscales(cls):
+ return tuple(map(str.upper, sorted(ICUDateTime.allRSCALEs())))
+
+
+ @classmethod
def allFromString(clazz, string, format=None):
"""
Just default to reading a single VCALENDAR
@@ -481,9 +488,14 @@
errmsg = "Unknown"
try:
result = Calendar.parseData(data, format)
- except ErrorBase, e:
+ except InvalidProperty as e:
+ if isinstance(e.mCause, InvalidRscaleError):
+ raise e.mCause
errmsg = "{0}: {1}".format(e.mReason, e.mData,)
result = None
+ except ErrorBase as e:
+ errmsg = "{0}: {1}".format(e.mReason, e.mData,)
+ result = None
if not result:
if isstream:
data.seek(0)
Modified: CalendarServer/branches/users/cdaboo/rscale/twistedcaldav/resource.py
===================================================================
--- CalendarServer/branches/users/cdaboo/rscale/twistedcaldav/resource.py 2015-09-17 18:12:16 UTC (rev 15131)
+++ CalendarServer/branches/users/cdaboo/rscale/twistedcaldav/resource.py 2015-09-17 18:15:38 UTC (rev 15132)
@@ -470,6 +470,10 @@
caldavxml.SupportedCalendarData.qname(),
customxml.GETCTag.qname(),
)
+ if config.EnableRSCALE:
+ baseProperties += (
+ caldavxml.SupportedRscaleSet.qname(),
+ )
if config.MaxResourceSize:
baseProperties += (
caldavxml.MaxResourceSize.qname(),
@@ -653,6 +657,13 @@
elif qname == caldavxml.ScheduleCalendarTransp.qname() and self.isCalendarCollection():
returnValue(caldavxml.ScheduleCalendarTransp(caldavxml.Opaque() if self._newStoreObject.isUsedForFreeBusy() else caldavxml.Transparent()))
+ elif qname == caldavxml.SupportedRscaleSet.qname() and self.isPseudoCalendarCollection():
+ if config.EnableRSCALE:
+ returnValue(caldavxml.SupportedRscaleSet(*[
+ caldavxml.SupportedRscale.fromString(name)
+ for name in Component.allowedRscales()
+ ]))
+
elif qname == carddavxml.SupportedAddressData.qname() and self.isAddressBookCollection():
# CardDAV, section 6.2.2
dataTypes = []
@@ -2479,6 +2490,11 @@
caldavxml.TimezoneServiceSet.qname(),
)
+ if config.EnableRSCALE:
+ existing += (
+ caldavxml.SupportedRscaleSet.qname(),
+ )
+
return existing
@@ -2537,6 +2553,13 @@
else:
returnValue(None)
+ elif qname == caldavxml.SupportedRscaleSet.qname():
+ if config.EnableRSCALE:
+ returnValue(caldavxml.SupportedRscaleSet(*[
+ caldavxml.SupportedRscale.fromString(name)
+ for name in Component.allowedRscales()
+ ]))
+
elif qname in DefaultAlarmPropertyMixin.ALARM_PROPERTIES:
returnValue(self.getDefaultAlarmProperty(qname))
Modified: CalendarServer/branches/users/cdaboo/rscale/twistedcaldav/stdconfig.py
===================================================================
--- CalendarServer/branches/users/cdaboo/rscale/twistedcaldav/stdconfig.py 2015-09-17 18:12:16 UTC (rev 15131)
+++ CalendarServer/branches/users/cdaboo/rscale/twistedcaldav/stdconfig.py 2015-09-17 18:15:38 UTC (rev 15132)
@@ -547,6 +547,8 @@
"EnableTimezonesByReference" : True, # Strip out VTIMEZONES that are known
"UsePackageTimezones" : False, # Use timezone data from twistedcaldav.zoneinfo - don't copy to Data directory
+ "EnableRSCALE" : False, # Turn on support for non-Gregorian recurrences (RSCALE)
+
"EnableBatchUpload" : True, # POST batch uploads
"MaxResourcesBatchUpload" : 100, # Maximum number of resources in a batch POST
"MaxBytesBatchUpload" : 10485760, # Maximum size of a batch POST (10 MB)
Modified: CalendarServer/branches/users/cdaboo/rscale/twistedcaldav/storebridge.py
===================================================================
--- CalendarServer/branches/users/cdaboo/rscale/twistedcaldav/storebridge.py 2015-09-17 18:12:16 UTC (rev 15131)
+++ CalendarServer/branches/users/cdaboo/rscale/twistedcaldav/storebridge.py 2015-09-17 18:15:38 UTC (rev 15132)
@@ -98,6 +98,7 @@
)
from txweb2.stream import ProducerStream, readStream, MemoryStream
from twistedcaldav.timezones import TimezoneException
+from pycalendar.icalendar.exceptions import InvalidRscaleError
"""
@@ -2848,12 +2849,21 @@
try:
component = Component.fromString(calendardata, format)
- except ValueError, e:
- log.error(str(e))
+ except InvalidRscaleError as e:
+ msg = "Invalid RSCALE value: {ex}\n{ical}".format(ex=e.mReason, ical=calendardata)
+ log.error(msg)
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
+ (caldav_namespace, "supported-rscale"),
+ "Can't parse calendar data: {msg}".format(msg=msg),
+ ))
+ except ValueError as e:
+ msg = str(e)
+ log.error(msg)
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
(caldav_namespace, "valid-calendar-data"),
- "Can't parse calendar data: %s" % (str(e),)
+ "Can't parse calendar data: {msg}".format(msg=msg),
))
# Look for client fixes
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20150917/0b2fddb2/attachment-0001.html>
More information about the calendarserver-changes
mailing list