[CalendarServer-changes] [13331] CalendarServer/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Fri Apr 18 13:38:33 PDT 2014
Revision: 13331
http://trac.calendarserver.org//changeset/13331
Author: sagen at apple.com
Date: 2014-04-18 13:38:33 -0700 (Fri, 18 Apr 2014)
Log Message:
-----------
Landing the newcua branch on trunk: urn:x-uid: is the new canonical calendar user address. /principals/... CUAs are recognized but not advertised.
Modified Paths:
--------------
CalendarServer/trunk/calendarserver/tap/caldav.py
CalendarServer/trunk/calendarserver/tools/calverify.py
CalendarServer/trunk/calendarserver/tools/purge.py
CalendarServer/trunk/calendarserver/tools/shell/cmd.py
CalendarServer/trunk/calendarserver/tools/test/test_calverify.py
CalendarServer/trunk/calendarserver/tools/test/test_purge.py
CalendarServer/trunk/calendarserver/tools/test/test_purge_old_events.py
CalendarServer/trunk/contrib/performance/_event_create.py
CalendarServer/trunk/contrib/performance/benchmarks/bounded_recurrence_autoaccept.py
CalendarServer/trunk/contrib/performance/benchmarks/event_autoaccept.py
CalendarServer/trunk/contrib/performance/benchmarks/unbounded_recurrence_autoaccept.py
CalendarServer/trunk/contrib/performance/benchmarks/vfreebusy.py
CalendarServer/trunk/contrib/performance/benchmarks/vfreebusy_vary_attendees.py
CalendarServer/trunk/contrib/performance/loadtest/profiles.py
CalendarServer/trunk/contrib/performance/sqlusage/sqlusage.py
CalendarServer/trunk/contrib/performance/test_event_change_date.py
CalendarServer/trunk/twistedcaldav/directory/principal.py
CalendarServer/trunk/twistedcaldav/directory/test/test_principal.py
CalendarServer/trunk/twistedcaldav/directory/test/util.py
CalendarServer/trunk/twistedcaldav/ical.py
CalendarServer/trunk/twistedcaldav/sharing.py
CalendarServer/trunk/twistedcaldav/storebridge.py
CalendarServer/trunk/twistedcaldav/test/test_icalendar.py
CalendarServer/trunk/twistedcaldav/test/test_sharing.py
CalendarServer/trunk/twistedcaldav/test/test_upgrade.py
CalendarServer/trunk/twistedcaldav/upgrade.py
CalendarServer/trunk/txdav/caldav/datastore/scheduling/imip/inbound.py
CalendarServer/trunk/txdav/caldav/datastore/scheduling/implicit.py
CalendarServer/trunk/txdav/caldav/datastore/scheduling/ischedule/delivery.py
CalendarServer/trunk/txdav/caldav/datastore/scheduling/test/test_implicit.py
CalendarServer/trunk/txdav/caldav/datastore/sql.py
CalendarServer/trunk/txdav/caldav/datastore/test/test_implicit.py
CalendarServer/trunk/txdav/caldav/datastore/test/test_queue_scheduling.py
CalendarServer/trunk/txdav/caldav/datastore/test/test_sql.py
CalendarServer/trunk/txdav/caldav/datastore/test/util.py
CalendarServer/trunk/txdav/caldav/datastore/util.py
CalendarServer/trunk/txdav/common/datastore/sql_schema/current-oracle-dialect.sql
CalendarServer/trunk/txdav/common/datastore/sql_schema/current.sql
CalendarServer/trunk/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_37_to_38.sql
CalendarServer/trunk/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_37_to_38.sql
CalendarServer/trunk/txdav/who/directory.py
CalendarServer/trunk/txdav/who/test/test_directory.py
CalendarServer/trunk/txdav/who/test/test_group_attendees.py
Property Changed:
----------------
CalendarServer/trunk/
Property changes on: CalendarServer/trunk
___________________________________________________________________
Modified: svn:mergeinfo
- /CalDAVTester/trunk:11193-11198
/CalendarServer/branches/config-separation:4379-4443
/CalendarServer/branches/egg-info-351:4589-4625
/CalendarServer/branches/generic-sqlstore:6167-6191
/CalendarServer/branches/new-store:5594-5934
/CalendarServer/branches/new-store-no-caldavfile:5911-5935
/CalendarServer/branches/new-store-no-caldavfile-2:5936-5981
/CalendarServer/branches/release/CalendarServer-4.3-dev:10180-10190,10192
/CalendarServer/branches/release/CalendarServer-5.1-dev:11846
/CalendarServer/branches/release/CalendarServer-5.2-dev:11972,12357-12358,12794,12814
/CalendarServer/branches/users/cdaboo/batchupload-6699:6700-7198
/CalendarServer/branches/users/cdaboo/cached-subscription-calendars-5692:5693-5702
/CalendarServer/branches/users/cdaboo/component-set-fixes:8130-8346
/CalendarServer/branches/users/cdaboo/cross-pod-sharing:12038-12191
/CalendarServer/branches/users/cdaboo/directory-cache-on-demand-3627:3628-3644
/CalendarServer/branches/users/cdaboo/fix-no-ischedule:11607-11871
/CalendarServer/branches/users/cdaboo/implicituidrace:8137-8141
/CalendarServer/branches/users/cdaboo/ischedule-dkim:9747-9979
/CalendarServer/branches/users/cdaboo/json:11622-11912
/CalendarServer/branches/users/cdaboo/managed-attachments:9985-10145
/CalendarServer/branches/users/cdaboo/more-sharing-5591:5592-5601
/CalendarServer/branches/users/cdaboo/partition-4464:4465-4957
/CalendarServer/branches/users/cdaboo/performance-tweaks:11824-11836
/CalendarServer/branches/users/cdaboo/pods:7297-7377
/CalendarServer/branches/users/cdaboo/pycalendar:7085-7206
/CalendarServer/branches/users/cdaboo/pycard:7227-7237
/CalendarServer/branches/users/cdaboo/queued-attendee-refreshes:7740-8287
/CalendarServer/branches/users/cdaboo/relative-config-paths-5070:5071-5105
/CalendarServer/branches/users/cdaboo/reverse-proxy-pods:11875-11900
/CalendarServer/branches/users/cdaboo/scheduling-queue-refresh:11783-12557
/CalendarServer/branches/users/cdaboo/shared-calendars-5187:5188-5440
/CalendarServer/branches/users/cdaboo/sharing-in-the-store:11935-12016
/CalendarServer/branches/users/cdaboo/store-scheduling:10876-11129
/CalendarServer/branches/users/cdaboo/timezones:7443-7699
/CalendarServer/branches/users/cdaboo/txn-debugging:8730-8743
/CalendarServer/branches/users/gaya/cleanrevisions:12152-12334
/CalendarServer/branches/users/gaya/sharedgroupfixes:12120-12142
/CalendarServer/branches/users/gaya/sharedgroups-3:11088-11204
/CalendarServer/branches/users/glyph/always-abort-txn-on-error:9958-9969
/CalendarServer/branches/users/glyph/case-insensitive-uid:8772-8805
/CalendarServer/branches/users/glyph/conn-limit:6574-6577
/CalendarServer/branches/users/glyph/contacts-server-merge:4971-5080
/CalendarServer/branches/users/glyph/dalify:6932-7023
/CalendarServer/branches/users/glyph/db-reconnect:6824-6876
/CalendarServer/branches/users/glyph/deploybuild:7563-7572
/CalendarServer/branches/users/glyph/digest-auth-redux:10624-10635
/CalendarServer/branches/users/glyph/disable-quota:7718-7727
/CalendarServer/branches/users/glyph/dont-start-postgres:6592-6614
/CalendarServer/branches/users/glyph/enforce-max-requests:11640-11643
/CalendarServer/branches/users/glyph/hang-fix:11465-11491
/CalendarServer/branches/users/glyph/imip-and-admin-html:7866-7984
/CalendarServer/branches/users/glyph/ipv6-client:9054-9105
/CalendarServer/branches/users/glyph/launchd-wrapper-bis:11413-11436
/CalendarServer/branches/users/glyph/linux-tests:6893-6900
/CalendarServer/branches/users/glyph/log-cleanups:11691-11731
/CalendarServer/branches/users/glyph/migrate-merge:8690-8713
/CalendarServer/branches/users/glyph/misc-portability-fixes:7365-7374
/CalendarServer/branches/users/glyph/more-deferreds-6:6322-6368
/CalendarServer/branches/users/glyph/more-deferreds-7:6369-6445
/CalendarServer/branches/users/glyph/multiget-delete:8321-8330
/CalendarServer/branches/users/glyph/new-export:7444-7485
/CalendarServer/branches/users/glyph/one-home-list-api:10048-10073
/CalendarServer/branches/users/glyph/oracle:7106-7155
/CalendarServer/branches/users/glyph/oracle-nulls:7340-7351
/CalendarServer/branches/users/glyph/other-html:8062-8091
/CalendarServer/branches/users/glyph/parallel-sim:8240-8251
/CalendarServer/branches/users/glyph/parallel-upgrade:8376-8400
/CalendarServer/branches/users/glyph/parallel-upgrade_to_1:8571-8583
/CalendarServer/branches/users/glyph/q:9560-9688
/CalendarServer/branches/users/glyph/queue-locking-and-timing:10204-10289
/CalendarServer/branches/users/glyph/quota:7604-7637
/CalendarServer/branches/users/glyph/sendfdport:5388-5424
/CalendarServer/branches/users/glyph/shared-pool-fixes:8436-8443
/CalendarServer/branches/users/glyph/shared-pool-take2:8155-8174
/CalendarServer/branches/users/glyph/sharedpool:6490-6550
/CalendarServer/branches/users/glyph/sharing-api:9192-9205
/CalendarServer/branches/users/glyph/skip-lonely-vtimezones:8524-8535
/CalendarServer/branches/users/glyph/sql-store:5929-6073
/CalendarServer/branches/users/glyph/start-service-start-loop:11060-11065
/CalendarServer/branches/users/glyph/subtransactions:7248-7258
/CalendarServer/branches/users/glyph/table-alias:8651-8664
/CalendarServer/branches/users/glyph/uidexport:7673-7676
/CalendarServer/branches/users/glyph/unshare-when-access-revoked:10562-10595
/CalendarServer/branches/users/glyph/use-system-twisted:5084-5149
/CalendarServer/branches/users/glyph/uuid-normalize:9268-9296
/CalendarServer/branches/users/glyph/warning-cleanups:11347-11357
/CalendarServer/branches/users/glyph/whenNotProposed:11881-11897
/CalendarServer/branches/users/glyph/xattrs-from-files:7757-7769
/CalendarServer/branches/users/sagen/applepush:8126-8184
/CalendarServer/branches/users/sagen/inboxitems:7380-7381
/CalendarServer/branches/users/sagen/locations-resources:5032-5051
/CalendarServer/branches/users/sagen/locations-resources-2:5052-5061
/CalendarServer/branches/users/sagen/move2who:12819-12860
/CalendarServer/branches/users/sagen/move2who-2:12861-12898
/CalendarServer/branches/users/sagen/move2who-3:12899-12913
/CalendarServer/branches/users/sagen/move2who-4:12914-13157
/CalendarServer/branches/users/sagen/move2who-5:13158-13163
/CalendarServer/branches/users/sagen/purge_old_events:6735-6746
/CalendarServer/branches/users/sagen/resource-delegates-4038:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066:4068-4075
/CalendarServer/branches/users/sagen/resources-2:5084-5093
/CalendarServer/branches/users/sagen/testing:10827-10851,10853-10855
/CalendarServer/branches/users/wsanchez/transations:5515-5593
+ /CalDAVTester/trunk:11193-11198
/CalendarServer/branches/config-separation:4379-4443
/CalendarServer/branches/egg-info-351:4589-4625
/CalendarServer/branches/generic-sqlstore:6167-6191
/CalendarServer/branches/new-store:5594-5934
/CalendarServer/branches/new-store-no-caldavfile:5911-5935
/CalendarServer/branches/new-store-no-caldavfile-2:5936-5981
/CalendarServer/branches/release/CalendarServer-4.3-dev:10180-10190,10192
/CalendarServer/branches/release/CalendarServer-5.1-dev:11846
/CalendarServer/branches/release/CalendarServer-5.2-dev:11972,12357-12358,12794,12814
/CalendarServer/branches/users/cdaboo/batchupload-6699:6700-7198
/CalendarServer/branches/users/cdaboo/cached-subscription-calendars-5692:5693-5702
/CalendarServer/branches/users/cdaboo/component-set-fixes:8130-8346
/CalendarServer/branches/users/cdaboo/cross-pod-sharing:12038-12191
/CalendarServer/branches/users/cdaboo/directory-cache-on-demand-3627:3628-3644
/CalendarServer/branches/users/cdaboo/fix-no-ischedule:11607-11871
/CalendarServer/branches/users/cdaboo/implicituidrace:8137-8141
/CalendarServer/branches/users/cdaboo/ischedule-dkim:9747-9979
/CalendarServer/branches/users/cdaboo/json:11622-11912
/CalendarServer/branches/users/cdaboo/managed-attachments:9985-10145
/CalendarServer/branches/users/cdaboo/more-sharing-5591:5592-5601
/CalendarServer/branches/users/cdaboo/partition-4464:4465-4957
/CalendarServer/branches/users/cdaboo/performance-tweaks:11824-11836
/CalendarServer/branches/users/cdaboo/pods:7297-7377
/CalendarServer/branches/users/cdaboo/pycalendar:7085-7206
/CalendarServer/branches/users/cdaboo/pycard:7227-7237
/CalendarServer/branches/users/cdaboo/queued-attendee-refreshes:7740-8287
/CalendarServer/branches/users/cdaboo/relative-config-paths-5070:5071-5105
/CalendarServer/branches/users/cdaboo/reverse-proxy-pods:11875-11900
/CalendarServer/branches/users/cdaboo/scheduling-queue-refresh:11783-12557
/CalendarServer/branches/users/cdaboo/shared-calendars-5187:5188-5440
/CalendarServer/branches/users/cdaboo/sharing-in-the-store:11935-12016
/CalendarServer/branches/users/cdaboo/store-scheduling:10876-11129
/CalendarServer/branches/users/cdaboo/timezones:7443-7699
/CalendarServer/branches/users/cdaboo/txn-debugging:8730-8743
/CalendarServer/branches/users/gaya/cleanrevisions:12152-12334
/CalendarServer/branches/users/gaya/sharedgroupfixes:12120-12142
/CalendarServer/branches/users/gaya/sharedgroups-3:11088-11204
/CalendarServer/branches/users/glyph/always-abort-txn-on-error:9958-9969
/CalendarServer/branches/users/glyph/case-insensitive-uid:8772-8805
/CalendarServer/branches/users/glyph/conn-limit:6574-6577
/CalendarServer/branches/users/glyph/contacts-server-merge:4971-5080
/CalendarServer/branches/users/glyph/dalify:6932-7023
/CalendarServer/branches/users/glyph/db-reconnect:6824-6876
/CalendarServer/branches/users/glyph/deploybuild:7563-7572
/CalendarServer/branches/users/glyph/digest-auth-redux:10624-10635
/CalendarServer/branches/users/glyph/disable-quota:7718-7727
/CalendarServer/branches/users/glyph/dont-start-postgres:6592-6614
/CalendarServer/branches/users/glyph/enforce-max-requests:11640-11643
/CalendarServer/branches/users/glyph/hang-fix:11465-11491
/CalendarServer/branches/users/glyph/imip-and-admin-html:7866-7984
/CalendarServer/branches/users/glyph/ipv6-client:9054-9105
/CalendarServer/branches/users/glyph/launchd-wrapper-bis:11413-11436
/CalendarServer/branches/users/glyph/linux-tests:6893-6900
/CalendarServer/branches/users/glyph/log-cleanups:11691-11731
/CalendarServer/branches/users/glyph/migrate-merge:8690-8713
/CalendarServer/branches/users/glyph/misc-portability-fixes:7365-7374
/CalendarServer/branches/users/glyph/more-deferreds-6:6322-6368
/CalendarServer/branches/users/glyph/more-deferreds-7:6369-6445
/CalendarServer/branches/users/glyph/multiget-delete:8321-8330
/CalendarServer/branches/users/glyph/new-export:7444-7485
/CalendarServer/branches/users/glyph/one-home-list-api:10048-10073
/CalendarServer/branches/users/glyph/oracle:7106-7155
/CalendarServer/branches/users/glyph/oracle-nulls:7340-7351
/CalendarServer/branches/users/glyph/other-html:8062-8091
/CalendarServer/branches/users/glyph/parallel-sim:8240-8251
/CalendarServer/branches/users/glyph/parallel-upgrade:8376-8400
/CalendarServer/branches/users/glyph/parallel-upgrade_to_1:8571-8583
/CalendarServer/branches/users/glyph/q:9560-9688
/CalendarServer/branches/users/glyph/queue-locking-and-timing:10204-10289
/CalendarServer/branches/users/glyph/quota:7604-7637
/CalendarServer/branches/users/glyph/sendfdport:5388-5424
/CalendarServer/branches/users/glyph/shared-pool-fixes:8436-8443
/CalendarServer/branches/users/glyph/shared-pool-take2:8155-8174
/CalendarServer/branches/users/glyph/sharedpool:6490-6550
/CalendarServer/branches/users/glyph/sharing-api:9192-9205
/CalendarServer/branches/users/glyph/skip-lonely-vtimezones:8524-8535
/CalendarServer/branches/users/glyph/sql-store:5929-6073
/CalendarServer/branches/users/glyph/start-service-start-loop:11060-11065
/CalendarServer/branches/users/glyph/subtransactions:7248-7258
/CalendarServer/branches/users/glyph/table-alias:8651-8664
/CalendarServer/branches/users/glyph/uidexport:7673-7676
/CalendarServer/branches/users/glyph/unshare-when-access-revoked:10562-10595
/CalendarServer/branches/users/glyph/use-system-twisted:5084-5149
/CalendarServer/branches/users/glyph/uuid-normalize:9268-9296
/CalendarServer/branches/users/glyph/warning-cleanups:11347-11357
/CalendarServer/branches/users/glyph/whenNotProposed:11881-11897
/CalendarServer/branches/users/glyph/xattrs-from-files:7757-7769
/CalendarServer/branches/users/sagen/applepush:8126-8184
/CalendarServer/branches/users/sagen/inboxitems:7380-7381
/CalendarServer/branches/users/sagen/locations-resources:5032-5051
/CalendarServer/branches/users/sagen/locations-resources-2:5052-5061
/CalendarServer/branches/users/sagen/move2who:12819-12860
/CalendarServer/branches/users/sagen/move2who-2:12861-12898
/CalendarServer/branches/users/sagen/move2who-3:12899-12913
/CalendarServer/branches/users/sagen/move2who-4:12914-13157
/CalendarServer/branches/users/sagen/move2who-5:13158-13163
/CalendarServer/branches/users/sagen/newcua:13309-13327
/CalendarServer/branches/users/sagen/newcua-1:13328-13330
/CalendarServer/branches/users/sagen/purge_old_events:6735-6746
/CalendarServer/branches/users/sagen/resource-delegates-4038:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066:4068-4075
/CalendarServer/branches/users/sagen/resources-2:5084-5093
/CalendarServer/branches/users/sagen/testing:10827-10851,10853-10855
/CalendarServer/branches/users/wsanchez/transations:5515-5593
Modified: CalendarServer/trunk/calendarserver/tap/caldav.py
===================================================================
--- CalendarServer/trunk/calendarserver/tap/caldav.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/calendarserver/tap/caldav.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -604,8 +604,15 @@
int(config.LogID) if config.LogID else 5
)
+ # FIXME: uncomment this when purge is working
+ # from calendarserver.tools.purge import scheduleNextPrincipalPurgeUpdate
+ # yield scheduleNextPrincipalPurgeUpdate(
+ # self.store,
+ # int(config.LogID) if config.LogID else 5
+ # )
+
class PreProcessingService(Service):
"""
A Service responsible for running any work that needs to be finished prior
Modified: CalendarServer/trunk/calendarserver/tools/calverify.py
===================================================================
--- CalendarServer/trunk/calendarserver/tools/calverify.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/calendarserver/tools/calverify.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -40,7 +40,6 @@
"""
-import base64
import collections
import sys
import time
@@ -256,7 +255,6 @@
Options for --ical:
--badcua : only look for bad calendar user addresses.
---nobase64 : do not apply base64 encoding to CALENDARSERVER-OLD-CUA.
--uuid : only scan specified calendar homes. Can be a partial GUID
to scan all GUIDs with that as a prefix.
--uid : scan only calendar data with the specific iCalendar UID.
@@ -299,7 +297,7 @@
CHANGES
v8: Detects ORGANIZER or ATTENDEE properties with mailto: calendar user
addresses for users that have valid directory records. Fix is to
- replace the value with a urn:uuid: form.
+ replace the value with a urn:x-uid: form.
v9: Detects double-bookings.
@@ -324,9 +322,7 @@
optFlags = [
['ical', 'i', "Calendar data check."],
- ['badcua', 'b', "Calendar data check for bad CALENDARSERVER-OLD-CUA only."],
['debug', 'D', "Debug logging."],
- ['nobase64', 'n', "Do not apply CALENDARSERVER-OLD-CUA base64 transform when fixing."],
['mismatch', 's', "Detect organizer/attendee mismatches."],
['missing', 'm', "Show 'orphaned' homes."],
['double', 'd', "Detect double-bookings."],
@@ -696,21 +692,6 @@
try:
caldata = Calendar.parseText(rows[0][0]) if rows else None
except ErrorBase:
- caltxt = rows[0][0] if rows else None
- if caltxt:
- caltxt = caltxt.replace("\r\n ", "")
- if caltxt.find("CALENDARSERVER-OLD-CUA=\"//") != -1:
- if doFix:
- caltxt = (yield self.fixBadOldCua(resid, caltxt))
- try:
- caldata = Calendar.parseText(caltxt) if rows else None
- except ErrorBase:
- self.parseError = "No fix bad CALENDARSERVER-OLD-CUA"
- returnValue(None)
- else:
- self.parseError = "Bad CALENDARSERVER-OLD-CUA"
- returnValue(None)
-
self.parseError = "Failed to parse"
returnValue(None)
@@ -743,68 +724,7 @@
returnValue((caldata, rows[0][1], rows[0][2], rows[0][3],) if rows else (None, None, None, None,))
- @inlineCallbacks
- def fixBadOldCua(self, resid, caltxt):
- """
- Fix bad CALENDARSERVER-OLD-CUA lines and write fixed data to store. Assumes iCalendar data lines unfolded.
- """
- # Get store objects
- homeID, calendarID = yield self.getAllResourceInfoForResourceID(resid)
- home = yield self.txn.calendarHomeWithResourceID(homeID)
- calendar = yield home.childWithID(calendarID)
- calendarObj = yield calendar.objectResourceWithID(resid)
-
- # Do raw data fix one line at a time
- caltxt = self.fixBadOldCuaLines(caltxt)
-
- # Re-parse
- try:
- component = Component.fromString(caltxt)
- except InvalidICalendarDataError:
- returnValue(None)
-
- # Write out fix, commit and get a new transaction
- # Use _migrating to ignore possible overridden instance errors - we are either correcting or ignoring those
- self.txn._migrating = True
- component = yield calendarObj._setComponentInternal(component, internal_state=ComponentUpdateState.RAW)
- yield self.txn.commit()
- self.txn = self.store.newTransaction()
-
- returnValue(caltxt)
-
-
- def fixBadOldCuaLines(self, caltxt):
- """
- Fix bad CALENDARSERVER-OLD-CUA lines. Assumes iCalendar data lines unfolded.
- """
-
- # Do raw data fix one line at a time
- lines = caltxt.splitlines()
- for ctr, line in enumerate(lines):
- startpos = line.find(";CALENDARSERVER-OLD-CUA=\"//")
- if startpos != -1:
- endpos = line.find("urn:uuid:")
- if endpos != -1:
- endpos += len("urn:uuid:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\"")
- badparam = line[startpos + len(";CALENDARSERVER-OLD-CUA=\""):endpos]
- endbadparam = badparam.find(";")
- if endbadparam != -1:
- badparam = badparam[:endbadparam].replace("\\", "")
- if badparam.find("8443") != -1:
- badparam = "https:" + badparam
- else:
- badparam = "http:" + badparam
- if self.options["nobase64"]:
- badparam = "\"" + badparam + "\""
- else:
- badparam = "base64-%s" % (base64.b64encode(badparam),)
- badparam = ";CALENDARSERVER-OLD-CUA=" + badparam
- lines[ctr] = line[:startpos] + badparam + line[endpos:]
- caltxt = "\r\n".join(lines) + "\r\n"
- return caltxt
-
-
@inlineCallbacks
def removeEvent(self, resid):
"""
@@ -1274,15 +1194,6 @@
else:
raise InvalidICalendarDataError("iCalendar ORGANIZER missing mailto:")
- # CALENDARSERVER-OLD-CUA needs to be base64 encoded
- if organizer.hasParameter("CALENDARSERVER-OLD-CUA"):
- oldcua = organizer.parameterValue("CALENDARSERVER-OLD-CUA")
- if not oldcua.startswith("base64-") and not self.options["nobase64"]:
- if doFix:
- organizer.setParameter("CALENDARSERVER-OLD-CUA", "base64-%s" % (base64.b64encode(oldcua)))
- else:
- raise InvalidICalendarDataError("iCalendar ORGANIZER CALENDARSERVER-OLD-CUA not base64")
-
for attendee in subcomponent.properties("ATTENDEE"):
cuaddr = attendee.value()
@@ -1307,16 +1218,7 @@
else:
raise InvalidICalendarDataError("iCalendar ATTENDEE missing mailto:")
- # CALENDARSERVER-OLD-CUA needs to be base64 encoded
- if attendee.hasParameter("CALENDARSERVER-OLD-CUA"):
- oldcua = attendee.parameterValue("CALENDARSERVER-OLD-CUA")
- if not oldcua.startswith("base64-") and not self.options["nobase64"]:
- if doFix:
- attendee.setParameter("CALENDARSERVER-OLD-CUA", "base64-%s" % (base64.b64encode(oldcua)))
- else:
- raise InvalidICalendarDataError("iCalendar ATTENDEE CALENDARSERVER-OLD-CUA not base64")
-
def attendeesWithoutOrganizer(self, component, doFix):
"""
Look for events with ATTENDEE properties and no ORGANIZER property.
@@ -1521,11 +1423,11 @@
# If targeting a specific organizer, skip events belonging to others
if self.options["uuid"]:
- if not organizer.startswith("urn:uuid:") or self.options["uuid"] != organizer[9:]:
+ if not organizer.startswith("urn:x-uid:") or self.options["uuid"] != organizer[10:]:
continue
# Cache organizer/attendee states
- if organizer.startswith("urn:uuid:") and owner == organizer[9:]:
+ if organizer.startswith("urn:x-uid:") and owner == organizer[10:]:
if not onlyAttendee:
self.organized.append((owner, resid, uid, md5, organizer, created, modified,))
self.organized_byuid[uid] = (owner, resid, uid, md5, organizer, created, modified,)
@@ -1789,9 +1691,9 @@
continue
# Only care about data for hosted organizers
- if not organizer.startswith("urn:uuid:"):
+ if not organizer.startswith("urn:x-uid:"):
continue
- organizer = organizer[9:]
+ organizer = organizer[10:]
# Skip organizers not enabled for calendaring
if not (yield self.testForCalendaringUUID(organizer)):
@@ -1913,7 +1815,7 @@
"""
try:
- cuaddr = "urn:uuid:%s" % attendee
+ cuaddr = "urn:x-uid:%s" % attendee
# Get the organizer's calendar data
calendar = (yield self.getCalendar(orgresid))
@@ -2073,8 +1975,8 @@
props = item.getOwner().getProperties().get(definitions.cICalProperty_ATTENDEE, [])
for prop in props:
caladdr = prop.getCalAddressValue().getValue()
- if caladdr.startswith("urn:uuid:"):
- caladdr = caladdr[9:]
+ if caladdr.startswith("urn:x-uid:"):
+ caladdr = caladdr[10:]
else:
continue
if attendee_only is not None and attendee_only != caladdr:
@@ -2610,8 +2512,8 @@
else:
principal = yield self.directoryService().recordWithCalendarUserAddress(organizer)
# FIXME: Why the mix of records and principals here?
- if principal is None and organizer.startswith("urn:uuid:"):
- principal = yield self.directoryService().principalCollection.principalForUID(organizer[9:])
+ if principal is None and organizer.startswith("urn:x-uid:"):
+ principal = yield self.directoryService().principalCollection.principalForUID(organizer[10:])
if principal is None:
if self.options["invalid-organizer"]:
fail = True
Modified: CalendarServer/trunk/calendarserver/tools/purge.py
===================================================================
--- CalendarServer/trunk/calendarserver/tools/purge.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/calendarserver/tools/purge.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -17,33 +17,193 @@
##
from __future__ import print_function
+import collections
+from getopt import getopt, GetoptError
+import os
+import sys
+
from calendarserver.tools import tables
from calendarserver.tools.cmdline import utilityMain, WorkerService
-
-from getopt import getopt, GetoptError
-
from pycalendar.datetime import DateTime
-
from twext.python.log import Logger
-
from twisted.internet.defer import inlineCallbacks, returnValue
-
from twistedcaldav import caldavxml
-
from txdav.caldav.datastore.query.filter import Filter
+from twext.enterprise.dal.record import fromTable
+from twext.enterprise.dal.syntax import Delete, Select
+from twext.enterprise.jobqueue import WorkItem
+from txdav.common.datastore.sql_tables import schema
+import datetime
+log = Logger()
-import collections
-import os
-import sys
-log = Logger()
-
DEFAULT_BATCH_SIZE = 100
DEFAULT_RETAIN_DAYS = 365
+class PrincipalPurgePollingWork(
+ WorkItem,
+ fromTable(schema.PRINCIPAL_PURGE_POLLING_WORK)
+):
+
+ group = "principal_purge_polling"
+
+ @inlineCallbacks
+ def doWork(self):
+
+ # Delete all other work items
+ yield Delete(From=self.table, Where=None).on(self.transaction)
+
+ # Schedule next update, 7 days out
+ notBefore = (
+ datetime.datetime.utcnow() +
+ datetime.timedelta(days=7)
+ )
+ log.info(
+ "Scheduling next principal purge scan update: {when}", when=notBefore
+ )
+ yield self.transaction.enqueue(
+ PrincipalPurgePollingWork,
+ notBefore=notBefore
+ )
+
+ # Do the scan
+ allUIDs = set()
+ for home in (schema.CALENDAR_HOME, schema.ADDRESSBOOK_HOME):
+ for [uid] in (
+ yield Select(
+ [home.OWNER_UID],
+ From=home
+ ).on(self.transaction)
+ ):
+ allUIDs.add(uid)
+
+ # Spread out the per-uid checks 1 second apart
+ seconds = 0
+ for uid in allUIDs:
+ notBefore = (
+ datetime.datetime.utcnow() +
+ datetime.timedelta(seconds=seconds)
+ )
+ seconds += 1
+ yield self.transaction.enqueue(
+ PrincipalPurgeCheckWork,
+ uid=uid,
+ notBefore=notBefore
+ )
+
+
+
+
+class PrincipalPurgeCheckWork(
+ WorkItem,
+ fromTable(schema.PRINCIPAL_PURGE_CHECK_WORK)
+):
+ """
+ Work item for checking for the existence of a UID in the directory
+ """
+
+ group = property(lambda self: self.uid)
+
+ @inlineCallbacks
+ def doWork(self):
+
+ # Delete any other work items for this UID
+ yield Delete(
+ From=self.table,
+ Where=self.table.UID == self.uid
+ ).on(self.transaction)
+
+ log.debug("Checking for existence of {uid} in directory", uid=self.uid)
+ directory = self.transaction.store().directoryService()
+ record = yield directory.recordWithUID(self.uid)
+
+ if record is None:
+ # Schedule purge of this UID a week from now
+ notBefore = (
+ datetime.datetime.utcnow() +
+ datetime.timedelta(minutes=1)
+ )
+ log.warn(
+ "Principal {uid} is no longer in the directory; scheduling clean-up at {when}",
+ uid=self.uid, when=notBefore
+ )
+ yield self.transaction.enqueue(
+ PrincipalPurgeWork,
+ uid=self.uid,
+ notBefore=notBefore
+ )
+ else:
+ log.debug("{uid} is still in the directory", uid=self.uid)
+
+
+
+class PrincipalPurgeWork(
+ WorkItem,
+ fromTable(schema.PRINCIPAL_PURGE_WORK)
+):
+ """
+ Work item for purging a UID's data
+ """
+
+ group = property(lambda self: self.uid)
+
+ @inlineCallbacks
+ def doWork(self):
+
+ # Delete any other work items for this UID
+ yield Delete(
+ From=self.table,
+ Where=self.table.UID == self.uid
+ ).on(self.transaction)
+
+ # Check for UID in directory again
+ log.debug("One last existence check for {uid}", uid=self.uid)
+ directory = self.transaction.store().directoryService()
+ record = yield directory.recordWithUID(self.uid)
+
+ if record is None:
+ # Time to go
+ service = PurgePrincipalService(self.transaction.store)
+ log.warn(
+ "Cleaning up future events for principal {uid} since they are no longer in directory",
+ uid=self.uid
+ )
+ yield service.purgeUIDs(
+ self.transaction.store,
+ directory,
+ [self.uid],
+ completely=False,
+ doimplicit=True,
+ proxies=True,
+ when=None
+ )
+ else:
+ log.debug("{uid} has re-appeared in the directory", uid=self.uid)
+
+
+ at inlineCallbacks
+def scheduleNextPrincipalPurgeUpdate(store, seconds):
+
+ notBefore = (
+ datetime.datetime.utcnow() + datetime.timedelta(seconds=seconds)
+ )
+
+ log.debug(
+ "Scheduling next principal purge update: {when}", when=notBefore
+ )
+
+ def _enqueue(txn):
+ return txn.enqueue(PrincipalPurgePollingWork, notBefore=notBefore)
+
+ wp = yield store.inTransaction("scheduleNextPrincipalPurgeUpdate", _enqueue)
+
+ returnValue(wp)
+
+
+
class PurgeOldEventsService(WorkerService):
cutoff = None
@@ -681,11 +841,10 @@
@classmethod
@inlineCallbacks
- def purgeUIDs(cls, store, directory, root, uids, verbose=False, dryrun=False,
+ def purgeUIDs(cls, store, directory, uids, verbose=False, dryrun=False,
completely=False, doimplicit=True, proxies=True, when=None):
service = cls(store)
- service.root = root
service.directory = directory
service.uids = uids
service.verbose = verbose
@@ -701,10 +860,8 @@
@inlineCallbacks
def doWork(self):
- if self.root is None:
- self.root = self.rootResource()
if self.directory is None:
- self.directory = self.root.getDirectory()
+ self.directory = self.store.directoryService()
total = 0
Modified: CalendarServer/trunk/calendarserver/tools/shell/cmd.py
===================================================================
--- CalendarServer/trunk/calendarserver/tools/shell/cmd.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/calendarserver/tools/shell/cmd.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -36,7 +36,6 @@
from txdav.common.icommondatastore import NotFoundError
from calendarserver.version import version
-from calendarserver.tap.util import getRootResource
from calendarserver.tools.tables import Table
from calendarserver.tools.purge import PurgePrincipalService
from calendarserver.tools.shell.vfs import Folder, RootFolder
@@ -668,11 +667,6 @@
self.terminal.write("Aborting.\n")
return
- rootResource = getRootResource(
- self.protocol.service.config,
- self.protocol.service.store,
- )
-
if dryRun:
toPurge = "to purge"
else:
@@ -683,7 +677,6 @@
count, _ignore_assignments = (yield PurgePrincipalService.purgeUIDs(
self.protocol.service.store,
directory,
- rootResource,
(record.uid,),
verbose=False,
dryrun=dryRun,
Modified: CalendarServer/trunk/calendarserver/tools/test/test_calverify.py
===================================================================
--- CalendarServer/trunk/calendarserver/tools/test/test_calverify.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/calendarserver/tools/test/test_calverify.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -157,9 +157,9 @@
DTSTART:20100307T111500Z
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
-ATTENDEE:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
+ORGANIZER:urn:x-uid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
+ATTENDEE:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n")
@@ -178,8 +178,8 @@
DTSTART:20100307T111500Z
DTSTAMP:20100303T181220Z
ORGANIZER:http://demo.com:8008/principals/__uids__/D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
+ATTENDEE:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
SEQUENCE:2
END:VEVENT
END:VCALENDAR
@@ -199,9 +199,9 @@
SUMMARY:Ancient event
DTSTART:20100307T111500Z
DTSTAMP:20100303T181220Z
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
ATTENDEE:http://demo.com:8008/principals/__uids__/D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
+ATTENDEE:urn:x-uid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
SEQUENCE:2
END:VEVENT
END:VCALENDAR
@@ -223,39 +223,13 @@
DTSTAMP:20100303T181220Z
ORGANIZER:http://demo.com:8008/principals/__uids__/D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
ATTENDEE:http://demo.com:8008/principals/__uids__/D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
+ATTENDEE:urn:x-uid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
SEQUENCE:2
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n")
-# Non-base64 Organizer and Attendee parameter
-BAD7_ICS = """BEGIN:VCALENDAR
-VERSION:2.0
-PRODID:-//Apple Inc.//iCal 4.0.1//EN
-CALSCALE:GREGORIAN
-BEGIN:VEVENT
-CREATED:20100303T181216Z
-UID:BAD7
-DTEND:20100307T151500Z
-TRANSP:OPAQUE
-SUMMARY:Ancient event
-DTSTART:20100307T111500Z
-DTSTAMP:20100303T181220Z
-ORGANIZER;CALENDARSERVER-OLD-CUA="http://demo.com:8008/principals/__uids__/
- D46F3D71-04B7-43C2-A7B6-6F92F92E61D0":urn:uuid:D46F3D71-04B7-43C2-A7B6-6F9
- 2F92E61D0
-ATTENDEE;CALENDARSERVER-OLD-CUA="http://demo.com:8008/principals/__uids__/D
- 46F3D71-04B7-43C2-A7B6-6F92F92E61D0":urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92
- F92E61D0
-ATTENDEE:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
-SEQUENCE:2
-END:VEVENT
-END:VCALENDAR
-""".replace("\n", "\r\n")
-
-
# Base64 Organizer and Attendee parameter
OK8_ICS = """BEGIN:VCALENDAR
VERSION:2.0
@@ -271,73 +245,16 @@
DTSTAMP:20100303T181220Z
ORGANIZER;CALENDARSERVER-OLD-CUA="base64-aHR0cDovL2RlbW8uY29tOjgwMDgvcHJpbm
NpcGFscy9fX3VpZHNfXy9ENDZGM0Q3MS0wNEI3LTQzQzItQTdCNi02RjkyRjkyRTYxRDA=":
- urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
ATTENDEE;CALENDARSERVER-OLD-CUA="base64-aHR0cDovL2RlbW8uY29tOjgwMDgvcHJpbmN
pcGFscy9fX3VpZHNfXy9ENDZGM0Q3MS0wNEI3LTQzQzItQTdCNi02RjkyRjkyRTYxRDA=":u
- rn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
+ rn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
SEQUENCE:2
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n")
-BAD9_ICS = """BEGIN:VCALENDAR
-VERSION:2.0
-CALSCALE:GREGORIAN
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
-BEGIN:VTIMEZONE
-TZID:US/Pacific
-BEGIN:STANDARD
-DTSTART:19621028T020000
-RRULE:FREQ=YEARLY;UNTIL=20061029T090000Z;BYDAY=-1SU;BYMONTH=10
-TZNAME:PST
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0800
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;UNTIL=20060402T100000Z;BYDAY=1SU;BYMONTH=4
-TZNAME:PDT
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
-TZNAME:PDT
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
-END:DAYLIGHT
-BEGIN:STANDARD
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
-TZNAME:PST
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0800
-END:STANDARD
-END:VTIMEZONE
-BEGIN:VEVENT
-UID:BAD9
-DTSTART;TZID=US/Pacific:20111103T150000
-DTEND;TZID=US/Pacific:20111103T160000
-ATTENDEE;CALENDARSERVER-OLD-CUA="//example.com\\:8443/principals/users/cyrus
- /;CN=\\"Cyrus Daboo\\";CUTYPE=INDIVIDUAL;EMAIL=\\"cyrus at example.com\\";PARTSTAT=ACC
- EPTED:urn:uuid:7B2636C7-07F6-4475-924B-2854107F7A22";CN=Cyrus Daboo;EMAIL=c
- yrus at example.com;RSVP=TRUE:urn:uuid:7B2636C7-07F6-4475-924B-2854107F7A22
-ATTENDEE;CN=John Smith;CUTYPE=INDIVIDUAL;EMAIL=smith at example.com;PARTSTAT=AC
- CEPTED;ROLE=REQ-PARTICIPANT:urn:uuid:E975EB3D-C412-411B-A655-C3BE4949788C
-CREATED:20090730T214912Z
-DTSTAMP:20120421T182823Z
-ORGANIZER;CALENDARSERVER-OLD-CUA="//example.com\\:8443/principals/users/cyru
- s/;CN=\\"Cyrus Daboo\\";EMAIL=\\"cyrus at example.com\\":urn:uuid:7B2636C7-07F6-4475-9
- 24B-2854107F7A22";CN=Cyrus Daboo;EMAIL=cyrus at example.com:urn:uuid:7B2636C7-
- 07F6-4475-924B-2854107F7A22
-RRULE:FREQ=WEEKLY;COUNT=400
-SEQUENCE:18
-SUMMARY:1-on-1
-END:VEVENT
-END:VCALENDAR
-""".replace("\n", "\r\n")
# Non-mailto: Organizer
BAD10_ICS = """BEGIN:VCALENDAR
@@ -425,8 +342,8 @@
SUMMARY:Ancient event
DTSTART:20100307T111500Z
DTSTAMP:20100303T181220Z
-ATTENDEE:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
+ATTENDEE:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
SEQUENCE:2
END:VEVENT
END:VCALENDAR
@@ -457,9 +374,7 @@
"bad4.ics" : (BAD4_ICS, metadata,),
"bad5.ics" : (BAD5_ICS, metadata,),
"bad6.ics" : (BAD6_ICS, metadata,),
- "bad7.ics" : (BAD7_ICS, metadata,),
"ok8.ics" : (OK8_ICS, metadata,),
- "bad9.ics" : (BAD9_ICS, metadata,),
"bad10.ics" : (BAD10_ICS, metadata,),
"bad11.ics" : (BAD11_ICS, metadata,),
"bad12.ics" : (BAD12_ICS, metadata,),
@@ -523,8 +438,6 @@
("home1", "BAD4",),
("home1", "BAD5",),
("home1", "BAD6",),
- ("home1", "BAD7",),
- ("home1", "BAD9",),
("home1", "BAD10",),
("home1", "BAD11",),
("home1", "BAD12",),
@@ -571,8 +484,6 @@
("home1", "BAD4",),
("home1", "BAD5",),
("home1", "BAD6",),
- ("home1", "BAD7",),
- ("home1", "BAD9",),
("home1", "BAD10",),
("home1", "BAD11",),
("home1", "BAD12",),
@@ -598,11 +509,11 @@
obj = yield self.calendarObjectUnderTest(name="bad10.ics")
ical = yield obj.component()
org = ical.getOrganizerProperty()
- self.assertEqual(org.value(), "urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0")
+ self.assertEqual(org.value(), "urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0")
self.assertFalse(org.hasParameter("SCHEDULE-AGENT"))
for attendee in ical.getAllAttendeeProperties():
self.assertTrue(
- attendee.value().startswith("urn:uuid:") or
+ attendee.value().startswith("urn:x-uid:") or
attendee.value().startswith("/principals")
)
@@ -637,8 +548,6 @@
("home1", "BAD4",),
("home1", "BAD5",),
("home1", "BAD6",),
- ("home1", "BAD7",),
- ("home1", "BAD9",),
("home1", "BAD10",),
("home1", "BAD12",),
)))
@@ -681,8 +590,6 @@
("home1", "BAD4",),
("home1", "BAD5",),
("home1", "BAD6",),
- ("home1", "BAD7",),
- ("home1", "BAD9",),
("home1", "BAD10",),
("home1", "BAD12",),
)))
@@ -701,217 +608,8 @@
self.assertNotEqual(sync_token_old, sync_token_new)
- def test_fixBadCuaLines(self):
- """
- CalVerifyService.fixBadOldCuaLines. Make sure it applies correct fix.
- """
- data = (
- (
- """BEGIN:VCALENDAR
-VERSION:2.0
-CALSCALE:GREGORIAN
-METHOD:REQUEST
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
-BEGIN:VTIMEZONE
-TZID:US/Pacific
-BEGIN:STANDARD
-DTSTART:19621028T020000
-RRULE:FREQ=YEARLY;UNTIL=20061029T090000Z;BYDAY=-1SU;BYMONTH=10
-TZNAME:PST
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0800
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;UNTIL=20060402T100000Z;BYDAY=1SU;BYMONTH=4
-TZNAME:PDT
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
-TZNAME:PDT
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
-END:DAYLIGHT
-BEGIN:STANDARD
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
-TZNAME:PST
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0800
-END:STANDARD
-END:VTIMEZONE
-BEGIN:VEVENT
-UID:32956D5C-579F-46FD-BAE3-4A6C354B8CA3
-DTSTART;TZID=US/Pacific:20111103T150000
-DTEND;TZID=US/Pacific:20111103T160000
-ATTENDEE;CALENDARSERVER-OLD-CUA="//example.com\\:8443/principals/users/cyrus
- /;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;EMAIL="cyrus at example.com";PARTSTAT=ACC
- EPTED:urn:uuid:7B2636C7-07F6-4475-924B-2854107F7A22";CN=Cyrus Daboo;EMAIL=c
- yrus at example.com;RSVP=TRUE:urn:uuid:7B2636C7-07F6-4475-924B-2854107F7A22
-ATTENDEE;CN=John Smith;CUTYPE=INDIVIDUAL;EMAIL=smith at example.com;PARTSTAT=AC
- CEPTED;ROLE=REQ-PARTICIPANT:urn:uuid:E975EB3D-C412-411B-A655-C3BE4949788C
-CREATED:20090730T214912Z
-DTSTAMP:20120421T182823Z
-ORGANIZER;CALENDARSERVER-OLD-CUA="//example.com\\:8443/principals/users/cyru
- s/;CN="Cyrus Daboo";EMAIL="cyrus at example.com":urn:uuid:7B2636C7-07F6-4475-9
- 24B-2854107F7A22";CN=Cyrus Daboo;EMAIL=cyrus at example.com:urn:uuid:7B2636C7-
- 07F6-4475-924B-2854107F7A22
-RRULE:FREQ=WEEKLY;COUNT=400
-SEQUENCE:18
-SUMMARY:1-on-1
-END:VEVENT
-END:VCALENDAR
-""".replace("\n", "\r\n"),
- """BEGIN:VCALENDAR
-VERSION:2.0
-CALSCALE:GREGORIAN
-METHOD:REQUEST
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
-BEGIN:VTIMEZONE
-TZID:US/Pacific
-BEGIN:STANDARD
-DTSTART:19621028T020000
-RRULE:FREQ=YEARLY;UNTIL=20061029T090000Z;BYDAY=-1SU;BYMONTH=10
-TZNAME:PST
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0800
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;UNTIL=20060402T100000Z;BYDAY=1SU;BYMONTH=4
-TZNAME:PDT
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
-TZNAME:PDT
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
-END:DAYLIGHT
-BEGIN:STANDARD
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
-TZNAME:PST
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0800
-END:STANDARD
-END:VTIMEZONE
-BEGIN:VEVENT
-UID:32956D5C-579F-46FD-BAE3-4A6C354B8CA3
-DTSTART;TZID=US/Pacific:20111103T150000
-DTEND;TZID=US/Pacific:20111103T160000
-ATTENDEE;CALENDARSERVER-OLD-CUA="https://example.com:8443/principals/users/c
- yrus/";CN=Cyrus Daboo;EMAIL=cyrus at example.com;RSVP=TRUE:urn:uuid:7B2636C7-0
- 7F6-4475-924B-2854107F7A22
-ATTENDEE;CN=John Smith;CUTYPE=INDIVIDUAL;EMAIL=smith at example.com;PARTSTAT=AC
- CEPTED;ROLE=REQ-PARTICIPANT:urn:uuid:E975EB3D-C412-411B-A655-C3BE4949788C
-CREATED:20090730T214912Z
-DTSTAMP:20120421T182823Z
-ORGANIZER;CALENDARSERVER-OLD-CUA="https://example.com:8443/principals/users/
- cyrus/";CN=Cyrus Daboo;EMAIL=cyrus at example.com:urn:uuid:7B2636C7-07F6-4475-
- 924B-2854107F7A22
-RRULE:FREQ=WEEKLY;COUNT=400
-SEQUENCE:18
-SUMMARY:1-on-1
-END:VEVENT
-END:VCALENDAR
-""".replace("\n", "\r\n"),
- """BEGIN:VCALENDAR
-VERSION:2.0
-CALSCALE:GREGORIAN
-METHOD:REQUEST
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
-BEGIN:VTIMEZONE
-TZID:US/Pacific
-BEGIN:STANDARD
-DTSTART:19621028T020000
-RRULE:FREQ=YEARLY;UNTIL=20061029T090000Z;BYDAY=-1SU;BYMONTH=10
-TZNAME:PST
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0800
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;UNTIL=20060402T100000Z;BYDAY=1SU;BYMONTH=4
-TZNAME:PDT
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
-TZNAME:PDT
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
-END:DAYLIGHT
-BEGIN:STANDARD
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
-TZNAME:PST
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0800
-END:STANDARD
-END:VTIMEZONE
-BEGIN:VEVENT
-UID:32956D5C-579F-46FD-BAE3-4A6C354B8CA3
-DTSTART;TZID=US/Pacific:20111103T150000
-DTEND;TZID=US/Pacific:20111103T160000
-ATTENDEE;CALENDARSERVER-OLD-CUA=base64-aHR0cHM6Ly9leGFtcGxlLmNvbTo4NDQzL3Bya
- W5jaXBhbHMvdXNlcnMvY3lydXMv;CN=Cyrus Daboo;EMAIL=cyrus at example.com;RSVP=TRU
- E:urn:uuid:7B2636C7-07F6-4475-924B-2854107F7A22
-ATTENDEE;CN=John Smith;CUTYPE=INDIVIDUAL;EMAIL=smith at example.com;PARTSTAT=AC
- CEPTED;ROLE=REQ-PARTICIPANT:urn:uuid:E975EB3D-C412-411B-A655-C3BE4949788C
-CREATED:20090730T214912Z
-DTSTAMP:20120421T182823Z
-ORGANIZER;CALENDARSERVER-OLD-CUA=base64-aHR0cHM6Ly9leGFtcGxlLmNvbTo4NDQzL3By
- aW5jaXBhbHMvdXNlcnMvY3lydXMv;CN=Cyrus Daboo;EMAIL=cyrus at example.com:urn:uui
- d:7B2636C7-07F6-4475-924B-2854107F7A22
-RRULE:FREQ=WEEKLY;COUNT=400
-SEQUENCE:18
-SUMMARY:1-on-1
-END:VEVENT
-END:VCALENDAR
-""".replace("\n", "\r\n"),
- ),
- )
- optionsNo64 = {
- "ical": True,
- "nobase64": True,
- "verbose": False,
- "uid": "",
- "uuid": "",
- "tzid": "",
- }
- calverifyNo64 = BadDataService(self._sqlCalendarStore, optionsNo64, StringIO(), reactor, config)
- calverifyNo64.emailDomain = "example.com"
-
- options64 = {
- "ical": True,
- "nobase64": False,
- "verbose": False,
- "uid": "",
- "uuid": "",
- "tzid": "",
- }
- calverify64 = BadDataService(self._sqlCalendarStore, options64, StringIO(), reactor, config)
- calverify64.emailDomain = "example.com"
-
- for bad, oknobase64, okbase64 in data:
- bad = bad.replace("\r\n ", "")
- oknobase64 = oknobase64.replace("\r\n ", "")
- okbase64 = okbase64.replace("\r\n ", "")
- self.assertEqual(calverifyNo64.fixBadOldCuaLines(bad), oknobase64)
- self.assertEqual(calverify64.fixBadOldCuaLines(bad), okbase64)
-
-
-
class CalVerifyMismatchTestsBase(StoreTestCase):
"""
Tests calverify for iCalendar mismatch problems.
@@ -964,10 +662,10 @@
DTSTART:%(year)s%(month)02d07T111500Z
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
-ATTENDEE:urn:uuid:AC478592-7783-44D1-B2AE-52359B4E8415
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
+ATTENDEE:urn:x-uid:AC478592-7783-44D1-B2AE-52359B4E8415
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -986,10 +684,10 @@
DTSTART:%(year)s%(month)02d07T111500Z
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
-ATTENDEE:urn:uuid:AC478592-7783-44D1-B2AE-52359B4E8415
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
+ATTENDEE:urn:x-uid:AC478592-7783-44D1-B2AE-52359B4E8415
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -1007,10 +705,10 @@
DTSTART:%(year)s%(month)02d07T111500Z
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
-ATTENDEE:urn:uuid:AC478592-7783-44D1-B2AE-52359B4E8415
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
+ATTENDEE:urn:x-uid:AC478592-7783-44D1-B2AE-52359B4E8415
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -1029,10 +727,10 @@
DTSTART:%(year)s%(month)02d07T111500Z
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=DECLINED:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
-ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:uuid:AC478592-7783-44D1-B2AE-52359B4E8415
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=ACCEPTED:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=DECLINED:urn:x-uid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
+ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:x-uid:AC478592-7783-44D1-B2AE-52359B4E8415
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -1050,10 +748,10 @@
DTSTART:%(year)s%(month)02d07T111500Z
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
-ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:uuid:AC478592-7783-44D1-B2AE-52359B4E8415
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=ACCEPTED:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:x-uid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
+ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:x-uid:AC478592-7783-44D1-B2AE-52359B4E8415
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -1071,10 +769,10 @@
DTSTART:%(year)s%(month)02d07T111500Z
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
-ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:AC478592-7783-44D1-B2AE-52359B4E8415
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=ACCEPTED:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:x-uid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
+ATTENDEE;PARTSTAT=ACCEPTED:urn:x-uid:AC478592-7783-44D1-B2AE-52359B4E8415
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -1093,10 +791,10 @@
DTSTART:%(year)s%(month)02d07T111500Z
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=DECLINED:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
-ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:uuid:AC478592-7783-44D1-B2AE-52359B4E8415
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=ACCEPTED:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=DECLINED:urn:x-uid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
+ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:x-uid:AC478592-7783-44D1-B2AE-52359B4E8415
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -1114,10 +812,10 @@
DTSTART:%(year)s%(month)02d07T111500Z
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
-ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:uuid:AC478592-7783-44D1-B2AE-52359B4E8415
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=ACCEPTED:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:x-uid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
+ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:x-uid:AC478592-7783-44D1-B2AE-52359B4E8415
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -1135,10 +833,10 @@
DTSTART:%(year)s%(month)02d07T111500Z
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
-ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:AC478592-7783-44D1-B2AE-52359B4E8415
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=ACCEPTED:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:x-uid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
+ATTENDEE;PARTSTAT=ACCEPTED:urn:x-uid:AC478592-7783-44D1-B2AE-52359B4E8415
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -1157,10 +855,10 @@
DTSTART:%(year)s%(month)02d07T111500Z
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=DECLINED:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
-ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:uuid:AC478592-7783-44D1-B2AE-52359B4E8415
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=ACCEPTED:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=DECLINED:urn:x-uid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
+ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:x-uid:AC478592-7783-44D1-B2AE-52359B4E8415
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear - 1, "month": nowMonth}
@@ -1178,10 +876,10 @@
DTSTART:%(year)s%(month)02d07T111500Z
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
-ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:uuid:AC478592-7783-44D1-B2AE-52359B4E8415
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=ACCEPTED:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:x-uid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
+ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:x-uid:AC478592-7783-44D1-B2AE-52359B4E8415
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -1200,10 +898,10 @@
DTSTART:%(year)s%(month)02d07T111500Z
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
-ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:AC478592-7783-44D1-B2AE-52359B4E8415
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=ACCEPTED:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=ACCEPTED:urn:x-uid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
+ATTENDEE;PARTSTAT=ACCEPTED:urn:x-uid:AC478592-7783-44D1-B2AE-52359B4E8415
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -1221,9 +919,9 @@
DTSTART:%(year)s%(month)02d07T111500Z
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=ACCEPTED:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=ACCEPTED:urn:x-uid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -1241,8 +939,8 @@
DTSTART:%(year)s%(month)02d07T111500Z
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
-ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
+ORGANIZER:urn:x-uid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
+ATTENDEE;PARTSTAT=ACCEPTED:urn:x-uid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -1260,10 +958,10 @@
DTSTART:%(year)s%(month)02d07T111500Z
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
-ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:AC478592-7783-44D1-B2AE-52359B4E8415
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=ACCEPTED:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:x-uid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
+ATTENDEE;PARTSTAT=ACCEPTED:urn:x-uid:AC478592-7783-44D1-B2AE-52359B4E8415
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -1282,9 +980,9 @@
DTSTART:%(year)s%(month)02d07T111500Z
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=DECLINED:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=ACCEPTED:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=DECLINED:urn:x-uid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -1302,9 +1000,9 @@
DTSTART:%(year)s%(month)02d07T111500Z
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=DECLINED:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=ACCEPTED:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=DECLINED:urn:x-uid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -1322,10 +1020,10 @@
DTSTART:%(year)s%(month)02d07T111500Z
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=DECLINED:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
-ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:AC478592-7783-44D1-B2AE-52359B4E8415
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=ACCEPTED:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=DECLINED:urn:x-uid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
+ATTENDEE;PARTSTAT=ACCEPTED:urn:x-uid:AC478592-7783-44D1-B2AE-52359B4E8415
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -1583,9 +1281,9 @@
DTSTART:%(year)s%(month)02d07T111500Z
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -1604,9 +1302,9 @@
DTSTART:%(year)s%(month)02d07T111500Z
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:uuid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=ACCEPTED:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:x-uid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -1624,9 +1322,9 @@
DTSTART:%(year)s%(month)02d07T111500Z
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=ACCEPTED:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=ACCEPTED:urn:x-uid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -1810,9 +1508,9 @@
DTSTART:%(year)s%(month)02d07T111500Z
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -1831,9 +1529,9 @@
DTSTART:%(year)s%(month)02d07T111500Z
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:uuid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=ACCEPTED:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:x-uid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -1851,9 +1549,9 @@
DTSTART:%(year)s%(month)02d07T111500Z
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=ACCEPTED:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE;PARTSTAT=ACCEPTED:urn:x-uid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -2029,9 +1727,9 @@
DURATION:PT1H
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -2050,9 +1748,9 @@
DURATION:PT2H
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -2070,9 +1768,9 @@
DURATION:PT1H
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -2091,9 +1789,9 @@
DURATION:PT2H
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -2110,9 +1808,9 @@
DURATION:PT1H
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
TRANSP:TRANSPARENT
END:VEVENT
END:VCALENDAR
@@ -2132,9 +1830,9 @@
DURATION:PT2H
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -2151,9 +1849,9 @@
DURATION:PT1H
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
STATUS:CANCELLED
END:VEVENT
END:VCALENDAR
@@ -2173,9 +1871,9 @@
DURATION:PT2H
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
RRULE:FREQ=DAILY;COUNT=3
END:VEVENT
END:VCALENDAR
@@ -2193,9 +1891,9 @@
DURATION:PT1H
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
RRULE:FREQ=DAILY;COUNT=2
END:VEVENT
END:VCALENDAR
@@ -2215,9 +1913,9 @@
DURATION:PT2H
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
RRULE:FREQ=DAILY;COUNT=3
END:VEVENT
END:VCALENDAR
@@ -2235,9 +1933,9 @@
DURATION:PT1H
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
RRULE:FREQ=DAILY;COUNT=2
END:VEVENT
BEGIN:VEVENT
@@ -2249,9 +1947,9 @@
DURATION:PT1H
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -2287,9 +1985,9 @@
DURATION:PT2H
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -2306,9 +2004,9 @@
DTSTART;VALUE=DATE:%(year)s%(month)02d21
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -2327,9 +2025,9 @@
DURATION:PT2H
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -2347,9 +2045,9 @@
DURATION:PT1H
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -2479,9 +2177,9 @@
DURATION:PT1H
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:urn:uuid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:x-uid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -2500,9 +2198,9 @@
DURATION:PT1H
DTSTAMP:20100303T181220Z
SEQUENCE:2
-ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0-1
-ATTENDEE:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0-1
-ATTENDEE:urn:uuid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
+ORGANIZER:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0-1
+ATTENDEE:urn:x-uid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0-1
+ATTENDEE:urn:x-uid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -2523,7 +2221,7 @@
SEQUENCE:2
ORGANIZER:mailto:foobar at example.com
ATTENDEE:mailto:foobar at example.com
-ATTENDEE:urn:uuid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
+ATTENDEE:urn:x-uid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
END:VEVENT
END:VCALENDAR
""".replace("\n", "\r\n") % {"year": nowYear, "month": nowMonth}
@@ -2810,9 +2508,9 @@
UID:INVITE_VALID_ORGANIZER_ICS
DTSTART:%(now)s
DURATION:PT1H
-ATTENDEE:urn:uuid:%(uuid1)s
-ATTENDEE:urn:uuid:%(uuid2)s
-ORGANIZER:urn:uuid:%(uuid1)s
+ATTENDEE:urn:x-uid:%(uuid1)s
+ATTENDEE:urn:x-uid:%(uuid2)s
+ORGANIZER:urn:x-uid:%(uuid1)s
RRULE:FREQ=DAILY
SUMMARY:INVITE_VALID_ORGANIZER_ICS
END:VEVENT
@@ -2827,9 +2525,9 @@
UID:INVITE_VALID_ORGANIZER_ICS
DTSTART:%(now)s
DURATION:PT1H
-ATTENDEE:urn:uuid:%(uuid1)s
-ATTENDEE:urn:uuid:%(uuid2)s
-ORGANIZER:urn:uuid:%(uuid1)s
+ATTENDEE:urn:x-uid:%(uuid1)s
+ATTENDEE:urn:x-uid:%(uuid2)s
+ORGANIZER:urn:x-uid:%(uuid1)s
RRULE:FREQ=DAILY
SUMMARY:INVITE_VALID_ORGANIZER_ICS
END:VEVENT
@@ -2844,9 +2542,9 @@
UID:INVITE_VALID_ORGANIZER_ICS
DTSTART:%(now_fwd11)s
DURATION:PT1H
-ATTENDEE:urn:uuid:%(uuid1)s
-ATTENDEE:urn:uuid:%(uuid2)s
-ORGANIZER:urn:uuid:%(uuid1)s
+ATTENDEE;CN=Example User1;EMAIL=example1 at example.com:urn:x-uid:%(uuid1)s
+ATTENDEE;CN=Example User2;EMAIL=example2 at example.com:urn:x-uid:%(uuid2)s
+ORGANIZER;CN=Example User1;EMAIL=example1 at example.com:urn:x-uid:%(uuid1)s
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY
SEQUENCE:1
@@ -2863,9 +2561,9 @@
UID:INVITE_VALID_ORGANIZER_ICS
DTSTART:%(now_fwd11)s
DURATION:PT1H
-ATTENDEE:urn:uuid:%(uuid1)s
-ATTENDEE:urn:uuid:%(uuid2)s
-ORGANIZER:urn:uuid:%(uuid1)s
+ATTENDEE;CN=Example User1;EMAIL=example1 at example.com:urn:x-uid:%(uuid1)s
+ATTENDEE;CN=Example User2;EMAIL=example2 at example.com:urn:x-uid:%(uuid2)s
+ORGANIZER;CN=Example User1;EMAIL=example1 at example.com:urn:x-uid:%(uuid1)s
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY
SEQUENCE:1
@@ -2882,9 +2580,9 @@
UID:%(relID)s
DTSTART:%(now)s
DURATION:PT1H
-ATTENDEE:urn:uuid:%(uuid1)s
-ATTENDEE:urn:uuid:%(uuid2)s
-ORGANIZER:urn:uuid:%(uuid1)s
+ATTENDEE;CN=Example User1;EMAIL=example1 at example.com:urn:x-uid:%(uuid1)s
+ATTENDEE;CN=Example User2;EMAIL=example2 at example.com:urn:x-uid:%(uuid2)s
+ORGANIZER;CN=Example User1;EMAIL=example1 at example.com:urn:x-uid:%(uuid1)s
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY;UNTIL=%(now_fwd11_1)s
SEQUENCE:1
@@ -2901,9 +2599,9 @@
UID:%(relID)s
DTSTART:%(now)s
DURATION:PT1H
-ATTENDEE:urn:uuid:%(uuid1)s
-ATTENDEE:urn:uuid:%(uuid2)s
-ORGANIZER:urn:uuid:%(uuid1)s
+ATTENDEE;CN=Example User1;EMAIL=example1 at example.com:urn:x-uid:%(uuid1)s
+ATTENDEE;CN=Example User2;EMAIL=example2 at example.com:urn:x-uid:%(uuid2)s
+ORGANIZER;CN=Example User1;EMAIL=example1 at example.com:urn:x-uid:%(uuid1)s
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY;UNTIL=%(now_fwd11_1)s
SEQUENCE:1
@@ -2920,9 +2618,9 @@
UID:VALID_ORGANIZER_OVERRIDE_ICS
DTSTART:%(now)s
DURATION:PT1H
-ATTENDEE:urn:uuid:%(uuid1)s
-ATTENDEE:urn:uuid:%(uuid2)s
-ORGANIZER:urn:uuid:%(uuid1)s
+ATTENDEE:urn:x-uid:%(uuid1)s
+ATTENDEE:urn:x-uid:%(uuid2)s
+ORGANIZER:urn:x-uid:%(uuid1)s
RRULE:FREQ=DAILY
SUMMARY:INVITE_VALID_ORGANIZER_ICS
END:VEVENT
@@ -2931,9 +2629,9 @@
RECURRENCE-ID:%(now_fwd11)s
DTSTART:%(now_fwd11)s
DURATION:PT2H
-ATTENDEE:urn:uuid:%(uuid1)s
-ATTENDEE:urn:uuid:%(uuid2)s
-ORGANIZER:urn:uuid:%(uuid1)s
+ATTENDEE:urn:x-uid:%(uuid1)s
+ATTENDEE:urn:x-uid:%(uuid2)s
+ORGANIZER:urn:x-uid:%(uuid1)s
RRULE:FREQ=DAILY
SUMMARY:INVITE_VALID_ORGANIZER_ICS
END:VEVENT
Modified: CalendarServer/trunk/calendarserver/tools/test/test_purge.py
===================================================================
--- CalendarServer/trunk/calendarserver/tools/test/test_purge.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/calendarserver/tools/test/test_purge.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -877,7 +877,7 @@
yield txn.commit()
count = (yield PurgePrincipalService.purgeUIDs(self.storeUnderTest(), self.directory,
- self.rootResource, (self.uid,), verbose=False, proxies=False, completely=True))
+ (self.uid,), verbose=False, proxies=False, completely=True))
self.assertEquals(count, 2) # 2 events
# Now you don't
@@ -892,7 +892,6 @@
count = yield PurgePrincipalService.purgeUIDs(
self.storeUnderTest(),
self.directory,
- self.rootResource,
(self.uid,),
verbose=False,
proxies=False,
@@ -922,7 +921,7 @@
yield txn.commit()
count = (yield PurgePrincipalService.purgeUIDs(self.storeUnderTest(), self.directory,
- self.rootResource, (self.uid,), verbose=False, proxies=False, completely=False))
+ (self.uid,), verbose=False, proxies=False, completely=False))
self.assertEquals(count, 1) # 2 events
# Now you still see it
@@ -935,7 +934,7 @@
yield txn.commit()
count = yield PurgePrincipalService.purgeUIDs(self.storeUnderTest(), self.directory,
- self.rootResource, (self.uid,), verbose=False, proxies=False, completely=False)
+ (self.uid,), verbose=False, proxies=False, completely=False)
self.assertEquals(count, 1)
# And you still do
Modified: CalendarServer/trunk/calendarserver/tools/test/test_purge_old_events.py
===================================================================
--- CalendarServer/trunk/calendarserver/tools/test/test_purge_old_events.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/calendarserver/tools/test/test_purge_old_events.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -677,7 +677,7 @@
# Purge home1
total = yield PurgePrincipalService.purgeUIDs(self._sqlCalendarStore, self.directory,
- self.rootResource, ("home1",), verbose=False, proxies=False,
+ ("home1",), verbose=False, proxies=False,
when=DateTime(now, 4, 1, 12, 0, 0, 0, Timezone(utc=True)))
# 4 items deleted: 3 events and 1 vcard
@@ -714,7 +714,7 @@
# Purge home1 completely
total = yield PurgePrincipalService.purgeUIDs(self._sqlCalendarStore, self.directory,
- self.rootResource, ("home1",), verbose=False, proxies=False, completely=True)
+ ("home1",), verbose=False, proxies=False, completely=True)
# 9 items deleted: 8 events and 1 vcard
self.assertEquals(total, 9)
Modified: CalendarServer/trunk/contrib/performance/_event_create.py
===================================================================
--- CalendarServer/trunk/contrib/performance/_event_create.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/contrib/performance/_event_create.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -80,13 +80,13 @@
attendee = """\
ATTENDEE;CN=User %(SEQUENCE)02d;CUTYPE=INDIVIDUAL;EMAIL=user%(SEQUENCE)02d at example.com;PARTSTAT=NE
- EDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:urn:uuid:user%(SEQUENCE)02d
+ EDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:urn:x-uid:user%(SEQUENCE)02d
"""
organizer = """\
-ORGANIZER;CN=User %(SEQUENCE)02d;EMAIL=user%(SEQUENCE)02d at example.com:urn:uuid:user%(SEQUENCE)02d
+ORGANIZER;CN=User %(SEQUENCE)02d;EMAIL=user%(SEQUENCE)02d at example.com:urn:x-uid:user%(SEQUENCE)02d
ATTENDEE;CN=User %(SEQUENCE)02d;EMAIL=user%(SEQUENCE)02d at example.com;PARTSTAT=ACCEPTE
- D:urn:uuid:user%(SEQUENCE)02d
+ D:urn:x-uid:user%(SEQUENCE)02d
"""
def formatDate(d):
Modified: CalendarServer/trunk/contrib/performance/benchmarks/bounded_recurrence_autoaccept.py
===================================================================
--- CalendarServer/trunk/contrib/performance/benchmarks/bounded_recurrence_autoaccept.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/contrib/performance/benchmarks/bounded_recurrence_autoaccept.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -25,6 +25,7 @@
from contrib.performance._event_create import (
makeAttendees, makeVCalendar, formatDate, measure as _measure)
+
def makeEvent(i, organizerSequence, attendeeCount):
"""
Create a new half-hour long event that starts soon and recurs
@@ -38,7 +39,7 @@
attendees = makeAttendees(attendeeCount)
attendees.append(
'ATTENDEE;CN="Resource 01";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION;RSVP=T\n'
- ' RUE;SCHEDULE-STATUS="1.2":urn:uuid:resource01\n')
+ ' RUE;SCHEDULE-STATUS="1.2":urn:x-uid:40000000-0000-0000-0000-000000000001\n')
return makeVCalendar(
uuid4(), start, end, rrule, organizerSequence, attendees)
Modified: CalendarServer/trunk/contrib/performance/benchmarks/event_autoaccept.py
===================================================================
--- CalendarServer/trunk/contrib/performance/benchmarks/event_autoaccept.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/contrib/performance/benchmarks/event_autoaccept.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -34,7 +34,7 @@
attendees = makeAttendees(attendeeCount)
attendees.append(
'ATTENDEE;CN="Resource 01";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION;RSVP=T\n'
- ' RUE;SCHEDULE-STATUS="1.2":urn:uuid:resource01\n')
+ ' RUE;SCHEDULE-STATUS="1.2":urn:x-uid:40000000-0000-0000-0000-000000000001\n')
return makeVCalendar(
uuid4(),
base + i * interval,
Modified: CalendarServer/trunk/contrib/performance/benchmarks/unbounded_recurrence_autoaccept.py
===================================================================
--- CalendarServer/trunk/contrib/performance/benchmarks/unbounded_recurrence_autoaccept.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/contrib/performance/benchmarks/unbounded_recurrence_autoaccept.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -36,7 +36,7 @@
attendees = makeAttendees(attendeeCount)
attendees.append(
'ATTENDEE;CN="Resource 01";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION;RSVP=T\n'
- ' RUE;SCHEDULE-STATUS="1.2":urn:uuid:resource01\n')
+ ' RUE;SCHEDULE-STATUS="1.2":urn:x-uid:40000000-0000-0000-0000-000000000001\n')
return makeVCalendar(
uuid4(), start, end, "RRULE:FREQ=WEEKLY", organizerSequence, attendees)
Modified: CalendarServer/trunk/contrib/performance/benchmarks/vfreebusy.py
===================================================================
--- CalendarServer/trunk/contrib/performance/benchmarks/vfreebusy.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/contrib/performance/benchmarks/vfreebusy.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -73,7 +73,7 @@
X-CALENDARSERVER-MASK-UID:EC75A61B-08A3-44FD-BFBB-2457BBD0D490
DTSTAMP:20100729T174751Z
ORGANIZER:mailto:user01 at example.com
-SUMMARY:Availability for urn:uuid:user02
+SUMMARY:Availability for urn:x-uid:user02
END:VFREEBUSY
END:VCALENDAR
"""
@@ -124,6 +124,7 @@
@inlineCallbacks
def measure(host, port, dtrace, events, samples):
user = password = "user01"
+ uid = "10000000-0000-0000-0000-000000000001"
root = "/"
principal = "/"
calendar = "vfreebusy-benchmark"
@@ -150,12 +151,12 @@
headers = Headers({
"content-type": ["text/calendar"],
"originator": ["mailto:%s at example.com" % (user,)],
- "recipient": ["urn:uuid:%s, urn:uuid:user02" % (user,)]})
+ "recipient": ["urn:x-uid:%s, urn:x-uid:10000000-0000-0000-0000-000000000002" % (uid,)]})
vfb = VFREEBUSY % {
"attendees": "".join([
- "ATTENDEE:urn:uuid:%s\n" % (user,),
- "ATTENDEE:urn:uuid:user02\n"]),
+ "ATTENDEE:urn:x-uid:%s\n" % (uid,),
+ "ATTENDEE:urn:x-uid:10000000-0000-0000-0000-000000000002\n"]),
"start": formatDate(baseTime.replace(hour=0, minute=0)) + 'Z',
"end": formatDate(
baseTime.replace(hour=0, minute=0) + timedelta(days=1)) + 'Z'}
Modified: CalendarServer/trunk/contrib/performance/benchmarks/vfreebusy_vary_attendees.py
===================================================================
--- CalendarServer/trunk/contrib/performance/benchmarks/vfreebusy_vary_attendees.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/contrib/performance/benchmarks/vfreebusy_vary_attendees.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -34,6 +34,7 @@
from contrib.performance.benchmarks.vfreebusy import VFREEBUSY, formatDate, makeEventNear
+
@inlineCallbacks
def measure(host, port, dtrace, attendees, samples):
userNumber = 1
@@ -51,7 +52,7 @@
for i in [userNumber] + targets:
targetUser = "user%02d" % (i,)
for path in ["calendars/users/%s/" % (targetUser,),
- "calendars/__uids__/%s/" % (targetUser,)]:
+ "calendars/__uids__/10000000-0000-0000-0000-000000000%03d/" % (i,)]:
authinfo.add_password(
realm="Test Realm",
uri="http://%s:%d/%s" % (host, port, path),
@@ -75,14 +76,14 @@
# And now issue the actual VFREEBUSY request
method = 'POST'
- uri = 'http://%s:%d/calendars/__uids__/%s/outbox/' % (host, port, user)
+ uri = 'http://%s:%d/calendars/__uids__/10000000-0000-0000-0000-000000000001/outbox/' % (host, port)
headers = Headers({
"content-type": ["text/calendar"],
"originator": ["mailto:%s at example.com" % (user,)],
- "recipient": [", ".join(["urn:uuid:user%02d" % (i,) for i in [userNumber] + targets])]})
+ "recipient": [", ".join(["urn:x-uid:10000000-0000-0000-0000-000000000%03d" % (i,) for i in [userNumber] + targets])]})
body = StringProducer(VFREEBUSY % {
"attendees": "".join([
- "ATTENDEE:urn:uuid:user%02d\n" % (i,)
+ "ATTENDEE:urn:x-uid:10000000-0000-0000-0000-000000000%03d\n" % (i,)
for i in [userNumber] + targets]),
"start": formatDate(baseTime.replace(hour=0, minute=0)) + 'Z',
"end": formatDate(
Modified: CalendarServer/trunk/contrib/performance/loadtest/profiles.py
===================================================================
--- CalendarServer/trunk/contrib/performance/loadtest/profiles.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/contrib/performance/loadtest/profiles.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -205,7 +205,7 @@
except IndexError:
continue
cuaddr = u'mailto:%s' % (record.email,)
- uuid = u'urn:uuid:%s' % (record.uid,)
+ uuid = u'urn:x-uid:%s' % (record.uid,)
if cuaddr not in invitees and uuid not in invitees:
break
else:
@@ -592,21 +592,21 @@
A Calendar user who creates new events.
"""
_eventTemplate = Component.fromString("""\
-BEGIN:VCALENDAR
-VERSION:2.0
-PRODID:-//Apple Inc.//iCal 4.0.3//EN
-CALSCALE:GREGORIAN
-BEGIN:VEVENT
-CREATED:20101018T155431Z
-UID:C98AD237-55AD-4F7D-9009-0D355D835822
-DTEND;TZID=America/New_York:20101021T130000
-TRANSP:OPAQUE
-SUMMARY:Simple event
-DTSTART;TZID=America/New_York:20101021T120000
-DTSTAMP:20101018T155438Z
-SEQUENCE:2
-END:VEVENT
-END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Apple Inc.//iCal 4.0.3//EN
+CALSCALE:GREGORIAN
+BEGIN:VEVENT
+CREATED:20101018T155431Z
+UID:C98AD237-55AD-4F7D-9009-0D355D835822
+DTEND;TZID=America/New_York:20101021T130000
+TRANSP:OPAQUE
+SUMMARY:Simple event
+DTSTART;TZID=America/New_York:20101021T120000
+DTSTAMP:20101018T155438Z
+SEQUENCE:2
+END:VEVENT
+END:VCALENDAR
""".replace("\n", "\r\n"))
def setParameters(
Modified: CalendarServer/trunk/contrib/performance/sqlusage/sqlusage.py
===================================================================
--- CalendarServer/trunk/contrib/performance/sqlusage/sqlusage.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/contrib/performance/sqlusage/sqlusage.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -286,7 +286,7 @@
for i in range(n - self.currentCount):
index = self.currentCount + i + 2
users.append("user%02d" % (index,))
- uids.append("urn:uuid:user%02d" % (index,))
+ uids.append("urn:x-uid:user%02d" % (index,))
session.addInvitees(URL(path=calendarhref), uids, True)
# Now accept each one
Modified: CalendarServer/trunk/contrib/performance/test_event_change_date.py
===================================================================
--- CalendarServer/trunk/contrib/performance/test_event_change_date.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/contrib/performance/test_event_change_date.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -51,11 +51,11 @@
calendarTail = """\
ATTENDEE;CN=User 02;CUTYPE=INDIVIDUAL;EMAIL=user02 at example.com;PARTSTAT=NE
- EDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:use
+ EDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:use
r02
CREATED:20100729T193912Z
DTSTAMP:20100729T195557Z
-ORGANIZER;CN=User 03;EMAIL=user03 at example.com:urn:uuid:user03
+ORGANIZER;CN=User 03;EMAIL=user03 at example.com:urn:x-uid:user03
SEQUENCE:1
SUMMARY:STUFF IS THINGS
TRANSP:OPAQUE
Modified: CalendarServer/trunk/twistedcaldav/directory/principal.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/principal.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/twistedcaldav/directory/principal.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -117,7 +117,10 @@
cua = normalizeCUAddr(origCUAddr)
- if cua.startswith("urn:uuid:"):
+ if cua.startswith("urn:x-uid:"):
+ return "uid", cua[10:]
+
+ elif cua.startswith("urn:uuid:"):
return "guid", uuid.UUID(cua[9:])
elif cua.startswith("mailto:"):
@@ -849,9 +852,7 @@
namespace, name = qname
if qname == davxml.ResourceID.qname():
- # FIXME: should this return a different CUA flavor if guid is not set on this record?
- if hasattr(self.record, "guid"):
- returnValue(davxml.ResourceID(davxml.HRef.fromString("urn:uuid:%s" % (self.record.guid,))))
+ returnValue(davxml.ResourceID(davxml.HRef.fromString("urn:x-uid:%s" % (self.record.uid,))))
elif namespace == calendarserver_namespace:
@@ -1268,11 +1269,7 @@
def canonicalCalendarUserAddress(self):
"""
- Return a CUA for this principal, preferring in this order:
- urn:uuid: form
- mailto: form
- /principal/__uids__/ form
- first in calendarUserAddresses( ) list
+ Return a CUA for this principal
"""
return self.record.canonicalCalendarUserAddress()
Modified: CalendarServer/trunk/twistedcaldav/directory/test/test_principal.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/test_principal.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/twistedcaldav/directory/test/test_principal.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -612,21 +612,10 @@
provisioningResource, recordType, recordResource, record
) in (yield self._allRecords()):
if record.hasCalendars:
- if self.directory.fieldName.guid in record.fields:
- self.failUnless(
- recordResource.canonicalCalendarUserAddress()
- .startswith("urn:uuid:")
- )
- elif self.directory.fieldName.emailAddresses in record.fields:
- self.failUnless(
- recordResource.canonicalCalendarUserAddress()
- .startswith("mailto:")
- )
- else:
- self.failUnless(
- recordResource.canonicalCalendarUserAddress()
- .startswith("/principals/__uids__/")
- )
+ self.failUnless(
+ recordResource.canonicalCalendarUserAddress()
+ .startswith("urn:x-uid:")
+ )
@inlineCallbacks
Modified: CalendarServer/trunk/twistedcaldav/directory/test/util.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/util.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/twistedcaldav/directory/test/util.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -213,6 +213,7 @@
addresses = set(value("addresses"))
if record.hasCalendars:
+ addresses.add("urn:x-uid:%s" % (record.uid,))
addresses.add("urn:uuid:%s" % (record.guid,))
addresses.add("/principals/__uids__/%s/" % (record.uid,))
addresses.add("/principals/%s/%s/" % (record.recordType, record.shortNames[0],))
Modified: CalendarServer/trunk/twistedcaldav/ical.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/ical.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/twistedcaldav/ical.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -3267,13 +3267,21 @@
@inlineCallbacks
- def normalizeCalendarUserAddresses(self, lookupFunction, recordFunction,
- toUUID=True):
+ def normalizeCalendarUserAddresses(
+ self, lookupFunction, recordFunction, toCanonical=True
+ ):
"""
Do the ORGANIZER/ATTENDEE property normalization.
@param lookupFunction: function returning full name, guid, CUAs for a given CUA
@type lookupFunction: L{Function}
+
+ @param recordFunction: function taking a CUA and returning a record
+ @type recordFunction: L{Function}
+
+ @param toCanonical: whether to convert to the canonical CUA form (True)
+ or to the mailto: form (False)
+ @type toCanonical: L{bool}
"""
for component in self.subcomponents():
@@ -3288,8 +3296,8 @@
# Check that we can lookup this calendar user address - if not
# we cannot do anything with it
cuaddr = normalizeCUAddr(prop.value())
- name, guid, cutype, cuaddrs = yield lookupFunction(cuaddr, recordFunction, config)
- if guid is None:
+ name, uid, cutype, cuaddrs = yield lookupFunction(cuaddr, recordFunction, config)
+ if uid is None:
continue
# Get any EMAIL parameter
@@ -3300,14 +3308,12 @@
# Get any CN parameter
oldCN = prop.parameterValue("CN")
- if toUUID:
- # Always re-write value to urn:uuid
- if isinstance(guid, uuid.UUID):
- guid = unicode(guid).upper()
- prop.setValue("urn:uuid:{guid}".format(guid=guid))
+ if toCanonical:
+ # Always re-write value to urn:x-uid
+ prop.setValue("urn:x-uid:{uid}".format(uid=uid))
- # If it is already a non-UUID address leave it be
- elif cuaddr.startswith("urn:uuid:"):
+ # If it is already a non-x-uid address leave it be
+ elif (cuaddr.startswith("urn:x-uid:") or cuaddr.startswith("urn:uuid:")):
if oldemail:
# Use the EMAIL parameter if it exists
@@ -3364,7 +3370,7 @@
prop.removeParameter("CN")
# Re-write the EMAIL if its value no longer matches
- if oldemail and oldemail not in cuaddrs or oldemail is None and toUUID:
+ if oldemail and oldemail not in cuaddrs or oldemail is None and toCanonical:
if cuaddr.startswith("mailto:") and cuaddr in cuaddrs:
email = cuaddr[7:]
else:
@@ -3388,7 +3394,7 @@
# For VPOLL also do immediate children
if component.name() == "VPOLL":
- yield component.normalizeCalendarUserAddresses(lookupFunction, recordFunction, toUUID)
+ yield component.normalizeCalendarUserAddresses(lookupFunction, recordFunction, toCanonical)
def _reconcileGroupAttendee(self, groupCUA, memberAtttendeeProps):
@@ -3652,21 +3658,21 @@
# #
# Utilities
-# #p
+# #
@inlineCallbacks
-def normalizeCUAddress(cuaddr, lookupFunction, recordFunction, toUUID=True):
+def normalizeCUAddress(cuaddr, lookupFunction, recordFunction, toCanonical=True):
# Check that we can lookup this calendar user address - if not
# we cannot do anything with it
- _ignore_name, guid, _ignore_cuType, cuaddrs = (yield lookupFunction(normalizeCUAddr(cuaddr), recordFunction, config))
+ _ignore_name, uid, _ignore_cuType, cuaddrs = (yield lookupFunction(normalizeCUAddr(cuaddr), recordFunction, config))
- if toUUID:
- # Always re-write value to urn:uuid
- if guid:
- returnValue("urn:uuid:{0}".format(guid,))
+ if toCanonical:
+ # Always re-write value to urn:x-uid
+ if uid:
+ returnValue("urn:x-uid:{0}".format(uid,))
- # If it is already a non-UUID address leave it be
- elif cuaddr.startswith("urn:uuid:"):
+ # If it is already a non-x-uid address leave it be
+ elif (cuaddr.startswith("urn:x-uid:") or cuaddr.startswith("urn:uuid:")):
# Pick the first mailto,
# or failing that the first path one,
@@ -3740,6 +3746,9 @@
def normalize_iCalStr(icalstr, sort=False):
"""
Normalize a string representation of ical data for easy test comparison.
+
+ @param sort: Whether to sort the output
+ @type sort: L{boolean}
"""
icalstr = str(icalstr).replace("\r\n ", "")
@@ -3756,8 +3765,11 @@
-def diff_iCalStrs(icalstr1, icalstr2):
-
- icalstr1 = normalize_iCalStr(icalstr1).splitlines()
- icalstr2 = normalize_iCalStr(icalstr2).splitlines()
+def diff_iCalStrs(icalstr1, icalstr2, sort=False):
+ """
+ @param sort: Whether to sort the output
+ @type sort: L{boolean}
+ """
+ icalstr1 = normalize_iCalStr(icalstr1, sort=sort).splitlines()
+ icalstr2 = normalize_iCalStr(icalstr2, sort=sort).splitlines()
return "\n".join(unified_diff(icalstr1, icalstr2))
Modified: CalendarServer/trunk/twistedcaldav/sharing.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/sharing.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/twistedcaldav/sharing.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -65,7 +65,7 @@
@inlineCallbacks
def invitePropertyElement(invitation, includeUID=True):
- userid = "urn:uuid:" + invitation.shareeUID
+ userid = "urn:x-uid:" + invitation.shareeUID
principal = yield self.principalForUID(invitation.shareeUID)
cn = principal.displayName() if principal else invitation.shareeUID
returnValue(customxml.InviteUser(
@@ -91,11 +91,11 @@
invitations = yield self.validateInvites(request, invitations)
ownerPrincipal = yield self.principalForUID(self._newStoreObject.ownerHome().uid())
- # FIXME: use urn:uuid in all cases
+ # FIXME: use urn:x-uid in all cases
if self.isCalendarCollection():
owner = ownerPrincipal.principalURL()
else:
- owner = "urn:uuid:" + ownerPrincipal.principalUID()
+ owner = "urn:x-uid:" + ownerPrincipal.principalUID()
ownerCN = ownerPrincipal.displayName()
returnValue(customxml.Invite(
@@ -437,7 +437,7 @@
invitations = yield self._newStoreObject.allInvitations()
for invitation in invitations:
if invitation.status != _BIND_STATUS_INVALID:
- if not (yield self.validUserIDForShare("urn:uuid:" + invitation.shareeUID, request)):
+ if not (yield self.validUserIDForShare("urn:x-uid:" + invitation.shareeUID, request)):
self.log.error("Invalid sharee detected: {uid}", uid=invitation.shareeUID)
returnValue(invitations)
Modified: CalendarServer/trunk/twistedcaldav/storebridge.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/storebridge.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/twistedcaldav/storebridge.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -1539,7 +1539,7 @@
"""
attendees = (yield self._newStoreCalendarObject.component()).getAttendees()
- attendees = [attendee.split("urn:uuid:")[-1] for attendee in attendees]
+ attendees = [attendee.split("urn:x-uid:")[-1] for attendee in attendees]
document = yield davXMLFromStream(request.stream)
for ace in document.root_element.children:
for child in ace.children:
@@ -3928,7 +3928,7 @@
if jsondata["shared-type"] == "calendar":
owner = ownerPrincipal.principalURL()
else:
- owner = "urn:uuid:" + ownerPrincipal.principalUID()
+ owner = "urn:x-uid:" + ownerPrincipal.principalUID()
shareePrincipal = yield self.principalForUID(jsondata["sharee"])
@@ -3949,7 +3949,7 @@
customxml.DTStamp.fromString(jsondata["dtstamp"]),
customxml.InviteNotification(
customxml.UID.fromString(jsondata["uid"]),
- element.HRef.fromString("urn:uuid:" + jsondata["sharee"]),
+ element.HRef.fromString("urn:x-uid:" + jsondata["sharee"]),
invitationBindStatusToXMLMap[jsondata["status"]](),
customxml.InviteAccess(invitationBindModeToXMLMap[jsondata["access"]]()),
customxml.HostURL(
@@ -3970,7 +3970,7 @@
shareePrincipal = yield self.principalForUID(jsondata["sharee"])
- # FIXME: use urn:uuid always?
+ # FIXME: use urn:x-uid always?
if jsondata["shared-type"] == "calendar":
# Prefer mailto:, otherwise use principal URL
for cua in shareePrincipal.calendarUserAddresses():
@@ -3979,7 +3979,7 @@
else:
cua = shareePrincipal.principalURL()
else:
- cua = "urn:uuid:" + shareePrincipal.principalUID()
+ cua = "urn:x-uid:" + shareePrincipal.principalUID()
commonName = shareePrincipal.displayName()
# record = shareePrincipal.record
Modified: CalendarServer/trunk/twistedcaldav/test/test_icalendar.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/test/test_icalendar.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/twistedcaldav/test/test_icalendar.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -7598,7 +7598,7 @@
@inlineCallbacks
- def test_normalizeCalendarUserAddressesFromUUID(self):
+ def test_normalizeCalendarUserAddressesFromCanonical(self):
"""
Ensure mailto is preferred, followed by path form, then http form.
"""
@@ -7612,6 +7612,7 @@
ATTENDEE:urn:uuid:foo
ATTENDEE:urn:uuid:bar
ATTENDEE:urn:uuid:baz
+ATTENDEE:urn:x-uid:buz
DTSTAMP:20071114T000000Z
END:VEVENT
END:VCALENDAR
@@ -7627,24 +7628,30 @@
"Foo",
"foo",
"INDIVIDUAL",
- ("urn:uuid:foo", "http://example.com/foo", "/foo")
+ ("urn:x-uid:foo", "urn:uuid:foo", "http://example.com/foo", "/foo")
),
"urn:uuid:bar" : (
"Bar",
"bar",
"INDIVIDUAL",
- ("urn:uuid:bar", "mailto:bar at example.com", "http://example.com/bar", "/bar")
+ ("urn:x-uid:bar", "urn:uuid:bar", "mailto:bar at example.com", "http://example.com/bar", "/bar")
),
"urn:uuid:baz" : (
"Baz",
"baz",
"INDIVIDUAL",
- ("urn:uuid:baz", "http://example.com/baz")
+ ("urn:x-uid:baz", "urn:uuid:baz", "http://example.com/baz")
),
+ "urn:x-uid:buz" : (
+ "Buz",
+ "buz",
+ "INDIVIDUAL",
+ ("urn:x-uid:buz", "urn:uuid:buz", "http://example.com/buz")
+ ),
}[cuaddr]
)
- yield component.normalizeCalendarUserAddresses(lookupFunction, None, toUUID=False)
+ yield component.normalizeCalendarUserAddresses(lookupFunction, None, toCanonical=False)
self.assertEquals("mailto:bar at example.com",
component.getAttendeeProperty(("mailto:bar at example.com",)).value())
@@ -7652,6 +7659,8 @@
component.getAttendeeProperty(("/foo",)).value())
self.assertEquals("http://example.com/baz",
component.getAttendeeProperty(("http://example.com/baz",)).value())
+ self.assertEquals("http://example.com/buz",
+ component.getAttendeeProperty(("http://example.com/buz",)).value())
@inlineCallbacks
@@ -7686,30 +7695,30 @@
"Foo",
"foo",
"INDIVIDUAL",
- ("urn:uuid:foo",)
+ ("urn:x-uid:foo", "urn:uuid:foo",)
),
"http://example.com/principals/users/bar" : (
"Bar",
"bar",
"INDIVIDUAL",
- ("urn:uuid:bar",)
+ ("urn:x-uid:bar", "urn:uuid:bar",)
),
"http://example.com/principals/locations/buzz" : (
"{Restricted} Buzz",
"buzz",
"ROOM",
- ("urn:uuid:buzz",)
+ ("urn:x-uid:buzz", "urn:uuid:buzz",)
),
}[cuaddr]
)
- yield component.normalizeCalendarUserAddresses(lookupFunction, None, toUUID=True)
+ yield component.normalizeCalendarUserAddresses(lookupFunction, None, toCanonical=True)
# Location value changed
prop = component.mainComponent().getProperty("LOCATION")
self.assertEquals(prop.value(), "{Restricted} Buzz")
- prop = component.getAttendeeProperty(("urn:uuid:buzz",))
- self.assertEquals("urn:uuid:buzz", prop.value())
+ prop = component.getAttendeeProperty(("urn:x-uid:buzz",))
+ self.assertEquals("urn:x-uid:buzz", prop.value())
self.assertEquals(prop.parameterValue("CN"), "{Restricted} Buzz")
@@ -7745,30 +7754,30 @@
"Foo",
"foo",
"INDIVIDUAL",
- ("urn:uuid:foo",)
+ ("urn:x-uid:foo", "urn:uuid:foo",)
),
"http://example.com/principals/users/bar" : (
"Bar",
"bar",
"INDIVIDUAL",
- ("urn:uuid:bar",)
+ ("urn:x-uid:bar", "urn:uuid:bar",)
),
"http://example.com/principals/locations/buzz" : (
"{Restricted} Buzz",
"buzz",
"INDIVIDUAL",
- ("urn:uuid:buzz",)
+ ("urn:x-uid:buzz", "urn:uuid:buzz",)
),
}[cuaddr]
)
- yield component.normalizeCalendarUserAddresses(lookupFunction, None, toUUID=True)
+ yield component.normalizeCalendarUserAddresses(lookupFunction, None, toCanonical=True)
# Location value changed
prop = component.mainComponent().getProperty("LOCATION")
self.assertEquals(prop.value(), "Fuzz")
- prop = component.getAttendeeProperty(("urn:uuid:buzz",))
- self.assertEquals("urn:uuid:buzz", prop.value())
+ prop = component.getAttendeeProperty(("urn:x-uid:buzz",))
+ self.assertEquals("urn:x-uid:buzz", prop.value())
self.assertEquals(prop.parameterValue("CN"), "{Restricted} Buzz")
@@ -7804,30 +7813,30 @@
"Foo",
"foo",
"INDIVIDUAL",
- ("urn:uuid:foo",)
+ ("urn:x-uid:foo", "urn:uuid:foo",)
),
"http://example.com/principals/users/bar" : (
"Bar",
"bar",
"INDIVIDUAL",
- ("urn:uuid:bar",)
+ ("urn:x-uid:bar", "urn:uuid:bar",)
),
"http://example.com/principals/locations/buzz" : (
"{Restricted} Buzz",
"buzz",
"INDIVIDUAL",
- ("urn:uuid:buzz",)
+ ("urn:x-uid:buzz", "urn:uuid:buzz",)
),
}[cuaddr]
)
- yield component.normalizeCalendarUserAddresses(lookupFunction, None, toUUID=True)
+ yield component.normalizeCalendarUserAddresses(lookupFunction, None, toCanonical=True)
# Location value changed
prop = component.mainComponent().getProperty("LOCATION")
self.assertEquals(prop.value(), "Buzz")
- prop = component.getAttendeeProperty(("urn:uuid:buzz",))
- self.assertEquals("urn:uuid:buzz", prop.value())
+ prop = component.getAttendeeProperty(("urn:x-uid:buzz",))
+ self.assertEquals("urn:x-uid:buzz", prop.value())
self.assertEquals(prop.parameterValue("CN"), "{Restricted} Buzz")
@@ -8529,7 +8538,7 @@
@inlineCallbacks
- def test_normalizeCUAddressFromUUID(self):
+ def test_normalizeCUAddressFromCanonical(self):
"""
Ensure mailto is preferred, followed by path form, then http form.
If CALENDARSERVER-OLD-CUA parameter is present, restore that value.
@@ -8539,7 +8548,11 @@
("urn:uuid:foo", "/foo"),
("urn:uuid:bar", "mailto:bar at example.com",),
("urn:uuid:baz", "http://example.com/baz",),
- ("urn:uuid:buz", "urn:uuid:buz",),
+ ("urn:uuid:buz", "urn:x-uid:buz",),
+ ("urn:x-uid:foo", "/foo"),
+ ("urn:x-uid:bar", "mailto:bar at example.com",),
+ ("urn:x-uid:baz", "http://example.com/baz",),
+ ("urn:x-uid:buz", "urn:x-uid:buz",),
)
def lookupFunction(cuaddr, ignored1, ignored2):
@@ -8549,44 +8562,68 @@
"Foo",
"foo",
"INDIVIDUAL",
- ("urn:uuid:foo", "http://example.com/foo", "/foo")
+ ("urn:x-uid:foo", "urn:uuid:foo", "http://example.com/foo", "/foo")
),
"urn:uuid:bar" : (
"Bar",
"bar",
"INDIVIDUAL",
- ("urn:uuid:bar", "mailto:bar at example.com", "http://example.com/bar", "/bar")
+ ("urn:x-uid:bar", "urn:uuid:bar", "mailto:bar at example.com", "http://example.com/bar", "/bar")
),
"urn:uuid:baz" : (
"Baz",
"baz",
"INDIVIDUAL",
- ("urn:uuid:baz", "http://example.com/baz")
+ ("urn:x-uid:baz", "urn:uuid:baz", "http://example.com/baz")
),
"urn:uuid:buz" : (
"Buz",
"buz",
"INDIVIDUAL",
- ("urn:uuid:buz",)
+ ("urn:x-uid:buz", "urn:uuid:buz",)
),
+ "urn:x-uid:foo" : (
+ "Foo",
+ "foo",
+ "INDIVIDUAL",
+ ("urn:x-uid:foo", "urn:uuid:foo", "http://example.com/foo", "/foo")
+ ),
+ "urn:x-uid:bar" : (
+ "Bar",
+ "bar",
+ "INDIVIDUAL",
+ ("urn:x-uid:bar", "urn:uuid:bar", "mailto:bar at example.com", "http://example.com/bar", "/bar")
+ ),
+ "urn:x-uid:baz" : (
+ "Baz",
+ "baz",
+ "INDIVIDUAL",
+ ("urn:x-uid:baz", "urn:uuid:baz", "http://example.com/baz")
+ ),
+ "urn:x-uid:buz" : (
+ "Buz",
+ "buz",
+ "INDIVIDUAL",
+ ("urn:x-uid:buz", "urn:uuid:buz",)
+ ),
}[cuaddr]
)
for cuaddr, result in data:
- new_cuaddr = yield normalizeCUAddress(cuaddr, lookupFunction, None, toUUID=False)
+ new_cuaddr = yield normalizeCUAddress(cuaddr, lookupFunction, None, toCanonical=False)
self.assertEquals(new_cuaddr, result)
@inlineCallbacks
- def test_normalizeCUAddressToUUID(self):
+ def test_normalizeCUAddressToCanonical(self):
"""
Ensure http(s) and /path CUA values are tucked away into the property
using CALENDARSERVER-OLD-CUA parameter.
"""
data = (
- ("/principals/users/foo", "urn:uuid:foo",),
- ("http://example.com/principals/users/buz", "urn:uuid:buz",),
+ ("/principals/users/foo", "urn:x-uid:foo",),
+ ("http://example.com/principals/users/buz", "urn:x-uid:buz",),
)
@@ -8597,19 +8634,19 @@
"Foo",
"foo",
"INDIVIDUAL",
- ("urn:uuid:foo",)
+ ("urn:x-uid:foo", "urn:uuid:foo",)
),
"http://example.com/principals/users/buz" : (
"Buz",
"buz",
"INDIVIDUAL",
- ("urn:uuid:buz",)
+ ("urn:x-uid:buz", "urn:uuid:buz",)
),
}[cuaddr]
)
for cuaddr, result in data:
- new_cuaddr = yield normalizeCUAddress(cuaddr, lookupFunction, None, toUUID=True)
+ new_cuaddr = yield normalizeCUAddress(cuaddr, lookupFunction, None, toCanonical=True)
self.assertEquals(new_cuaddr, result)
Modified: CalendarServer/trunk/twistedcaldav/test/test_sharing.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/test/test_sharing.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/twistedcaldav/test/test_sharing.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -80,6 +80,8 @@
def __init__(self, cuaddr, test):
if cuaddr.startswith("mailto:"):
name = cuaddr[7:].split('@')[0]
+ elif cuaddr.startswith("urn:x-uid:"):
+ name = cuaddr[10:]
elif cuaddr.startswith("urn:uuid:"):
name = cuaddr[9:]
else:
@@ -324,7 +326,7 @@
self.assertEquals(self._clearUIDElementValue(propInvite), customxml.Invite(
customxml.InviteUser(
customxml.UID.fromString(""),
- davxml.HRef.fromString("urn:uuid:user02"),
+ davxml.HRef.fromString("urn:x-uid:user02"),
customxml.CommonName.fromString("User 02"),
customxml.InviteAccess(customxml.ReadWriteAccess()),
customxml.InviteStatusNoResponse(),
@@ -354,7 +356,7 @@
self.assertEquals(self._clearUIDElementValue(propInvite), customxml.Invite(
customxml.InviteUser(
customxml.UID.fromString(""),
- davxml.HRef.fromString("urn:uuid:user02"),
+ davxml.HRef.fromString("urn:x-uid:user02"),
customxml.CommonName.fromString("User 02"),
customxml.InviteAccess(customxml.ReadWriteAccess()),
customxml.InviteStatusNoResponse(),
@@ -403,7 +405,7 @@
self.assertEquals(self._clearUIDElementValue(propInvite), customxml.Invite(
customxml.InviteUser(
customxml.UID.fromString(""),
- davxml.HRef.fromString("urn:uuid:user02"),
+ davxml.HRef.fromString("urn:x-uid:user02"),
customxml.CommonName.fromString("User 02"),
customxml.InviteAccess(customxml.ReadAccess()),
customxml.InviteStatusNoResponse(),
@@ -478,21 +480,21 @@
self.assertEquals(self._clearUIDElementValue(propInvite), customxml.Invite(
customxml.InviteUser(
customxml.UID.fromString(""),
- davxml.HRef.fromString("urn:uuid:user02"),
+ davxml.HRef.fromString("urn:x-uid:user02"),
customxml.CommonName.fromString("User 02"),
customxml.InviteAccess(customxml.ReadWriteAccess()),
customxml.InviteStatusNoResponse(),
),
customxml.InviteUser(
customxml.UID.fromString(""),
- davxml.HRef.fromString("urn:uuid:user03"),
+ davxml.HRef.fromString("urn:x-uid:user03"),
customxml.CommonName.fromString("User 03"),
customxml.InviteAccess(customxml.ReadWriteAccess()),
customxml.InviteStatusNoResponse(),
),
customxml.InviteUser(
customxml.UID.fromString(""),
- davxml.HRef.fromString("urn:uuid:user04"),
+ davxml.HRef.fromString("urn:x-uid:user04"),
customxml.CommonName.fromString("User 04"),
customxml.InviteAccess(customxml.ReadWriteAccess()),
customxml.InviteStatusNoResponse(),
@@ -536,14 +538,14 @@
self.assertEquals(self._clearUIDElementValue(propInvite), customxml.Invite(
customxml.InviteUser(
customxml.UID.fromString(""),
- davxml.HRef.fromString("urn:uuid:user02"),
+ davxml.HRef.fromString("urn:x-uid:user02"),
customxml.CommonName.fromString("User 02"),
customxml.InviteAccess(customxml.ReadWriteAccess()),
customxml.InviteStatusNoResponse(),
),
customxml.InviteUser(
customxml.UID.fromString(""),
- davxml.HRef.fromString("urn:uuid:user04"),
+ davxml.HRef.fromString("urn:x-uid:user04"),
customxml.CommonName.fromString("User 04"),
customxml.InviteAccess(customxml.ReadWriteAccess()),
customxml.InviteStatusNoResponse(),
@@ -587,14 +589,14 @@
self.assertEquals(self._clearUIDElementValue(propInvite), customxml.Invite(
customxml.InviteUser(
customxml.UID.fromString(""),
- davxml.HRef.fromString("urn:uuid:user02"),
+ davxml.HRef.fromString("urn:x-uid:user02"),
customxml.CommonName.fromString("User 02"),
customxml.InviteAccess(customxml.ReadWriteAccess()),
customxml.InviteStatusNoResponse(),
),
customxml.InviteUser(
customxml.UID.fromString(""),
- davxml.HRef.fromString("urn:uuid:user03"),
+ davxml.HRef.fromString("urn:x-uid:user03"),
customxml.CommonName.fromString("User 03"),
customxml.InviteAccess(customxml.ReadAccess()),
customxml.InviteStatusNoResponse(),
@@ -704,7 +706,7 @@
self.assertEquals(self._clearUIDElementValue(propInvite), customxml.Invite(
customxml.InviteUser(
customxml.UID.fromString(""),
- davxml.HRef.fromString("urn:uuid:user02"),
+ davxml.HRef.fromString("urn:x-uid:user02"),
customxml.CommonName.fromString("User 02"),
customxml.InviteAccess(customxml.ReadWriteAccess()),
customxml.InviteStatusNoResponse(),
@@ -719,7 +721,7 @@
self.assertEquals(self._clearUIDElementValue(propInvite), customxml.Invite(
customxml.InviteUser(
customxml.UID.fromString(""),
- davxml.HRef.fromString("urn:uuid:user02"),
+ davxml.HRef.fromString("urn:x-uid:user02"),
customxml.CommonName.fromString("user02"),
customxml.InviteAccess(customxml.ReadWriteAccess()),
customxml.InviteStatusNoResponse(),
@@ -848,7 +850,7 @@
self.assertEquals(self._clearUIDElementValue(propInvite), customxml.Invite(
customxml.InviteUser(
customxml.UID.fromString(""),
- davxml.HRef.fromString("urn:uuid:user02"),
+ davxml.HRef.fromString("urn:x-uid:user02"),
customxml.CommonName.fromString("User 02"),
customxml.InviteAccess(customxml.ReadWriteAccess()),
customxml.InviteStatusNoResponse(),
@@ -878,7 +880,7 @@
self.assertEquals(self._clearUIDElementValue(propInvite), customxml.Invite(
customxml.InviteUser(
customxml.UID.fromString(""),
- davxml.HRef.fromString("urn:uuid:user02"),
+ davxml.HRef.fromString("urn:x-uid:user02"),
customxml.CommonName.fromString("User 02"),
customxml.InviteAccess(customxml.ReadWriteAccess()),
customxml.InviteStatusNoResponse(),
@@ -922,7 +924,7 @@
self.assertEquals(self._clearUIDElementValue(propInvite), customxml.Invite(
customxml.InviteUser(
customxml.UID.fromString(""),
- davxml.HRef.fromString("urn:uuid:user02"),
+ davxml.HRef.fromString("urn:x-uid:user02"),
customxml.CommonName.fromString("User 02"),
customxml.InviteAccess(customxml.ReadWriteAccess()),
customxml.InviteStatusNoResponse(),
Modified: CalendarServer/trunk/twistedcaldav/test/test_upgrade.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/test/test_upgrade.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/twistedcaldav/test/test_upgrade.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -1537,13 +1537,13 @@
records = {
"mailto:a at example.com":
- StubRecord(("User A",), u"123", ("mailto:a at example.com", "urn:uuid:123")),
+ StubRecord(("User A",), u"123", ("mailto:a at example.com", "urn:x-uid:123")),
"mailto:b at example.com":
- StubRecord(("User B",), u"234", ("mailto:b at example.com", "urn:uuid:234")),
+ StubRecord(("User B",), u"234", ("mailto:b at example.com", "urn:x-uid:234")),
"/principals/users/a":
- StubRecord(("User A",), u"123", ("mailto:a at example.com", "urn:uuid:123")),
+ StubRecord(("User A",), u"123", ("mailto:a at example.com", "urn:x-uid:123")),
"/principals/users/b":
- StubRecord(("User B",), u"234", ("mailto:b at example.com", "urn:uuid:234")),
+ StubRecord(("User B",), u"234", ("mailto:b at example.com", "urn:x-uid:234")),
}
directory = StubDirectory()
@@ -1681,17 +1681,18 @@
DTSTART;TZID=US/Pacific:20090203T120000
DTEND;TZID=US/Pacific:20090203T130000
ATTENDEE;CN=Wilfredo Sanchez;CUTYPE=INDIVIDUAL;EMAIL=wsanchez at example.com;
- PARTSTAT=ACCEPTED:urn:uuid:6423F94A-6B76-4A3A-815B-D52CFD77935D
+ PARTSTAT=ACCEPTED:urn:x-uid:6423F94A-6B76-4A3A-815B-D52CFD77935D
ATTENDEE;CN=Double 'quotey' Quotes;CUTYPE=INDIVIDUAL;EMAIL=doublequotes at ex
- ample.com;PARTSTAT=ACCEPTED:urn:uuid:8E04787E-336D-41ED-A70B-D233AD0DCE6F
+ ample.com;PARTSTAT=ACCEPTED:urn:x-uid:8E04787E-336D-41ED-A70B-D233AD0DCE6
+ F
ATTENDEE;CN=Cyrus Daboo;CUTYPE=INDIVIDUAL;EMAIL=cdaboo at example.com;PARTSTA
- T=ACCEPTED;ROLE=REQ-PARTICIPANT:urn:uuid:5A985493-EE2C-4665-94CF-4DFEA3A8
- 9500
+ T=ACCEPTED;ROLE=REQ-PARTICIPANT:urn:x-uid:5A985493-EE2C-4665-94CF-4DFEA3A
+ 89500
CREATED:20090203T181910Z
DESCRIPTION:This has " Bad Quotes " in it
DTSTAMP:20090203T181924Z
-ORGANIZER;CN=Cyrus Daboo;EMAIL=cdaboo at example.com:urn:uuid:5A985493-EE2C-4
- 665-94CF-4DFEA3A89500
+ORGANIZER;CN=Cyrus Daboo;EMAIL=cdaboo at example.com:urn:x-uid:5A985493-EE2C-
+ 4665-94CF-4DFEA3A89500
SEQUENCE:2
SUMMARY:New Event
TRANSP:OPAQUE
Modified: CalendarServer/trunk/twistedcaldav/upgrade.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/upgrade.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/twistedcaldav/upgrade.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -587,7 +587,8 @@
@inlineCallbacks
def normalizeCUAddrs(data, directory, cuaCache):
"""
- Normalize calendar user addresses to urn:uuid: form.
+ Normalize calendar user addresses in data. Cache CUA lookup results for
+ great speed.
@param data: the calendar data to convert
@type data: C{str}
@@ -1310,7 +1311,7 @@
txn = request._newStoreTransaction
ownerPrincipal = principal
- cua = "urn:uuid:%s" % (uuid,)
+ cua = "urn:x-uid:%s" % (uuid,)
owner = LocalCalendarUser(
cua, ownerPrincipal,
inbox, ownerPrincipal.scheduleInboxURL()
Modified: CalendarServer/trunk/txdav/caldav/datastore/scheduling/imip/inbound.py
===================================================================
--- CalendarServer/trunk/txdav/caldav/datastore/scheduling/imip/inbound.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/txdav/caldav/datastore/scheduling/imip/inbound.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -327,9 +327,9 @@
fromAddr = attendee[7:]
if organizer.startswith("mailto:"):
toAddr = organizer[7:]
- elif organizer.startswith("urn:uuid:"):
- guid = organizer[9:]
- record = yield self.directory.recordWithGUID(guid)
+ elif organizer.startswith("urn:x-uid:"):
+ uid = organizer[10:]
+ record = yield self.directory.recordWithUID(uid)
try:
if record and record.emailAddresses:
toAddr = list(record.emailAddresses)[0]
Modified: CalendarServer/trunk/txdav/caldav/datastore/scheduling/implicit.py
===================================================================
--- CalendarServer/trunk/txdav/caldav/datastore/scheduling/implicit.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/txdav/caldav/datastore/scheduling/implicit.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -633,7 +633,7 @@
self.calendar.sequenceInSync(self.oldcalendar)
# Significant change
- no_change, self.changed_rids, self.needs_action_rids, reinvites, recurrence_reschedule, status_cancelled, only_status = yield self.isOrganizerChangeInsignificant()
+ no_change, self.changed_rids, self.needs_action_rids, reinvites, recurrence_reschedule, status_cancelled, only_status = self.isOrganizerChangeInsignificant()
if no_change:
if reinvites:
log.debug("Implicit - organizer '{organizer}' is re-inviting UID: '{uid}', attendees: {attendees}", organizer=self.organizer, uid=self.uid, attendees=", ".join(reinvites))
@@ -721,7 +721,6 @@
pass
- @inlineCallbacks
def isOrganizerChangeInsignificant(self):
rids = None
@@ -812,16 +811,8 @@
only_status = False
if checkOrganizerValue:
- @inlineCallbacks
- def _normalizeCUAddress(addr):
- if not addr.startswith("urn:uuid"):
- principal = yield self.calendar_home.directoryService().recordWithCalendarUserAddress(addr)
- if principal is not None:
- addr = principal.canonicalCalendarUserAddress()
- returnValue(addr)
-
- oldOrganizer = yield _normalizeCUAddress(self.oldcalendar.getOrganizer())
- newOrganizer = yield _normalizeCUAddress(self.calendar.getOrganizer())
+ oldOrganizer = self.oldcalendar.getOrganizer()
+ newOrganizer = self.calendar.getOrganizer()
if oldOrganizer != newOrganizer:
log.error("Cannot change ORGANIZER: UID:{uid}", uid=self.uid)
raise HTTPError(ErrorResponse(
@@ -839,10 +830,10 @@
except KeyError:
pass
- returnValue((
+ return (
no_change, rids, date_changed_rids, reinvites,
recurrence_reschedule, status_cancelled, only_status
- ))
+ )
def findRemovedAttendees(self):
Modified: CalendarServer/trunk/txdav/caldav/datastore/scheduling/ischedule/delivery.py
===================================================================
--- CalendarServer/trunk/txdav/caldav/datastore/scheduling/ischedule/delivery.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/txdav/caldav/datastore/scheduling/ischedule/delivery.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -359,7 +359,7 @@
# The Originator must be the ORGANIZER (for a request) or ATTENDEE (for a reply)
originator = self.scheduler.organizer.cuaddr if self.scheduler.isiTIPRequest else self.scheduler.attendee
if self.server.unNormalizeAddresses:
- originator = yield normalizeCUAddress(originator, normalizationLookup, self.scheduler.txn.directoryService().recordWithCalendarUserAddress, toUUID=False)
+ originator = yield normalizeCUAddress(originator, normalizationLookup, self.scheduler.txn.directoryService().recordWithCalendarUserAddress, toCanonical=False)
self.headers.addRawHeader("Originator", utf8String(originator))
self.sign_headers.append("Originator")
@@ -417,7 +417,7 @@
yield normalizedCalendar.normalizeCalendarUserAddresses(
normalizationLookup,
self.scheduler.txn.directoryService().recordWithCalendarUserAddress,
- toUUID=False)
+ toCanonical=False)
# For VFREEBUSY we need to strip out ATTENDEEs that do not match the recipient list
if self.scheduler.isfreebusy:
Modified: CalendarServer/trunk/txdav/caldav/datastore/scheduling/test/test_implicit.py
===================================================================
--- CalendarServer/trunk/txdav/caldav/datastore/scheduling/test/test_implicit.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/txdav/caldav/datastore/scheduling/test/test_implicit.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -1295,7 +1295,8 @@
cobj = yield self.calendarObjectUnderTest(home="user01", name="test.ics")
comp = yield cobj.component()
- self.assertTrue(comp.getOrganizer().startswith("mailto:"))
+ # Because CUA normalization happens in component() now too...
+ self.assertTrue(comp.getOrganizer().startswith("urn:x-uid:"))
self.assertFalse(comp.getOrganizerScheduleAgent())
cobj = yield self.calendarObjectUnderTest(home="user01", name="test.ics")
@@ -1304,7 +1305,7 @@
cobj = yield self.calendarObjectUnderTest(home="user01", name="test.ics")
comp = yield cobj.component()
- self.assertTrue(comp.getOrganizer().startswith("urn:uuid:"))
+ self.assertTrue(comp.getOrganizer().startswith("urn:x-uid:"))
self.assertTrue(comp.getOrganizerScheduleAgent())
Modified: CalendarServer/trunk/txdav/caldav/datastore/sql.py
===================================================================
--- CalendarServer/trunk/txdav/caldav/datastore/sql.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/txdav/caldav/datastore/sql.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -3047,6 +3047,14 @@
# Fix any bogus data we can
fixed, unfixed = component.validCalendarData(doFix=True, doRaise=False)
+ # Normalize CUAs:
+ # FIXME: update the DB copy as well so we don't keep going through
+ # this normalization?
+ yield component.normalizeCalendarUserAddresses(
+ normalizationLookup,
+ self.directoryService().recordWithCalendarUserAddress
+ )
+
if unfixed:
self.log.error(
"Calendar data id={0} had unfixable problems:\n {1}".format(
Modified: CalendarServer/trunk/txdav/caldav/datastore/test/test_implicit.py
===================================================================
--- CalendarServer/trunk/txdav/caldav/datastore/test/test_implicit.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/txdav/caldav/datastore/test/test_implicit.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -103,8 +103,8 @@
calendar_resource1 = (yield self.calendarObjectUnderTest(name="test.ics", home="user01",))
calendar1 = (yield calendar_resource1.component())
calendar1 = str(calendar1).replace("\r\n ", "")
- self.assertTrue("urn:uuid:user01" in calendar1)
- self.assertTrue("urn:uuid:user02" in calendar1)
+ self.assertTrue("urn:x-uid:user01" in calendar1)
+ self.assertTrue("urn:x-uid:user02" in calendar1)
self.assertTrue("CN=" in calendar1)
yield self.commit()
@@ -543,7 +543,7 @@
DTSTAMP:20080601T120000Z
DTSTART:20080601T120000Z
DTEND:20080601T130000Z
-X-CALENDARSERVER-ATTENDEE-COMMENT;X-CALENDARSERVER-ATTENDEE-REF="urn:uuid:user01";
+X-CALENDARSERVER-ATTENDEE-COMMENT;X-CALENDARSERVER-ATTENDEE-REF="urn:x-uid:user01";
X-CALENDARSERVER-DTSTAMP=20131101T100000Z:Someone else's comment
END:VEVENT
END:VCALENDAR
@@ -577,7 +577,7 @@
calendar_resource = (yield self.calendarObjectUnderTest(name="test.ics", home="user01",))
calendar1 = (yield calendar_resource.component())
calendar1 = str(calendar1).replace("\r\n ", "")
- self.assertTrue("X-CALENDARSERVER-ATTENDEE-COMMENT;X-CALENDARSERVER-ATTENDEE-REF=\"urn:uuid:user01\";X-CALENDARSERVER-DTSTAMP=20131101T100000Z:Someone else's comment" in calendar1)
+ self.assertTrue("X-CALENDARSERVER-ATTENDEE-COMMENT;X-CALENDARSERVER-ATTENDEE-REF=\"urn:x-uid:user01\";X-CALENDARSERVER-DTSTAMP=20131101T100000Z:Someone else's comment" in calendar1)
self.assertTrue("SUMMARY:Changed" in calendar1)
yield self.commit()
Modified: CalendarServer/trunk/txdav/caldav/datastore/test/test_queue_scheduling.py
===================================================================
--- CalendarServer/trunk/txdav/caldav/datastore/test/test_queue_scheduling.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/txdav/caldav/datastore/test/test_queue_scheduling.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -122,10 +122,10 @@
UID:12345-67890
DTSTART:{now}T000000Z
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
SUMMARY:1
END:VEVENT
END:VCALENDAR
@@ -139,10 +139,10 @@
UID:12345-67890
DTSTART:{now}T000000Z
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
SUMMARY:1
END:VEVENT
END:VCALENDAR
@@ -155,10 +155,10 @@
UID:12345-67890
DTSTART:{now}T000000Z
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
SUMMARY:1
TRANSP:TRANSPARENT
END:VEVENT
@@ -172,10 +172,10 @@
UID:12345-67890
DTSTART:{now}T000000Z
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
SUMMARY:1
END:VEVENT
END:VCALENDAR
@@ -188,10 +188,10 @@
UID:12345-67890
DTSTART:{now}T000000Z
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
SUMMARY:1
END:VEVENT
END:VCALENDAR
@@ -205,9 +205,9 @@
UID:12345-67890
DTSTART:{now}T000000Z
DURATION:PT1H
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user02
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
SUMMARY:1
REQUEST-STATUS:2.0;Success
END:VEVENT
@@ -221,10 +221,10 @@
UID:12345-67890
DTSTART:{now}T000000Z
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com;SCHEDULE-STATUS=1.2:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com;SCHEDULE-STATUS=1.2:urn:x-uid:user01
SUMMARY:1
END:VEVENT
END:VCALENDAR
Modified: CalendarServer/trunk/txdav/caldav/datastore/test/test_sql.py
===================================================================
--- CalendarServer/trunk/txdav/caldav/datastore/test/test_sql.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/txdav/caldav/datastore/test/test_sql.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -2022,10 +2022,10 @@
UID:12345-67890
DTSTART:20130806T000000Z
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RRULE:FREQ=DAILY
SUMMARY:1
END:VEVENT
@@ -2034,10 +2034,10 @@
RECURRENCE-ID:20130807T120000Z
DTSTART:20130807T000000Z
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
SUMMARY:1
END:VEVENT
END:VCALENDAR
@@ -2050,10 +2050,10 @@
UID:12345-67890
DTSTART:20130806T000000Z
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RRULE:FREQ=DAILY
SEQUENCE:1
SUMMARY:1-2
@@ -2063,10 +2063,10 @@
RECURRENCE-ID:20130807T000000Z
DTSTART:20130807T000000Z
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
SEQUENCE:1
SUMMARY:1-3
END:VEVENT
@@ -2080,10 +2080,10 @@
UID:12345-67890
DTSTART:20130806T000000Z
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RRULE:FREQ=DAILY
SEQUENCE:1
SUMMARY:1-2
@@ -2093,10 +2093,10 @@
RECURRENCE-ID:20130807T000000Z
DTSTART:20130807T000000Z
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
SEQUENCE:1
SUMMARY:1-3
END:VEVENT
@@ -2160,12 +2160,12 @@
DTSTART;TZID=America/Los_Angeles:20131211T164500
DTEND;TZID=America/Los_Angeles:20131211T174500
ATTENDEE;CN=Conference Room One;CUTYPE=ROOM;PARTSTAT=ACCEPTED;ROLE=REQ-PARTICIPAN
- T;SCHEDULE-STATUS=2.0:urn:uuid:room1
+ T;SCHEDULE-STATUS=2.0:urn:x-uid:room1
ATTENDEE;CN=User 01;CUTYPE=INDIVIDUAL;EMAIL=user01 at example.com;PARTSTAT=AC
- CEPTED:urn:uuid:user01
+ CEPTED:urn:x-uid:user01
CREATED:20131211T221854Z
DTSTAMP:20131211T230632Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RRULE:FREQ=DAILY;COUNT=5
SEQUENCE:8
SUMMARY:locations
@@ -2177,12 +2177,12 @@
DTSTART;TZID=America/Los_Angeles:20131214T160000
DTEND;TZID=America/Los_Angeles:20131214T170000
ATTENDEE;CN=Conference Room Two;CUTYPE=ROOM;PARTSTAT=ACCEPTED;ROLE=REQ-PARTICIPAN
- T;SCHEDULE-STATUS=2.0:urn:uuid:room2
+ T;SCHEDULE-STATUS=2.0:urn:x-uid:room2
ATTENDEE;CN=User 01;CUTYPE=INDIVIDUAL;EMAIL=user01 at example.com;PARTSTAT=AC
- CEPTED:urn:uuid:user01
+ CEPTED:urn:x-uid:user01
CREATED:20131211T221854Z
DTSTAMP:20131211T230632Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
SEQUENCE:8
SUMMARY:locations
TRANSP:OPAQUE
@@ -2571,11 +2571,11 @@
UID:12345-67890
DTSTART:%(now_back14)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user02
-ATTENDEE;CN=User 03;EMAIL=user03 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user03
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
+ATTENDEE;CN=User 03;EMAIL=user03 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user03
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY
SEQUENCE:1
@@ -2589,10 +2589,10 @@
RECURRENCE-ID:%(now_fwd10)s
DTSTART:%(now_fwd10)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 05;EMAIL=user05 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user05
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 05;EMAIL=user05 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user05
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:1
END:VEVENT
@@ -2606,11 +2606,11 @@
UID:%(relID)s
DTSTART:%(now_back30)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user02
-ATTENDEE;CN=User 03;EMAIL=user03 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user03
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
+ATTENDEE;CN=User 03;EMAIL=user03 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user03
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY;UNTIL=%(now_back14_1)s
SEQUENCE:1
@@ -2624,11 +2624,11 @@
RECURRENCE-ID:%(now_back25)s
DTSTART:%(now_back25)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user02
-ATTENDEE;CN=User 04;EMAIL=user04 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user04
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
+ATTENDEE;CN=User 04;EMAIL=user04 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user04
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:1
END:VEVENT
@@ -2637,10 +2637,10 @@
RECURRENCE-ID:%(now_back24)s
DTSTART:%(now_back24)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:1
END:VEVENT
@@ -2654,12 +2654,12 @@
UID:12345-67890
DTSTART:%(now_back14)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
-ATTENDEE;CN=User 03;EMAIL=user03 at example.com;RSVP=TRUE:urn:uuid:user03
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
+ATTENDEE;CN=User 03;EMAIL=user03 at example.com;RSVP=TRUE:urn:x-uid:user03
DTSTAMP:20051222T210507Z
EXDATE:%(now_fwd10)s
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY
SEQUENCE:1
@@ -2685,11 +2685,11 @@
UID:%(relID)s
DTSTART:%(now_back30)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
-ATTENDEE;CN=User 03;EMAIL=user03 at example.com;RSVP=TRUE:urn:uuid:user03
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
+ATTENDEE;CN=User 03;EMAIL=user03 at example.com;RSVP=TRUE:urn:x-uid:user03
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY;UNTIL=%(now_back14_1)s
SEQUENCE:1
@@ -2703,11 +2703,11 @@
RECURRENCE-ID:%(now_back25)s
DTSTART:%(now_back25)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
-ATTENDEE;CN=User 04;EMAIL=user04 at example.com;RSVP=TRUE:urn:uuid:user04
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
+ATTENDEE;CN=User 04;EMAIL=user04 at example.com;RSVP=TRUE:urn:x-uid:user04
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:1
END:VEVENT
@@ -2716,10 +2716,10 @@
RECURRENCE-ID:%(now_back24)s
DTSTART:%(now_back24)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:1
END:VEVENT
@@ -2741,12 +2741,12 @@
UID:12345-67890
DTSTART:%(now_back14)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
-ATTENDEE;CN=User 03;EMAIL=user03 at example.com;RSVP=TRUE:urn:uuid:user03
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
+ATTENDEE;CN=User 03;EMAIL=user03 at example.com;RSVP=TRUE:urn:x-uid:user03
DTSTAMP:20051222T210507Z
EXDATE:%(now_fwd10)s
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY
SEQUENCE:1
@@ -2765,12 +2765,12 @@
UID:12345-67890
DTSTART:%(now_back14)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
-ATTENDEE;CN=User 03;EMAIL=user03 at example.com;RSVP=TRUE:urn:uuid:user03
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
+ATTENDEE;CN=User 03;EMAIL=user03 at example.com;RSVP=TRUE:urn:x-uid:user03
DTSTAMP:20051222T210507Z
EXDATE:%(now_fwd10)s
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY
SEQUENCE:1
@@ -2796,13 +2796,13 @@
UID:%(relID)s
DTSTART:%(now_back30)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
-ATTENDEE;CN=User 03;EMAIL=user03 at example.com;RSVP=TRUE:urn:uuid:user03
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
+ATTENDEE;CN=User 03;EMAIL=user03 at example.com;RSVP=TRUE:urn:x-uid:user03
DTSTAMP:20051222T210507Z
EXDATE:%(now_back25)s
EXDATE:%(now_back24)s
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY;UNTIL=%(now_back14_1)s
SEQUENCE:1
@@ -2829,12 +2829,12 @@
UID:12345-67890
DTSTART:%(now_back14)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
-ATTENDEE;CN=User 03;EMAIL=user03 at example.com;RSVP=TRUE:urn:uuid:user03
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
+ATTENDEE;CN=User 03;EMAIL=user03 at example.com;RSVP=TRUE:urn:x-uid:user03
DTSTAMP:20051222T210507Z
EXDATE:%(now_fwd10)s
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY
SEQUENCE:1
@@ -2854,11 +2854,11 @@
RECURRENCE-ID:%(now_back25)s
DTSTART:%(now_back25)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
-ATTENDEE;CN=User 04;EMAIL=user04 at example.com;RSVP=TRUE:urn:uuid:user04
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
+ATTENDEE;CN=User 04;EMAIL=user04 at example.com;RSVP=TRUE:urn:x-uid:user04
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:1
END:VEVENT
@@ -2881,10 +2881,10 @@
RECURRENCE-ID:%(now_fwd10)s
DTSTART:%(now_fwd10)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 05;EMAIL=user05 at example.com;RSVP=TRUE:urn:uuid:user05
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 05;EMAIL=user05 at example.com;RSVP=TRUE:urn:x-uid:user05
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:1
END:VEVENT
@@ -2908,10 +2908,10 @@
RECURRENCE-ID:%(now_fwd10)s
DTSTART:%(now_fwd10)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 05;EMAIL=user05 at example.com;RSVP=TRUE:urn:uuid:user05
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 05;EMAIL=user05 at example.com;RSVP=TRUE:urn:x-uid:user05
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:1
END:VEVENT
@@ -3188,10 +3188,10 @@
UID:12345-67890
DTSTART:%(now_back30)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RRULE:FREQ=DAILY
SUMMARY:1234567890123456789012345678901234567890
1234567890123456789012345678901234567890
@@ -3208,10 +3208,10 @@
UID:12345-67890
DTSTART:%(now_back30)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RRULE:FREQ=DAILY
SUMMARY:1234567890123456789012345678901234567890
1234567890123456789012345678901234567890
@@ -3235,10 +3235,10 @@
UID:12345-67890
DTSTART:%(now_back30)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RRULE:FREQ=DAILY
SUMMARY:1234567890123456789012345678901234567890
1234567890123456789012345678901234567890
@@ -3251,10 +3251,10 @@
RECURRENCE-ID:%(now_back25)s
DTSTART:%(now_back25)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
SUMMARY:1234567890123456789012345678901234567890
1234567890123456789012345678901234567890
1234567890123456789012345678901234567890
@@ -3270,10 +3270,10 @@
RECURRENCE-ID:%(now_fwd10)s
DTSTART:%(now_fwd10)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
SUMMARY:1234567890123456789012345678901234567890
1234567890123456789012345678901234567890
1234567890123456789012345678901234567890
@@ -3294,10 +3294,10 @@
UID:12345-67890
DTSTART:%(now_back30)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RRULE:FREQ=DAILY
SUMMARY:1234567890123456789012345678901234567890
1234567890123456789012345678901234567890
@@ -3459,10 +3459,10 @@
DTSTART:%(now_back30)s
DURATION:PT1H
ATTACH;FILENAME=new.attachment;FMTTYPE=text/x-fixture;MANAGED-ID=%(mid)s;SIZE=14:%(att_uri)s
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
DTSTAMP:%(dtstamp)s
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RRULE:FREQ=DAILY
SEQUENCE:1
END:VEVENT
@@ -3477,10 +3477,10 @@
DTSTART:%(now_back30)s
DURATION:PT1H
ATTACH;FILENAME=new.attachment;FMTTYPE=text/x-fixture;MANAGED-ID=%(mid)s;SIZE=14:%(att_uri)s
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
DTSTAMP:%(dtstamp)s
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RRULE:FREQ=DAILY
SEQUENCE:1
SUMMARY:1234567890123456789012345678901234567890
@@ -3494,10 +3494,10 @@
DTSTART:%(now_back25)s
DURATION:PT1H
ATTACH;FILENAME=new.attachment;FMTTYPE=text/x-fixture;MANAGED-ID=%(mid)s;SIZE=14:%(att_uri)s
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
DTSTAMP:%(dtstamp)s
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
SEQUENCE:1
END:VEVENT
BEGIN:VEVENT
@@ -3506,10 +3506,10 @@
DTSTART:%(now_back24)s
DURATION:PT1H
ATTACH;FILENAME=new.attachment;FMTTYPE=text/x-fixture;MANAGED-ID=%(mid)s;SIZE=14:%(att_uri)s
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
DTSTAMP:%(dtstamp)s
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
SEQUENCE:1
END:VEVENT
BEGIN:VEVENT
@@ -3518,10 +3518,10 @@
DTSTART:%(now_fwd10)s
DURATION:PT1H
ATTACH;FILENAME=new.attachment;FMTTYPE=text/x-fixture;MANAGED-ID=%(mid)s;SIZE=14:%(att_uri)s
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
DTSTAMP:%(dtstamp)s
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
SEQUENCE:1
END:VEVENT
END:VCALENDAR
@@ -3535,10 +3535,10 @@
DTSTART:%(now_back14)s
DURATION:PT1H
ATTACH;FILENAME=new.attachment;FMTTYPE=text/x-fixture;MANAGED-ID=%(mid)s;SIZE=14:%(att_uri)s
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
DTSTAMP:%(dtstamp)s
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY
SEQUENCE:3
@@ -3553,10 +3553,10 @@
DTSTART:%(now_fwd10)s
DURATION:PT1H
ATTACH;FILENAME=new.attachment;FMTTYPE=text/x-fixture;MANAGED-ID=%(mid)s;SIZE=14:%(att_uri)s
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
DTSTAMP:%(dtstamp)s
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:3
END:VEVENT
@@ -3571,10 +3571,10 @@
DTSTART:%(now_back30)s
DURATION:PT1H
ATTACH;FILENAME=new.attachment;FMTTYPE=text/x-fixture;MANAGED-ID=%(past_mid)s;SIZE=14:%(att_past_uri)s
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
DTSTAMP:%(dtstamp)s
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY;UNTIL=%(now_back14_1)s
SEQUENCE:3
@@ -3589,10 +3589,10 @@
DTSTART:%(now_back25)s
DURATION:PT1H
ATTACH;FILENAME=new.attachment;FMTTYPE=text/x-fixture;MANAGED-ID=%(past_mid)s;SIZE=14:%(att_past_uri)s
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
DTSTAMP:%(dtstamp)s
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:3
END:VEVENT
@@ -3602,10 +3602,10 @@
DTSTART:%(now_back24)s
DURATION:PT1H
ATTACH;FILENAME=new.attachment;FMTTYPE=text/x-fixture;MANAGED-ID=%(past_mid)s;SIZE=14:%(att_past_uri)s
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
DTSTAMP:%(dtstamp)s
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:3
END:VEVENT
@@ -3620,10 +3620,10 @@
DTSTART:%(now_back14)s
DURATION:PT1H
ATTACH;FILENAME=new.attachment;FMTTYPE=text/x-fixture;MANAGED-ID=%(mid)s;SIZE=14:%(att_uri)s
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:%(dtstamp)s
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY
SEQUENCE:3
@@ -3638,10 +3638,10 @@
DTSTART:%(now_fwd10)s
DURATION:PT1H
ATTACH;FILENAME=new.attachment;FMTTYPE=text/x-fixture;MANAGED-ID=%(mid)s;SIZE=14:%(att_uri)s
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:%(dtstamp)s
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:3
END:VEVENT
@@ -3663,10 +3663,10 @@
DTSTART:%(now_back30)s
DURATION:PT1H
ATTACH;FILENAME=new.attachment;FMTTYPE=text/x-fixture;MANAGED-ID=%(past_mid)s;SIZE=14:%(att_past_uri)s
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:%(dtstamp)s
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY;UNTIL=%(now_back14_1)s
SEQUENCE:3
@@ -3681,10 +3681,10 @@
DTSTART:%(now_back25)s
DURATION:PT1H
ATTACH;FILENAME=new.attachment;FMTTYPE=text/x-fixture;MANAGED-ID=%(past_mid)s;SIZE=14:%(att_past_uri)s
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:%(dtstamp)s
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:3
END:VEVENT
@@ -3694,10 +3694,10 @@
DTSTART:%(now_back24)s
DURATION:PT1H
ATTACH;FILENAME=new.attachment;FMTTYPE=text/x-fixture;MANAGED-ID=%(past_mid)s;SIZE=14:%(att_past_uri)s
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:%(dtstamp)s
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:3
END:VEVENT
@@ -3913,7 +3913,7 @@
DTSTART:%(now_back14)s
DURATION:PT1H
ATTENDEE;PARTSTAT=ACCEPTED:mailto:cuser01 at example.org
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
DTSTAMP:20051222T210507Z
ORGANIZER;SCHEDULE-AGENT=NONE:mailto:cuser01 at example.org
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:C4526F4C-4324-4893-B769-BD766E4A4E7C
@@ -3930,7 +3930,7 @@
DTSTART:%(now_fwd10)s
DURATION:PT1H
ATTENDEE;PARTSTAT=TENTATIVE:mailto:cuser01 at example.org
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=TENTATIVE:urn:uuid:user01
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=TENTATIVE:urn:x-uid:user01
DTSTAMP:20051222T210507Z
ORGANIZER;SCHEDULE-AGENT=NONE:mailto:cuser01 at example.org
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:C4526F4C-4324-4893-B769-BD766E4A4E7C
@@ -3966,7 +3966,7 @@
DTSTART:%(now_back30)s
DURATION:PT1H
ATTENDEE;PARTSTAT=ACCEPTED:mailto:cuser01 at example.org
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
DTSTAMP:20051222T210507Z
ORGANIZER;SCHEDULE-AGENT=NONE:mailto:cuser01 at example.org
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:C4526F4C-4324-4893-B769-BD766E4A4E7C
@@ -3983,7 +3983,7 @@
DTSTART:%(now_back25)s
DURATION:PT1H
ATTENDEE;PARTSTAT=TENTATIVE:mailto:cuser01 at example.org
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=NEEDS-ACTION:urn:uuid:user01
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=NEEDS-ACTION:urn:x-uid:user01
DTSTAMP:20051222T210507Z
ORGANIZER;SCHEDULE-AGENT=NONE:mailto:cuser01 at example.org
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:C4526F4C-4324-4893-B769-BD766E4A4E7C
@@ -3995,7 +3995,7 @@
DTSTART:%(now_back24)s
DURATION:PT1H
ATTENDEE;PARTSTAT=DECLINED:mailto:cuser01 at example.org
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=DECLINED:urn:uuid:user01
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=DECLINED:urn:x-uid:user01
DTSTAMP:20051222T210507Z
ORGANIZER;SCHEDULE-AGENT=NONE:mailto:cuser01 at example.org
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:C4526F4C-4324-4893-B769-BD766E4A4E7C
@@ -4044,7 +4044,7 @@
DTSTART:%(now_back30)s
DURATION:PT1H
ATTENDEE;PARTSTAT=ACCEPTED:mailto:cuser01 at example.org
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
DTSTAMP:20051222T210507Z
ORGANIZER;SCHEDULE-AGENT=NONE:mailto:cuser01 at example.org
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:C4526F4C-4324-4893-B769-BD766E4A4E7C
@@ -4061,7 +4061,7 @@
DTSTART:%(now_back25)s
DURATION:PT1H
ATTENDEE;PARTSTAT=TENTATIVE:mailto:cuser01 at example.org
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=NEEDS-ACTION:urn:uuid:user01
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=NEEDS-ACTION:urn:x-uid:user01
DTSTAMP:20051222T210507Z
ORGANIZER;SCHEDULE-AGENT=NONE:mailto:cuser01 at example.org
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:C4526F4C-4324-4893-B769-BD766E4A4E7C
@@ -4073,7 +4073,7 @@
DTSTART:%(now_back24)s
DURATION:PT1H
ATTENDEE;PARTSTAT=DECLINED:mailto:cuser01 at example.org
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=DECLINED:urn:uuid:user01
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=DECLINED:urn:x-uid:user01
DTSTAMP:20051222T210507Z
ORGANIZER;SCHEDULE-AGENT=NONE:mailto:cuser01 at example.org
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:C4526F4C-4324-4893-B769-BD766E4A4E7C
@@ -4096,7 +4096,7 @@
processor.recipient_calendar = (yield cobj.componentForUser("user01"))
processor.message = Component.fromString(itip1 % self.subs)
processor.originator = RemoteCalendarUser("mailto:cuser01 at example.org")
- processor.recipient = LocalCalendarUser("urn:uuid:user01", None)
+ processor.recipient = LocalCalendarUser("urn:x-uid:user01", None)
processor.method = "REQUEST"
processor.uid = "12345-67890"
@@ -4143,7 +4143,7 @@
processor.recipient_calendar = (yield cobj.componentForUser("user01"))
processor.message = Component.fromString(itip2 % self.subs)
processor.originator = RemoteCalendarUser("mailto:cuser01 at example.org")
- processor.recipient = LocalCalendarUser("urn:uuid:user01", None)
+ processor.recipient = LocalCalendarUser("urn:x-uid:user01", None)
processor.method = "REQUEST"
processor.uid = "C4526F4C-4324-4893-B769-BD766E4A4E7C"
@@ -4217,7 +4217,7 @@
DTSTART:%(now_back25)s
DURATION:PT1H
ATTENDEE;PARTSTAT=TENTATIVE:mailto:cuser01 at example.org
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=NEEDS-ACTION:urn:uuid:user01
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=NEEDS-ACTION:urn:x-uid:user01
DTSTAMP:20051222T210507Z
ORGANIZER;SCHEDULE-AGENT=NONE:mailto:cuser01 at example.org
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:C4526F4C-4324-4893-B769-BD766E4A4E7C
@@ -4253,7 +4253,7 @@
processor.recipient_calendar = (yield cobj.componentForUser("user01"))
processor.message = Component.fromString(itip1 % self.subs)
processor.originator = RemoteCalendarUser("mailto:cuser01 at example.org")
- processor.recipient = LocalCalendarUser("urn:uuid:user01", None)
+ processor.recipient = LocalCalendarUser("urn:x-uid:user01", None)
processor.method = "CANCEL"
processor.uid = "12345-67890"
@@ -4336,7 +4336,7 @@
DTSTART:%(now_fwd10)s
DURATION:PT1H
ATTENDEE;PARTSTAT=TENTATIVE:mailto:cuser01 at example.org
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=TENTATIVE:urn:uuid:user01
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=TENTATIVE:urn:x-uid:user01
DTSTAMP:20051222T210507Z
ORGANIZER;SCHEDULE-AGENT=NONE:mailto:cuser01 at example.org
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:C4526F4C-4324-4893-B769-BD766E4A4E7C
@@ -4371,7 +4371,7 @@
processor.recipient_calendar = (yield cobj.componentForUser("user01"))
processor.message = Component.fromString(itip1 % self.subs)
processor.originator = RemoteCalendarUser("mailto:cuser01 at example.org")
- processor.recipient = LocalCalendarUser("urn:uuid:user01", None)
+ processor.recipient = LocalCalendarUser("urn:x-uid:user01", None)
processor.method = "REQUEST"
processor.uid = "12345-67890"
@@ -4475,7 +4475,7 @@
DTSTART:%(now_fwd10)s
DURATION:PT1H
ATTENDEE;PARTSTAT=TENTATIVE:mailto:cuser01 at example.org
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=TENTATIVE:urn:uuid:user01
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=TENTATIVE:urn:x-uid:user01
DTSTAMP:20051222T210507Z
ORGANIZER;SCHEDULE-AGENT=NONE:mailto:cuser01 at example.org
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:C4526F4C-4324-4893-B769-BD766E4A4E7C
@@ -4505,7 +4505,7 @@
DTSTART:%(now_back25)s
DURATION:PT1H
ATTENDEE;PARTSTAT=TENTATIVE:mailto:cuser01 at example.org
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=NEEDS-ACTION:urn:uuid:user01
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=NEEDS-ACTION:urn:x-uid:user01
DTSTAMP:20051222T210507Z
ORGANIZER;SCHEDULE-AGENT=NONE:mailto:cuser01 at example.org
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:C4526F4C-4324-4893-B769-BD766E4A4E7C
@@ -4541,7 +4541,7 @@
processor.recipient_calendar = (yield cobj.componentForUser("user01"))
processor.message = Component.fromString(itip1 % self.subs)
processor.originator = RemoteCalendarUser("mailto:cuser01 at example.org")
- processor.recipient = LocalCalendarUser("urn:uuid:user01", None)
+ processor.recipient = LocalCalendarUser("urn:x-uid:user01", None)
processor.method = "REQUEST"
processor.uid = "12345-67890"
@@ -4697,7 +4697,7 @@
DTSTART:%(now_back30)s
DURATION:PT1H
ATTENDEE;PARTSTAT=ACCEPTED:mailto:cuser01 at example.org
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
DTSTAMP:20051222T210507Z
ORGANIZER;SCHEDULE-AGENT=NONE:mailto:cuser01 at example.org
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:C4526F4C-4324-4893-B769-BD766E4A4E7C
@@ -4714,7 +4714,7 @@
DTSTART:%(now_back25)s
DURATION:PT1H
ATTENDEE;PARTSTAT=TENTATIVE:mailto:cuser01 at example.org
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=NEEDS-ACTION:urn:uuid:user01
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=NEEDS-ACTION:urn:x-uid:user01
DTSTAMP:20051222T210507Z
ORGANIZER;SCHEDULE-AGENT=NONE:mailto:cuser01 at example.org
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:C4526F4C-4324-4893-B769-BD766E4A4E7C
@@ -4726,7 +4726,7 @@
DTSTART:%(now_back24)s
DURATION:PT1H
ATTENDEE;PARTSTAT=DECLINED:mailto:cuser01 at example.org
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=DECLINED:urn:uuid:user01
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=DECLINED:urn:x-uid:user01
DTSTAMP:20051222T210507Z
ORGANIZER;SCHEDULE-AGENT=NONE:mailto:cuser01 at example.org
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:C4526F4C-4324-4893-B769-BD766E4A4E7C
@@ -4758,7 +4758,7 @@
processor.recipient_calendar = (yield cobj.componentForUser("user01"))
processor.message = Component.fromString(itip1 % self.subs)
processor.originator = RemoteCalendarUser("mailto:cuser01 at example.org")
- processor.recipient = LocalCalendarUser("urn:uuid:user01", None)
+ processor.recipient = LocalCalendarUser("urn:x-uid:user01", None)
processor.method = "REQUEST"
processor.uid = "12345-67890"
@@ -4777,7 +4777,7 @@
processor.recipient_calendar = None
processor.message = Component.fromString(itip2 % self.subs)
processor.originator = RemoteCalendarUser("mailto:cuser01 at example.org")
- processor.recipient = LocalCalendarUser("urn:uuid:user01", None)
+ processor.recipient = LocalCalendarUser("urn:x-uid:user01", None)
processor.method = "REQUEST"
processor.uid = "C4526F4C-4324-4893-B769-BD766E4A4E7C"
@@ -4858,11 +4858,11 @@
UID:12345-67890
DTSTART:%(now_back14)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
ATTENDEE;RSVP=TRUE;SCHEDULE-STATUS=3.7:mailto:cuser01 at example.org
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY
SEQUENCE:1
@@ -4876,10 +4876,10 @@
RECURRENCE-ID:%(now_fwd10)s
DTSTART:%(now_fwd10)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
ATTENDEE;RSVP=TRUE;SCHEDULE-STATUS=3.7:mailto:cuser01 at example.org
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:1
END:VEVENT
@@ -4893,11 +4893,11 @@
UID:%(relID)s
DTSTART:%(now_back30)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
ATTENDEE;RSVP=TRUE;SCHEDULE-STATUS=3.7:mailto:cuser01 at example.org
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY;UNTIL=%(now_back14_1)s
SEQUENCE:1
@@ -4911,11 +4911,11 @@
RECURRENCE-ID:%(now_back25)s
DTSTART:%(now_back25)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
ATTENDEE;RSVP=TRUE;SCHEDULE-STATUS=3.7:mailto:cuser01 at example.org
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:1
END:VEVENT
@@ -4924,10 +4924,10 @@
RECURRENCE-ID:%(now_back24)s
DTSTART:%(now_back24)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:1
END:VEVENT
@@ -4941,12 +4941,12 @@
UID:12345-67890
DTSTART:%(now_back14)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
ATTENDEE;RSVP=TRUE:mailto:cuser01 at example.org
DTSTAMP:20051222T210507Z
EXDATE:%(now_fwd10)s
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY
SEQUENCE:1
@@ -4972,11 +4972,11 @@
UID:%(relID)s
DTSTART:%(now_back30)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
ATTENDEE;RSVP=TRUE:mailto:cuser01 at example.org
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY;UNTIL=%(now_back14_1)s
SEQUENCE:1
@@ -4990,11 +4990,11 @@
RECURRENCE-ID:%(now_back25)s
DTSTART:%(now_back25)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
ATTENDEE;RSVP=TRUE:mailto:cuser01 at example.org
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:1
END:VEVENT
@@ -5003,10 +5003,10 @@
RECURRENCE-ID:%(now_back24)s
DTSTART:%(now_back24)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:1
END:VEVENT
@@ -5028,12 +5028,12 @@
UID:12345-67890
DTSTART:%(now_back14)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
ATTENDEE;RSVP=TRUE:mailto:cuser01 at example.org
DTSTAMP:20051222T210507Z
EXDATE:%(now_fwd10)s
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY
SEQUENCE:1
@@ -5055,11 +5055,11 @@
UID:12345-67890
DTSTART:%(now_back14)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
ATTENDEE;RSVP=TRUE:mailto:cuser01 at example.org
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY
SEQUENCE:1
@@ -5073,10 +5073,10 @@
RECURRENCE-ID:%(now_fwd10)s
DTSTART:%(now_fwd10)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
ATTENDEE;RSVP=TRUE:mailto:cuser01 at example.org
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:1
END:VEVENT
@@ -5093,12 +5093,12 @@
UID:%(relID)s
DTSTART:%(now_back30)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
ATTENDEE;RSVP=TRUE:mailto:cuser01 at example.org
DTSTAMP:20051222T210507Z
EXDATE:%(now_back24)s
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY;UNTIL=%(now_back14_1)s
SEQUENCE:1
@@ -5112,11 +5112,11 @@
RECURRENCE-ID:%(now_back25)s
DTSTART:%(now_back25)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
ATTENDEE;RSVP=TRUE:mailto:cuser01 at example.org
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:1
END:VEVENT
@@ -5204,11 +5204,11 @@
# Verify cuser02 data
self.assertEqual(len(details), 2)
- self.assertEqual(details[0][0], "urn:uuid:user01")
+ self.assertEqual(details[0][0], "urn:x-uid:user01")
self.assertEqual(details[0][1], ("mailto:cuser01 at example.org",))
self.assertEqual(normalize_iCalStr(details[0][2]), normalize_iCalStr(data_future_external) % relsubs, "Failed future: %s\n%s" % (title, diff_iCalStrs(details[0][2], data_future_external % relsubs),))
- self.assertEqual(details[1][0], "urn:uuid:user01")
+ self.assertEqual(details[1][0], "urn:x-uid:user01")
self.assertEqual(details[1][1], ("mailto:cuser01 at example.org",))
self.assertEqual(normalize_iCalStr(details[1][2]), normalize_iCalStr(data_past_external) % relsubs, "Failed past: %s\n%s" % (title, diff_iCalStrs(details[1][2], data_past_external % relsubs),))
@@ -5325,10 +5325,10 @@
UID:12345-67890
DTSTART:%(now_back14)s
DURATION:PT2H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY
SEQUENCE:1
@@ -5342,10 +5342,10 @@
RECURRENCE-ID:%(now_fwd10)s
DTSTART:%(now_fwd10)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:1
END:VEVENT
@@ -5359,10 +5359,10 @@
UID:%(relID)s
DTSTART:%(now_back30)s
DURATION:PT2H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY;UNTIL=%(now_back14_1)s
SEQUENCE:1
@@ -5376,10 +5376,10 @@
RECURRENCE-ID:%(now_back25)s
DTSTART:%(now_back25)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:1
END:VEVENT
@@ -5388,10 +5388,10 @@
RECURRENCE-ID:%(now_back24)s
DTSTART:%(now_back24)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:1
END:VEVENT
@@ -5405,10 +5405,10 @@
UID:12345-67890
DTSTART:%(now_back14)s
DURATION:PT2H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY
SEQUENCE:1
@@ -5422,10 +5422,10 @@
RECURRENCE-ID:%(now_fwd10)s
DTSTART:%(now_fwd10)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:1
END:VEVENT
@@ -5446,10 +5446,10 @@
UID:%(relID)s
DTSTART:%(now_back30)s
DURATION:PT2H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY;UNTIL=%(now_back14_1)s
SEQUENCE:1
@@ -5463,10 +5463,10 @@
RECURRENCE-ID:%(now_back25)s
DTSTART:%(now_back25)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:1
END:VEVENT
@@ -5475,10 +5475,10 @@
RECURRENCE-ID:%(now_back24)s
DTSTART:%(now_back24)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:1
END:VEVENT
@@ -5500,10 +5500,10 @@
UID:12345-67890
DTSTART:%(now_back14)s
DURATION:PT2H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY
SEQUENCE:1
@@ -5517,10 +5517,10 @@
RECURRENCE-ID:%(now_fwd10)s
DTSTART:%(now_fwd10)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:1
END:VEVENT
@@ -5706,10 +5706,10 @@
UID:12345-67890
DTSTART:%(now_back14)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY;COUNT=36
SEQUENCE:1
@@ -5723,10 +5723,10 @@
RECURRENCE-ID:%(now_fwd10)s
DTSTART:%(now_fwd10)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:1
END:VEVENT
@@ -5740,10 +5740,10 @@
UID:%(relID)s
DTSTART:%(now_back28)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY;UNTIL=%(now_back14_1)s
SEQUENCE:1
@@ -5757,10 +5757,10 @@
RECURRENCE-ID:%(now_back25)s
DTSTART:%(now_back25)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:1
END:VEVENT
@@ -5769,10 +5769,10 @@
RECURRENCE-ID:%(now_back24)s
DTSTART:%(now_back24)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:1
END:VEVENT
@@ -5786,10 +5786,10 @@
UID:12345-67890
DTSTART:%(now_back14)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY;COUNT=36
SEQUENCE:1
@@ -5803,10 +5803,10 @@
RECURRENCE-ID:%(now_fwd10)s
DTSTART:%(now_fwd10)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:1
END:VEVENT
@@ -5827,10 +5827,10 @@
UID:%(relID)s
DTSTART:%(now_back28)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY;UNTIL=%(now_back14_1)s
SEQUENCE:1
@@ -5844,10 +5844,10 @@
RECURRENCE-ID:%(now_back25)s
DTSTART:%(now_back25)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:1
END:VEVENT
@@ -5856,10 +5856,10 @@
RECURRENCE-ID:%(now_back24)s
DTSTART:%(now_back24)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:1
END:VEVENT
@@ -5881,10 +5881,10 @@
UID:12345-67890
DTSTART:%(now_back14)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
RRULE:FREQ=DAILY;COUNT=36
SEQUENCE:1
@@ -5898,10 +5898,10 @@
RECURRENCE-ID:%(now_fwd10)s
DTSTART:%(now_fwd10)s
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:uuid:user01
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:user02
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
DTSTAMP:20051222T210507Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
SEQUENCE:1
END:VEVENT
Modified: CalendarServer/trunk/txdav/caldav/datastore/test/util.py
===================================================================
--- CalendarServer/trunk/txdav/caldav/datastore/test/util.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/txdav/caldav/datastore/test/util.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -81,6 +81,7 @@
def canonicalCalendarUserAddress(self):
"""
Return a CUA for this record, preferring in this order:
+ urn:x-uid: form
urn:uuid: form
mailto: form
/principals/__uids__/ form
@@ -90,6 +91,7 @@
sortedCuas = sorted(self.calendarUserAddresses)
for prefix in (
+ "urn:x-uid:",
"urn:uuid:",
"mailto:",
"/principals/__uids__/"
@@ -147,6 +149,7 @@
("user%02d" % (ctr,),),
"User %02d" % (ctr,),
frozenset((
+ "urn:x-uid:user%02d" % (ctr,),
"urn:uuid:user%02d" % (ctr,),
"mailto:user%02d at example.com" % (ctr,),
)),
@@ -188,13 +191,13 @@
))
directory.addRecord(TestCalendarStoreDirectoryRecord(
"room1", ("room1",), "Conference Room One",
- frozenset(("urn:uuid:room1",)),
+ frozenset(("urn:x-uid:room1",)),
cutype="ROOM",
associatedAddress="il1",
))
directory.addRecord(TestCalendarStoreDirectoryRecord(
"room2", ("room2",), "Conference Room Two",
- frozenset(("urn:uuid:room2",)),
+ frozenset(("urn:x-uid:room2",)),
cutype="ROOM",
associatedAddress="il2",
))
@@ -209,6 +212,7 @@
(uid,),
uid.capitalize(),
frozenset((
+ "urn:x-uid:{0}".format(uid,),
"urn:uuid:{0}".format(uid,),
"mailto:{0}@example.com".format(uid,),
)),
Modified: CalendarServer/trunk/txdav/caldav/datastore/util.py
===================================================================
--- CalendarServer/trunk/txdav/caldav/datastore/util.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/txdav/caldav/datastore/util.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -104,8 +104,8 @@
def normalizationLookup(cuaddr, recordFunction, config):
"""
Lookup function to be passed to ical.normalizeCalendarUserAddresses.
- Returns a tuple of (Full name C{str}, guid C{UUID}, cudtype C{str}, and
- calendar user address list C{str}) for the given cuaddr.
+ Returns a tuple of (Full name C{unicode}, uid C{unicode}, cudtype C{str}, and
+ calendar user address list C{unicode}) for the given cuaddr.
recordFunction is called to retrieve the record for the cuaddr.
"""
try:
@@ -127,15 +127,10 @@
cuas = set(
[cua.encode("utf-8") for cua in record.calendarUserAddresses]
)
- try:
- guid = record.guid
- except AttributeError:
- guid = None
+ returnValue((fullName, record.uid, record.getCUType(), cuas))
- returnValue((fullName, guid, record.getCUType(), cuas))
-
@inlineCallbacks
def dropboxIDFromCalendarObject(calendarObject):
"""
Modified: CalendarServer/trunk/txdav/common/datastore/sql_schema/current-oracle-dialect.sql
===================================================================
--- CalendarServer/trunk/txdav/common/datastore/sql_schema/current-oracle-dialect.sql 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/txdav/common/datastore/sql_schema/current-oracle-dialect.sql 2014-04-18 20:38:33 UTC (rev 13331)
@@ -535,6 +535,23 @@
"ICALENDAR_TEXT" nclob
);
+create table PRINCIPAL_PURGE_POLLING_WORK (
+ "WORK_ID" integer primary key not null,
+ "JOB_ID" integer not null references JOB
+);
+
+create table PRINCIPAL_PURGE_CHECK_WORK (
+ "WORK_ID" integer primary key not null,
+ "JOB_ID" integer not null references JOB,
+ "UID" nvarchar2(255)
+);
+
+create table PRINCIPAL_PURGE_WORK (
+ "WORK_ID" integer primary key not null,
+ "JOB_ID" integer not null references JOB,
+ "UID" nvarchar2(255)
+);
+
create table CALENDARSERVER (
"NAME" nvarchar2(255) primary key,
"VALUE" nvarchar2(255)
@@ -805,6 +822,18 @@
JOB_ID
);
+create index PRINCIPAL_PURGE_POLLI_6383e68a on PRINCIPAL_PURGE_POLLING_WORK (
+ JOB_ID
+);
+
+create index PRINCIPAL_PURGE_CHECK_b0c024c1 on PRINCIPAL_PURGE_CHECK_WORK (
+ JOB_ID
+);
+
+create index PRINCIPAL_PURGE_WORK__7a8141a3 on PRINCIPAL_PURGE_WORK (
+ JOB_ID
+);
+
-- Skipped Function next_job
-- Extras
Modified: CalendarServer/trunk/txdav/common/datastore/sql_schema/current.sql
===================================================================
--- CalendarServer/trunk/txdav/common/datastore/sql_schema/current.sql 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/txdav/common/datastore/sql_schema/current.sql 2014-04-18 20:38:33 UTC (rev 13331)
@@ -1007,6 +1007,45 @@
create index SCHEDULE_REPLY_CANCEL_WORK_JOB_ID on
SCHEDULE_REPLY_CANCEL_WORK(JOB_ID);
+----------------------------------
+-- Principal Purge Polling Work --
+----------------------------------
+
+create table PRINCIPAL_PURGE_POLLING_WORK (
+ WORK_ID integer primary key default nextval('WORKITEM_SEQ') not null, -- implicit index
+ JOB_ID integer references JOB not null
+);
+
+create index PRINCIPAL_PURGE_POLLING_WORK_JOB_ID on
+ PRINCIPAL_PURGE_POLLING_WORK(JOB_ID);
+
+--------------------------------
+-- Principal Purge Check Work --
+--------------------------------
+
+create table PRINCIPAL_PURGE_CHECK_WORK (
+ WORK_ID integer primary key default nextval('WORKITEM_SEQ') not null, -- implicit index
+ JOB_ID integer references JOB not null,
+ UID varchar(255) not null
+);
+
+create index PRINCIPAL_PURGE_CHECK_WORK_JOB_ID on
+ PRINCIPAL_PURGE_CHECK_WORK(JOB_ID);
+
+--------------------------
+-- Principal Purge Work --
+--------------------------
+
+create table PRINCIPAL_PURGE_WORK (
+ WORK_ID integer primary key default nextval('WORKITEM_SEQ') not null, -- implicit index
+ JOB_ID integer references JOB not null,
+ UID varchar(255) not null
+);
+
+create index PRINCIPAL_PURGE_WORK_JOB_ID on
+ PRINCIPAL_PURGE_WORK(JOB_ID);
+
+
--------------------
-- Schema Version --
--------------------
Modified: CalendarServer/trunk/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_37_to_38.sql
===================================================================
--- CalendarServer/trunk/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_37_to_38.sql 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_37_to_38.sql 2014-04-18 20:38:33 UTC (rev 13331)
@@ -32,6 +32,46 @@
alter index TRANSPARENCY_TIME_RAN_5f34467f
rename to PERUSER_TIME_RANGE_IN_5468a226;
+----------------------------------
+-- Principal Purge Polling Work --
+----------------------------------
+create table PRINCIPAL_PURGE_POLLING_WORK (
+ "WORK_ID" integer primary key not null,
+ "JOB_ID" integer not null references JOB
+);
+
+--------------------------------
+-- Principal Purge Check Work --
+--------------------------------
+
+create table PRINCIPAL_PURGE_CHECK_WORK (
+ "WORK_ID" integer primary key not null,
+ "JOB_ID" integer not null references JOB,
+ "UID" nvarchar2(255)
+);
+
+--------------------------
+-- Principal Purge Work --
+--------------------------
+
+create table PRINCIPAL_PURGE_WORK (
+ "WORK_ID" integer primary key not null,
+ "JOB_ID" integer not null references JOB,
+ "UID" nvarchar2(255)
+);
+
+create index PRINCIPAL_PURGE_POLLI_6383e68a on PRINCIPAL_PURGE_POLLING_WORK (
+ JOB_ID
+);
+
+create index PRINCIPAL_PURGE_CHECK_b0c024c1 on PRINCIPAL_PURGE_CHECK_WORK (
+ JOB_ID
+);
+
+create index PRINCIPAL_PURGE_WORK__7a8141a3 on PRINCIPAL_PURGE_WORK (
+ JOB_ID
+);
+
-- update the version
update CALENDARSERVER set VALUE = '38' where NAME = 'VERSION';
Modified: CalendarServer/trunk/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_37_to_38.sql
===================================================================
--- CalendarServer/trunk/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_37_to_38.sql 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_37_to_38.sql 2014-04-18 20:38:33 UTC (rev 13331)
@@ -32,5 +32,44 @@
alter index TRANSPARENCY_TIME_RANGE_INSTANCE_ID
rename to PERUSER_TIME_RANGE_INSTANCE_ID;
+----------------------------------
+-- Principal Purge Polling Work --
+----------------------------------
+
+create table PRINCIPAL_PURGE_POLLING_WORK (
+ WORK_ID integer primary key default nextval('WORKITEM_SEQ') not null, -- implicit index
+ JOB_ID integer references JOB not null
+);
+
+create index PRINCIPAL_PURGE_POLLING_WORK_JOB_ID on
+ PRINCIPAL_PURGE_POLLING_WORK(JOB_ID);
+
+--------------------------------
+-- Principal Purge Check Work --
+--------------------------------
+
+create table PRINCIPAL_PURGE_CHECK_WORK (
+ WORK_ID integer primary key default nextval('WORKITEM_SEQ') not null, -- implicit index
+ JOB_ID integer references JOB not null,
+ UID varchar(255) not null
+);
+
+create index PRINCIPAL_PURGE_CHECK_WORK_JOB_ID on
+ PRINCIPAL_PURGE_CHECK_WORK(JOB_ID);
+
+--------------------------
+-- Principal Purge Work --
+--------------------------
+
+create table PRINCIPAL_PURGE_WORK (
+ WORK_ID integer primary key default nextval('WORKITEM_SEQ') not null, -- implicit index
+ JOB_ID integer references JOB not null,
+ UID varchar(255) not null
+);
+
+create index PRINCIPAL_PURGE_WORK_JOB_ID on
+ PRINCIPAL_PURGE_WORK(JOB_ID);
+
+
-- update the version
update CALENDARSERVER set VALUE = '38' where NAME = 'VERSION';
Modified: CalendarServer/trunk/txdav/who/directory.py
===================================================================
--- CalendarServer/trunk/txdav/who/directory.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/txdav/who/directory.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -68,16 +68,23 @@
from txdav.caldav.datastore.scheduling.cuaddress import normalizeCUAddr
address = normalizeCUAddr(address)
record = None
- if address.startswith("urn:uuid:"):
+
+ if address.startswith("urn:x-uid:"):
+ uid = address[10:]
+ record = yield self.recordWithUID(uid)
+
+ elif address.startswith("urn:uuid:"):
try:
guid = uuid.UUID(address[9:])
except ValueError:
log.info("Invalid GUID: {guid}", guid=address[9:])
returnValue(None)
record = yield self.recordWithGUID(guid)
+
elif address.startswith("mailto:"):
records = yield self.recordsWithEmailAddress(address[7:])
record = records[0] if records else None
+
elif address.startswith("/principals/"):
parts = address.split("/")
if len(parts) == 4:
@@ -85,7 +92,6 @@
uid = parts[3]
record = yield self.recordWithUID(uid)
else:
- # recordType = self.fieldName.lookupByName(parts[2])
recordType = self.oldNameToRecordType(parts[2])
record = yield self.recordWithShortName(recordType, parts[3])
@@ -259,30 +265,31 @@
except AttributeError:
pass
- try:
- cuas = set(
- ["mailto:{0}".format(emailAddress,)
- for emailAddress in self.emailAddresses]
- )
- except AttributeError:
- cuas = set()
+ cuas = set()
+ # urn:x-uid:
+ cuas.add("urn:x-uid:{}".format(self.uid))
+
+ # urn:uuid:
try:
if self.guid:
if isinstance(self.guid, uuid.UUID):
guid = unicode(self.guid).upper()
else:
guid = self.guid
- cuas.add("urn:uuid:{guid}".format(guid=guid))
+ cuas.add("urn:uuid:{}".format(guid))
except AttributeError:
# No guid
pass
- cuas.add(u"/principals/__uids__/{uid}/".format(uid=self.uid))
- for shortName in self.shortNames:
- cuas.add(u"/principals/{rt}/{sn}/".format(
- rt=self.service.recordTypeToOldName(self.recordType),
- sn=shortName)
- )
+
+ # mailto:
+ try:
+ for emailAddress in self.emailAddresses:
+ cuas.add(u"mailto:{}".format(emailAddress))
+ except AttributeError:
+ # No emailAddresses
+ pass
+
return frozenset(cuas)
# Mapping from directory record.recordType to RFC2445 CUTYPE values
@@ -346,6 +353,7 @@
def canonicalCalendarUserAddress(self):
"""
Return a CUA for this record, preferring in this order:
+ urn:x-uid: form
urn:uuid: form
mailto: form
/principals/__uids__/ form
@@ -355,6 +363,7 @@
sortedCuas = sorted(self.calendarUserAddresses)
for prefix in (
+ "urn:x-uid:",
"urn:uuid:",
"mailto:",
"/principals/__uids__/"
Modified: CalendarServer/trunk/txdav/who/test/test_directory.py
===================================================================
--- CalendarServer/trunk/txdav/who/test/test_directory.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/txdav/who/test/test_directory.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -60,20 +60,22 @@
record = TestDirectoryRecord(
self.directory,
{
- FieldName.uid: u"uid",
+ FieldName.uid: u"test",
FieldName.shortNames: [u"name"],
FieldName.recordType: RecordType.user,
}
)
self.assertEquals(
record.canonicalCalendarUserAddress(),
- u"/principals/__uids__/uid/"
+ u"urn:x-uid:test"
)
+ # Even with email address, canonical still remains urn:x-uid:
+
record = TestDirectoryRecord(
self.directory,
{
- FieldName.uid: u"uid",
+ FieldName.uid: u"test",
FieldName.shortNames: [u"name"],
FieldName.emailAddresses: [u"test at example.com"],
FieldName.recordType: RecordType.user,
@@ -81,25 +83,57 @@
)
self.assertEquals(
record.canonicalCalendarUserAddress(),
- u"mailto:test at example.com"
+ u"urn:x-uid:test"
)
+
+ def test_calendarUserAddresses(self):
+ """
+ Verify the right CUAs are advertised, which no longer includes the
+ /principals/ flavors (although those are still recognized by
+ recordWithCalendarUserAddress( ) for backwards compatibility).
+ """
+
record = TestDirectoryRecord(
self.directory,
{
- FieldName.uid: u"uid",
+ FieldName.uid: u"test",
FieldName.guid: UUID("E2F6C57F-BB15-4EF9-B0AC-47A7578386F1"),
- FieldName.shortNames: [u"name"],
- FieldName.emailAddresses: [u"test at example.com"],
+ FieldName.shortNames: [u"name1", u"name2"],
+ FieldName.emailAddresses: [u"test at example.com", u"another at example.com"],
FieldName.recordType: RecordType.user,
}
)
self.assertEquals(
- record.canonicalCalendarUserAddress(),
- u"urn:uuid:E2F6C57F-BB15-4EF9-B0AC-47A7578386F1"
+ record.calendarUserAddresses,
+ frozenset(
+ [
+ u"urn:x-uid:test",
+ u"urn:uuid:E2F6C57F-BB15-4EF9-B0AC-47A7578386F1",
+ u"mailto:test at example.com",
+ u"mailto:another at example.com",
+ ]
+ )
)
+ record = TestDirectoryRecord(
+ self.directory,
+ {
+ FieldName.uid: u"test",
+ FieldName.shortNames: [u"name1", u"name2"],
+ FieldName.recordType: RecordType.user,
+ }
+ )
+ self.assertEquals(
+ record.calendarUserAddresses,
+ frozenset(
+ [
+ u"urn:x-uid:test",
+ ]
+ )
+ )
+
@inlineCallbacks
def test_recordsFromMatchExpression(self):
expression = MatchExpression(
@@ -127,7 +161,9 @@
@inlineCallbacks
def test_recordWithCalendarUserAddress(self):
"""
- Make sure hasCalendars is honored
+ Make sure various CUA forms are recognized and hasCalendars is honored.
+ Note: /principals/ CUAs are recognized but not advertised anymore; see
+ record.calendarUserAddresses.
"""
# hasCalendars
@@ -135,7 +171,32 @@
u"mailto:wsanchez at example.com"
)
self.assertNotEquals(record, None)
+ self.assertEquals(record.uid, u"6423F94A-6B76-4A3A-815B-D52CFD77935D")
+ record = yield self.directory.recordWithCalendarUserAddress(
+ u"urn:x-uid:6423F94A-6B76-4A3A-815B-D52CFD77935D"
+ )
+ self.assertNotEquals(record, None)
+ self.assertEquals(record.uid, u"6423F94A-6B76-4A3A-815B-D52CFD77935D")
+
+ record = yield self.directory.recordWithCalendarUserAddress(
+ u"urn:uuid:6423F94A-6B76-4A3A-815B-D52CFD77935D"
+ )
+ self.assertNotEquals(record, None)
+ self.assertEquals(record.uid, u"6423F94A-6B76-4A3A-815B-D52CFD77935D")
+
+ record = yield self.directory.recordWithCalendarUserAddress(
+ u"/principals/__uids__/6423F94A-6B76-4A3A-815B-D52CFD77935D"
+ )
+ self.assertNotEquals(record, None)
+ self.assertEquals(record.uid, u"6423F94A-6B76-4A3A-815B-D52CFD77935D")
+
+ record = yield self.directory.recordWithCalendarUserAddress(
+ u"/principals/users/wsanchez"
+ )
+ self.assertNotEquals(record, None)
+ self.assertEquals(record.uid, u"6423F94A-6B76-4A3A-815B-D52CFD77935D")
+
# no hasCalendars
record = yield self.directory.recordWithCalendarUserAddress(
u"mailto:nocalendar at example.com"
Modified: CalendarServer/trunk/txdav/who/test/test_group_attendees.py
===================================================================
--- CalendarServer/trunk/txdav/who/test/test_group_attendees.py 2014-04-18 19:32:26 UTC (rev 13330)
+++ CalendarServer/trunk/txdav/who/test/test_group_attendees.py 2014-04-18 20:38:33 UTC (rev 13331)
@@ -29,6 +29,7 @@
from txdav.who.util import directoryFromConfig
import os
+
class GroupAttendeeReconciliation(CommonCommonTests, unittest.TestCase):
"""
GroupAttendeeReconciliation tests
@@ -41,12 +42,16 @@
yield super(GroupAttendeeReconciliation, self).setUp()
self.xmlService = xmlService(self.mktemp(), xmlData=None)
- self.patch(config.DirectoryService.params, "xmlFile",
+ self.patch(
+ config.DirectoryService.params,
+ "xmlFile",
os.path.join(
os.path.dirname(__file__), "accounts", "groupAttendeeAccounts.xml"
)
)
- self.patch(config.ResourceService.params, "xmlFile",
+ self.patch(
+ config.ResourceService.params,
+ "xmlFile",
os.path.join(
os.path.dirname(__file__), "accounts", "resources.xml"
)
@@ -77,6 +82,7 @@
"10000000-0000-0000-0000-000000000008" : None,
"10000000-0000-0000-0000-000000000009" : None,
"10000000-0000-0000-0000-000000000010" : None,
+
}
@inlineCallbacks
@@ -118,12 +124,12 @@
UID:event1 at ninevah.local
DTSTART;TZID=US/Eastern:20140101T100000
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;RSVP=TRUE:urn:uuid:10000000-0000-0000-0000-000000000001
-ATTENDEE;CN=Group 02;CUTYPE=GROUP;EMAIL=group02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=3.7:urn:uuid:20000000-0000-0000-0000-000000000002
-ATTENDEE;CN=User 06;EMAIL=user06 at example.com;MEMBER="urn:uuid:20000000-0000-0000-0000-000000000002";PARTSTAT=NEEDS-ACTION;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:10000000-0000-0000-0000-000000000006
-ATTENDEE;CN=User 07;EMAIL=user07 at example.com;MEMBER="urn:uuid:20000000-0000-0000-0000-000000000002";PARTSTAT=NEEDS-ACTION;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:10000000-0000-0000-0000-000000000007
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;RSVP=TRUE:urn:x-uid:10000000-0000-0000-0000-000000000001
+ATTENDEE;CN=Group 02;CUTYPE=GROUP;EMAIL=group02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=3.7:urn:x-uid:20000000-0000-0000-0000-000000000002
+ATTENDEE;CN=User 06;EMAIL=user06 at example.com;MEMBER="urn:x-uid:20000000-0000-0000-0000-000000000002";PARTSTAT=NEEDS-ACTION;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:10000000-0000-0000-0000-000000000006
+ATTENDEE;CN=User 07;EMAIL=user07 at example.com;MEMBER="urn:x-uid:20000000-0000-0000-0000-000000000002";PARTSTAT=NEEDS-ACTION;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:10000000-0000-0000-0000-000000000007
CREATED:20060101T150000Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:10000000-0000-0000-0000-000000000001
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:10000000-0000-0000-0000-000000000001
SUMMARY:event 1
END:VEVENT
END:VCALENDAR
@@ -176,10 +182,10 @@
UID:event1 at ninevah.local
DTSTART;TZID=US/Eastern:20140101T100000
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;RSVP=TRUE:urn:uuid:10000000-0000-0000-0000-000000000001
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;RSVP=TRUE:urn:x-uid:10000000-0000-0000-0000-000000000001
ATTENDEE;CUTYPE=GROUP;RSVP=TRUE;SCHEDULE-STATUS=3.7:urn:uuid:FFFFFFFF-EEEE-DDDD-CCCC-BBBBBBBBBBBB
CREATED:20060101T150000Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:10000000-0000-0000-0000-000000000001
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:10000000-0000-0000-0000-000000000001
SUMMARY:event 1
END:VEVENT
END:VCALENDAR
@@ -227,11 +233,11 @@
UID:event1 at ninevah.local
DTSTART;TZID=US/Eastern:20140101T100000
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;RSVP=TRUE:urn:uuid:10000000-0000-0000-0000-000000000001
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:10000000-0000-0000-0000-000000000002
-ATTENDEE;CN=Group 01;CUTYPE=GROUP;EMAIL=group01 at example.com;RSVP=TRUE;SCHEDULE-STATUS=3.7:urn:uuid:20000000-0000-0000-0000-000000000001
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;RSVP=TRUE:urn:x-uid:10000000-0000-0000-0000-000000000001
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:10000000-0000-0000-0000-000000000002
+ATTENDEE;CN=Group 01;CUTYPE=GROUP;EMAIL=group01 at example.com;RSVP=TRUE;SCHEDULE-STATUS=3.7:urn:x-uid:20000000-0000-0000-0000-000000000001
CREATED:20060101T150000Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:10000000-0000-0000-0000-000000000001
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:10000000-0000-0000-0000-000000000001
SUMMARY:event 1
END:VEVENT
END:VCALENDAR
@@ -271,7 +277,7 @@
UID:event1 at ninevah.local
ORGANIZER:MAILTO:user01 at example.com
ATTENDEE:mailto:user01 at example.com
-ATTENDEE:urn:uuid:20000000-0000-0000-0000-000000000004
+ATTENDEE:urn:x-uid:20000000-0000-0000-0000-000000000004
END:VEVENT
END:VCALENDAR"""
@@ -283,15 +289,15 @@
UID:event1 at ninevah.local
DTSTART;TZID=US/Eastern:20140101T100000
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;RSVP=TRUE:urn:uuid:10000000-0000-0000-0000-000000000001
-ATTENDEE;CN=Group 04;CUTYPE=GROUP;RSVP=TRUE;SCHEDULE-STATUS=3.7:urn:uuid:20000000-0000-0000-0000-000000000004
-ATTENDEE;CN=User 06;EMAIL=user06 at example.com;MEMBER="urn:uuid:20000000-0000-0000-0000-000000000004";PARTSTAT=NEEDS-ACTION;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:10000000-0000-0000-0000-000000000006
-ATTENDEE;CN=User 07;EMAIL=user07 at example.com;MEMBER="urn:uuid:20000000-0000-0000-0000-000000000004";PARTSTAT=NEEDS-ACTION;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:10000000-0000-0000-0000-000000000007
-ATTENDEE;CN=User 08;EMAIL=user08 at example.com;MEMBER="urn:uuid:20000000-0000-0000-0000-000000000004";PARTSTAT=NEEDS-ACTION;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:10000000-0000-0000-0000-000000000008
-ATTENDEE;CN=User 09;EMAIL=user09 at example.com;MEMBER="urn:uuid:20000000-0000-0000-0000-000000000004";PARTSTAT=NEEDS-ACTION;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:10000000-0000-0000-0000-000000000009
-ATTENDEE;CN=User 10;EMAIL=user10 at example.com;MEMBER="urn:uuid:20000000-0000-0000-0000-000000000004";PARTSTAT=NEEDS-ACTION;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:10000000-0000-0000-0000-000000000010
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;RSVP=TRUE:urn:x-uid:10000000-0000-0000-0000-000000000001
+ATTENDEE;CN=Group 04;CUTYPE=GROUP;RSVP=TRUE;SCHEDULE-STATUS=3.7:urn:x-uid:20000000-0000-0000-0000-000000000004
+ATTENDEE;CN=User 06;EMAIL=user06 at example.com;MEMBER="urn:x-uid:20000000-0000-0000-0000-000000000004";PARTSTAT=NEEDS-ACTION;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:10000000-0000-0000-0000-000000000006
+ATTENDEE;CN=User 07;EMAIL=user07 at example.com;MEMBER="urn:x-uid:20000000-0000-0000-0000-000000000004";PARTSTAT=NEEDS-ACTION;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:10000000-0000-0000-0000-000000000007
+ATTENDEE;CN=User 08;EMAIL=user08 at example.com;MEMBER="urn:x-uid:20000000-0000-0000-0000-000000000004";PARTSTAT=NEEDS-ACTION;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:10000000-0000-0000-0000-000000000008
+ATTENDEE;CN=User 09;EMAIL=user09 at example.com;MEMBER="urn:x-uid:20000000-0000-0000-0000-000000000004";PARTSTAT=NEEDS-ACTION;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:10000000-0000-0000-0000-000000000009
+ATTENDEE;CN=User 10;EMAIL=user10 at example.com;MEMBER="urn:x-uid:20000000-0000-0000-0000-000000000004";PARTSTAT=NEEDS-ACTION;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:10000000-0000-0000-0000-000000000010
CREATED:20060101T150000Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:10000000-0000-0000-0000-000000000001
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:10000000-0000-0000-0000-000000000001
SUMMARY:event 1
END:VEVENT
END:VCALENDAR
@@ -351,16 +357,16 @@
UID:event1 at ninevah.local
DTSTART;TZID=US/Eastern:20140101T100000
DURATION:PT1H
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;RSVP=TRUE:urn:uuid:10000000-0000-0000-0000-000000000001
-ATTENDEE;CN=Group 01;CUTYPE=GROUP;EMAIL=group01 at example.com;RSVP=TRUE;SCHEDULE-STATUS=3.7:urn:uuid:20000000-0000-0000-0000-000000000001
-ATTENDEE;CN=Group 02;CUTYPE=GROUP;EMAIL=group02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=3.7:urn:uuid:20000000-0000-0000-0000-000000000002
-ATTENDEE;CN=Group 03;CUTYPE=GROUP;EMAIL=group03 at example.com;RSVP=TRUE;SCHEDULE-STATUS=3.7:urn:uuid:20000000-0000-0000-0000-000000000003
-ATTENDEE;CN=User 08;EMAIL=user08 at example.com;MEMBER="urn:uuid:20000000-0000-0000-0000-000000000003";PARTSTAT=NEEDS-ACTION;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:10000000-0000-0000-0000-000000000008
-ATTENDEE;CN=User 09;EMAIL=user09 at example.com;MEMBER="urn:uuid:20000000-0000-0000-0000-000000000003";PARTSTAT=NEEDS-ACTION;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:10000000-0000-0000-0000-000000000009
-ATTENDEE;CN=User 06;EMAIL=user06 at example.com;MEMBER="urn:uuid:20000000-0000-0000-0000-000000000002";PARTSTAT=NEEDS-ACTION;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:10000000-0000-0000-0000-000000000006
-ATTENDEE;CN=User 07;EMAIL=user07 at example.com;MEMBER="urn:uuid:20000000-0000-0000-0000-000000000002";PARTSTAT=NEEDS-ACTION;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:10000000-0000-0000-0000-000000000007
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;RSVP=TRUE:urn:x-uid:10000000-0000-0000-0000-000000000001
+ATTENDEE;CN=Group 01;CUTYPE=GROUP;EMAIL=group01 at example.com;RSVP=TRUE;SCHEDULE-STATUS=3.7:urn:x-uid:20000000-0000-0000-0000-000000000001
+ATTENDEE;CN=Group 02;CUTYPE=GROUP;EMAIL=group02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=3.7:urn:x-uid:20000000-0000-0000-0000-000000000002
+ATTENDEE;CN=Group 03;CUTYPE=GROUP;EMAIL=group03 at example.com;RSVP=TRUE;SCHEDULE-STATUS=3.7:urn:x-uid:20000000-0000-0000-0000-000000000003
+ATTENDEE;CN=User 08;EMAIL=user08 at example.com;MEMBER="urn:x-uid:20000000-0000-0000-0000-000000000003";PARTSTAT=NEEDS-ACTION;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:10000000-0000-0000-0000-000000000008
+ATTENDEE;CN=User 09;EMAIL=user09 at example.com;MEMBER="urn:x-uid:20000000-0000-0000-0000-000000000003";PARTSTAT=NEEDS-ACTION;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:10000000-0000-0000-0000-000000000009
+ATTENDEE;CN=User 06;EMAIL=user06 at example.com;MEMBER="urn:x-uid:20000000-0000-0000-0000-000000000002";PARTSTAT=NEEDS-ACTION;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:10000000-0000-0000-0000-000000000006
+ATTENDEE;CN=User 07;EMAIL=user07 at example.com;MEMBER="urn:x-uid:20000000-0000-0000-0000-000000000002";PARTSTAT=NEEDS-ACTION;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:10000000-0000-0000-0000-000000000007
CREATED:20060101T150000Z
-ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:10000000-0000-0000-0000-000000000001
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:10000000-0000-0000-0000-000000000001
SUMMARY:event 1
END:VEVENT
END:VCALENDAR
@@ -410,10 +416,10 @@
UID:event1 at ninevah.local
DTSTART;TZID=US/Eastern:20140101T100000
DURATION:PT1H
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:10000000-0000-0000-0000-000000000002
-ATTENDEE;CN=Group 01;CUTYPE=GROUP;EMAIL=group01 at example.com;RSVP=TRUE;SCHEDULE-STATUS=3.7:urn:uuid:20000000-0000-0000-0000-000000000001
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:10000000-0000-0000-0000-000000000002
+ATTENDEE;CN=Group 01;CUTYPE=GROUP;EMAIL=group01 at example.com;RSVP=TRUE;SCHEDULE-STATUS=3.7:urn:x-uid:20000000-0000-0000-0000-000000000001
CREATED:20060101T150000Z
-ORGANIZER;CN=User 02;EMAIL=user02 at example.com:urn:uuid:10000000-0000-0000-0000-000000000002
+ORGANIZER;CN=User 02;EMAIL=user02 at example.com:urn:x-uid:10000000-0000-0000-0000-000000000002
SUMMARY:event 1
END:VEVENT
END:VCALENDAR
@@ -427,11 +433,11 @@
UID:event1 at ninevah.local
DTSTART;TZID=US/Eastern:20140101T100000
DURATION:PT1H
-ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:uuid:10000000-0000-0000-0000-000000000002
-ATTENDEE;CN=Group 01;CUTYPE=GROUP;EMAIL=group01 at example.com;RSVP=TRUE;SCHEDULE-STATUS=3.7:urn:uuid:20000000-0000-0000-0000-000000000001
-ATTENDEE;CN=User 01;EMAIL=user01 at example.com;MEMBER="urn:uuid:20000000-0000-0000-0000-000000000001";PARTSTAT=NEEDS-ACTION;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:10000000-0000-0000-0000-000000000001
+ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:10000000-0000-0000-0000-000000000002
+ATTENDEE;CN=Group 01;CUTYPE=GROUP;EMAIL=group01 at example.com;RSVP=TRUE;SCHEDULE-STATUS=3.7:urn:x-uid:20000000-0000-0000-0000-000000000001
+ATTENDEE;CN=User 01;EMAIL=user01 at example.com;MEMBER="urn:x-uid:20000000-0000-0000-0000-000000000001";PARTSTAT=NEEDS-ACTION;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:10000000-0000-0000-0000-000000000001
CREATED:20060101T150000Z
-ORGANIZER;CN=User 02;EMAIL=user02 at example.com:urn:uuid:10000000-0000-0000-0000-000000000002
+ORGANIZER;CN=User 02;EMAIL=user02 at example.com:urn:x-uid:10000000-0000-0000-0000-000000000002
SEQUENCE:1
SUMMARY:event 1
END:VEVENT
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20140418/88a552ff/attachment-0001.html>
More information about the calendarserver-changes
mailing list