[CalendarServer-changes] [7231] CalDAVTester/branches/users/cdaboo/pycard
source_changes at macosforge.org
source_changes at macosforge.org
Mon Mar 21 20:27:14 PDT 2011
Revision: 7231
http://trac.macosforge.org/projects/calendarserver/changeset/7231
Author: cdaboo at apple.com
Date: 2011-03-21 20:27:13 -0700 (Mon, 21 Mar 2011)
Log Message:
-----------
Tweaks for pycalendar vcard support.
Modified Paths:
--------------
CalDAVTester/branches/users/cdaboo/pycard/Resource/CardDAV/verrors/2.vcf
CalDAVTester/branches/users/cdaboo/pycard/run.py
CalDAVTester/branches/users/cdaboo/pycard/verifiers/addressDataMatch.py
CalDAVTester/branches/users/cdaboo/pycard/verifiers/calendarDataMatch.py
Modified: CalDAVTester/branches/users/cdaboo/pycard/Resource/CardDAV/verrors/2.vcf
===================================================================
--- CalDAVTester/branches/users/cdaboo/pycard/Resource/CardDAV/verrors/2.vcf 2011-03-22 03:03:23 UTC (rev 7230)
+++ CalDAVTester/branches/users/cdaboo/pycard/Resource/CardDAV/verrors/2.vcf 2011-03-22 03:27:13 UTC (rev 7231)
@@ -1,4 +1,4 @@
-BEGIN:XCARD
+BEGIN:VCARD
VERSION:3.0
N:Contact;Mulberry;;;
FN:Mulberry Contact
@@ -13,5 +13,4 @@
NOTE:This is a contact created in Mulberry.
item2.URL;type=pref:http://www.example.com/~magic
item2.X-ABLabel:_$!<HomePage>!$_
-UID:782DAAF92CB1ED1BC155CDB3 at D76FAF7B10D9E8D2D41F779D
-END:XCARD
+END:VCARD
Modified: CalDAVTester/branches/users/cdaboo/pycard/run.py
===================================================================
--- CalDAVTester/branches/users/cdaboo/pycard/run.py 2011-03-22 03:03:23 UTC (rev 7230)
+++ CalDAVTester/branches/users/cdaboo/pycard/run.py 2011-03-22 03:27:13 UTC (rev 7231)
@@ -32,8 +32,7 @@
svn = "/usr/bin/svn"
packages = [
- ("vobject", "vobject", "http://svn.osafoundation.org/vobject/trunk", "218"),
- #("vobject", "vobject", "svn+ssh://cdaboo@svn.osafoundation.org/svn/vobject/trunk", "218"),
+ ("pycalendar", "pycalendar/src", "http://svn.mulberrymail.com/repos/PyCalendar/branches/server", "146"),
("xattr", "xattr/build/lib.%s-%s" % (get_platform(),get_python_version()), "http://svn.red-bean.com/bob/xattr/releases/xattr-0.5", "1013"),
]
Modified: CalDAVTester/branches/users/cdaboo/pycard/verifiers/addressDataMatch.py
===================================================================
--- CalDAVTester/branches/users/cdaboo/pycard/verifiers/addressDataMatch.py 2011-03-22 03:03:23 UTC (rev 7230)
+++ CalDAVTester/branches/users/cdaboo/pycard/verifiers/addressDataMatch.py 2011-03-22 03:27:13 UTC (rev 7231)
@@ -14,13 +14,11 @@
# limitations under the License.
##
-from vobject.base import readOne, ContentLine
-from vobject.base import Component
from difflib import unified_diff
-import StringIO
+from pycalendar.vcard.card import Card
"""
-Verifier that checks the response body for an exact match to data in a file.
+Verifier that checks the response body for a semantic match to data in a file.
"""
class Verifier(object):
@@ -28,15 +26,12 @@
def verify(self, manager, uri, response, respdata, args): #@UnusedVariable
# Get arguments
files = args.get("filepath", [])
+ carddata = args.get("data", [])
filters = args.get("filter", [])
- if "EMAIL parameter" not in manager.server_info.features:
- filters.append("ATTENDEE:EMAIL")
- filters.append("ORGANIZER:EMAIL")
- filters.append("CALSCALE")
+ # Always remove these
filters.append("PRODID")
- filters.append("CREATED")
- filters.append("LAST-MODIFIED")
+ filters.append("REV")
# status code must be 200, 207
if response.status not in (200,207):
@@ -47,18 +42,21 @@
return False, " No response body"
# look for one file
- if len(files) != 1:
+ if len(files) != 1 and len(carddata) != 1:
return False, " No file to compare response to"
- # read in all data from specified file
- fd = open( files[0], "r" )
- try:
+ # read in all data from specified file or use provided data
+ if len(files):
+ fd = open( files[0], "r" )
try:
- data = fd.read()
- finally:
- fd.close()
- except:
- data = None
+ try:
+ data = fd.read()
+ finally:
+ fd.close()
+ except:
+ data = None
+ else:
+ data = carddata[0] if len(carddata) else None
if data is None:
return False, " Could not read data file"
@@ -67,38 +65,28 @@
def removePropertiesParameters(component):
- for item in tuple(component.getChildren()):
- if isinstance(item, Component):
- removePropertiesParameters(item)
- elif isinstance(item, ContentLine):
-
- # Always remove DTSTAMP
- if item.name == "DTSTAMP":
- component.remove(item)
- elif item.name == "X-CALENDARSERVER-ATTENDEE-COMMENT":
- if item.params.has_key("X-CALENDARSERVER-DTSTAMP"):
- item.params["X-CALENDARSERVER-DTSTAMP"] = ["20080101T000000Z"]
-
- for filter in filters:
- if ":" in filter:
- property, parameter = filter.split(":")
- if item.name == property:
- if item.params.has_key(parameter):
- del item.params[parameter]
- else:
- if item.name == filter:
- component.remove(item)
+ allProps = []
+ for properties in component.getProperties().itervalues():
+ allProps.extend(properties)
+ for property in allProps:
+ for filter in filters:
+ if ":" in filter:
+ propname, parameter = filter.split(":")
+ if property.getName() == propname:
+ if property.hasAttribute(parameter):
+ property.removeAttributes(parameter)
+ else:
+ if property.getName() == filter:
+ component.removeProperty(property)
- s = StringIO.StringIO(respdata)
try:
- resp_calendar = readOne(s)
- removePropertiesParameters(resp_calendar)
- respdata = resp_calendar.serialize()
+ resp_adbk = Card.parseText(respdata)
+ removePropertiesParameters(resp_adbk)
+ respdata = resp_adbk.getText()
- s = StringIO.StringIO(data)
- data_calendar = readOne(s)
- removePropertiesParameters(data_calendar)
- data = data_calendar.serialize()
+ data_adbk = Card.parseText(data)
+ removePropertiesParameters(data_adbk)
+ data = data_adbk.getText()
result = respdata == data
@@ -108,4 +96,4 @@
error_diff = "\n".join([line for line in unified_diff(data.split("\n"), respdata.split("\n"))])
return False, " Response data does not exactly match file data%s" % (error_diff,)
except Exception, e:
- return False, " Response data is not calendar data data: %s" % (e,)
+ return False, " Response data is not address data: %s" % (e,)
Modified: CalDAVTester/branches/users/cdaboo/pycard/verifiers/calendarDataMatch.py
===================================================================
--- CalDAVTester/branches/users/cdaboo/pycard/verifiers/calendarDataMatch.py 2011-03-22 03:03:23 UTC (rev 7230)
+++ CalDAVTester/branches/users/cdaboo/pycard/verifiers/calendarDataMatch.py 2011-03-22 03:27:13 UTC (rev 7231)
@@ -19,7 +19,7 @@
from pycalendar.attribute import PyCalendarAttribute
"""
-Verifier that checks the response body for an exact match to data in a file.
+Verifier that checks the response body for a semantic match to data in a file.
"""
class Verifier(object):
@@ -35,6 +35,7 @@
filters.append("ORGANIZER:EMAIL")
filters.append("CALSCALE")
filters.append("PRODID")
+ filters.append("DTSTAMP")
filters.append("CREATED")
filters.append("LAST-MODIFIED")
@@ -77,12 +78,8 @@
for properties in component.getProperties().itervalues():
allProps.extend(properties)
for property in allProps:
- # Always remove DTSTAMP
- if property.getName() == "DTSTAMP":
- component.removeProperty(property)
- elif property.getName() == "PRODID":
- component.removeProperty(property)
- elif property.getName() == "X-CALENDARSERVER-ATTENDEE-COMMENT":
+ # Always reset DTSTAMP on this X- prop
+ if property.getName() == "X-CALENDARSERVER-ATTENDEE-COMMENT":
if property.hasAttribute("X-CALENDARSERVER-DTSTAMP"):
property.replaceAttribute(PyCalendarAttribute("X-CALENDARSERVER-DTSTAMP", "20080101T000000Z"))
@@ -113,5 +110,4 @@
error_diff = "\n".join([line for line in unified_diff(data.split("\n"), respdata.split("\n"))])
return False, " Response data does not exactly match file data%s" % (error_diff,)
except Exception, e:
- return False, " Response data is not calendar data data: %s" % (e,)
-
\ No newline at end of file
+ return False, " Response data is not calendar data: %s" % (e,)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110321/d8fd57d3/attachment-0001.html>
More information about the calendarserver-changes
mailing list