[CalendarServer-changes] [13398] CalendarServer/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Thu May 1 19:28:56 PDT 2014
Revision: 13398
http://trac.calendarserver.org//changeset/13398
Author: gaya at apple.com
Date: 2014-05-01 19:28:56 -0700 (Thu, 01 May 2014)
Log Message:
-----------
Clean up GroupAttendeeReconciliationWork, its config, and tests. Remove incorrect old-event-with-group-attendee detection.
Modified Paths:
--------------
CalendarServer/trunk/twistedcaldav/stdconfig.py
CalendarServer/trunk/txdav/caldav/datastore/sql.py
CalendarServer/trunk/txdav/who/directory.py
CalendarServer/trunk/txdav/who/groups.py
CalendarServer/trunk/txdav/who/test/test_group_attendees.py
CalendarServer/trunk/txdav/who/vcard.py
Modified: CalendarServer/trunk/twistedcaldav/stdconfig.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/stdconfig.py 2014-05-02 02:18:30 UTC (rev 13397)
+++ CalendarServer/trunk/twistedcaldav/stdconfig.py 2014-05-02 02:28:56 UTC (rev 13398)
@@ -750,7 +750,6 @@
"AllowResourceAsOrganizer" : False, # Allow resources to be Organizers
"AllowLocationWithoutOrganizer" : True, # Allow locations to have events without an Organizer
"AllowResourceWithoutOrganizer" : True, # Allow resources to have events without an Organizer
- "AllowGroupAsAttendee" : False, # Allow groups to be Attendees
"TrackUnscheduledLocationData" : True, # Track who the last modifier of an unscheduled location event is
"TrackUnscheduledResourceData" : True, # Track who the last modifier of an unscheduled resource event is
"LimitFreeBusyAttendees" : 30, # Maximum number of attendees to request freebusy for
@@ -1025,6 +1024,11 @@
"UseExternalProxies" : False,
},
+ "GroupAttendees" : {
+ "Enabled": False,
+ "ReconciliationDelaySeconds" : 5,
+ },
+
"Manhole": {
"Enabled": False,
"StartingPortNumber": 5000,
Modified: CalendarServer/trunk/txdav/caldav/datastore/sql.py
===================================================================
--- CalendarServer/trunk/txdav/caldav/datastore/sql.py 2014-05-02 02:18:30 UTC (rev 13397)
+++ CalendarServer/trunk/txdav/caldav/datastore/sql.py 2014-05-02 02:28:56 UTC (rev 13398)
@@ -1935,7 +1935,7 @@
"""
reconcile group attendees
"""
- if not config.Scheduling.Options.AllowGroupAsAttendee:
+ if not config.GroupAttendees.Enabled:
returnValue(False)
attendeeProps = component.getAllAttendeeProperties()
@@ -1962,7 +1962,7 @@
changed = component.reconcileGroupAttendees(groupCUAToAttendeeMemberPropMap)
# save for post processing when self._resourceID is non-zero
- if inserting:
+ if inserting and groupCUAToAttendeeMemberPropMap:
self._groupCUAToAttendeeMemberPropMap = groupCUAToAttendeeMemberPropMap
returnValue(changed)
@@ -1974,31 +1974,8 @@
update schema.GROUP_ATTENDEE
"""
if groupCUAToAttendeeMemberPropMap is None:
- # post processing.
-
- # see if this event ends in the past
- tr = schema.TIME_RANGE
- rows = yield Select(
- [Count(tr.CALENDAR_OBJECT_RESOURCE_ID)],
- From=tr,
- Where=(
- tr.CALENDAR_OBJECT_RESOURCE_ID == self._resourceID).And(
- tr.END_DATE > datetime.datetime.utcnow()
- ),
- ).on(self._txn)
-
- if rows[0][0] == 0:
- # delete group attendee rows and exit
- ga = schema.GROUP_ATTENDEE
- rows = yield Delete(
- From=ga,
- Where=ga.RESOURCE_ID == self._resourceID,
- Return=[ga.GROUP_ID]
- ).on(self._txn)
- returnValue(bool(rows))
-
if hasattr(self, "_groupCUAToAttendeeMemberPropMap"):
- groupCUAToAttendeeMemberPropMap = self._groupCUAToAttendeeMemberPropMap
+ groupCUAToAttendeeMemberPropMap = self._groupCUAToAttendeeMemberPropMap
else:
returnValue(False)
@@ -2059,6 +2036,20 @@
returnValue(changed)
+ @inlineCallbacks
+ def deleteGROUP_ATTENDEE(self, groupCUAToAttendeeMemberPropMap=None):
+ """
+ delete groupp attendee rows for this resource
+ """
+ ga = schema.GROUP_ATTENDEE
+ rows = yield Delete(
+ From=ga,
+ Where=ga.RESOURCE_ID == self._resourceID,
+ Return=[ga.GROUP_ID]
+ ).on(self._txn)
+ returnValue(bool(rows))
+
+
def validCalendarDataCheck(self, component, inserting):
"""
Check that the calendar data is valid iCalendar.
Modified: CalendarServer/trunk/txdav/who/directory.py
===================================================================
--- CalendarServer/trunk/txdav/who/directory.py 2014-05-02 02:18:30 UTC (rev 13397)
+++ CalendarServer/trunk/txdav/who/directory.py 2014-05-02 02:28:56 UTC (rev 13398)
@@ -97,7 +97,7 @@
if record:
if record.hasCalendars or (
- config.Scheduling.Options.AllowGroupAsAttendee and
+ config.GroupAttendees.Enabled and
record.recordType == BaseRecordType.group
):
returnValue(record)
Modified: CalendarServer/trunk/txdav/who/groups.py
===================================================================
--- CalendarServer/trunk/txdav/who/groups.py 2014-05-02 02:18:30 UTC (rev 13397)
+++ CalendarServer/trunk/txdav/who/groups.py 2014-05-02 02:28:56 UTC (rev 13398)
@@ -22,13 +22,14 @@
from twext.enterprise.dal.record import fromTable
from twext.enterprise.dal.syntax import Delete, Select
from twext.enterprise.jobqueue import WorkItem, PeerConnectionPool
+from twext.python.log import Logger
from twisted.internet.defer import inlineCallbacks, returnValue
+from twistedcaldav.config import config
from txdav.caldav.datastore.sql import CalendarStoreFeatures
from txdav.common.datastore.sql_tables import schema
import datetime
import hashlib
-from twext.python.log import Logger
log = Logger()
@@ -163,7 +164,27 @@
group = property(
lambda self: "{0}, {1}".format(self.groupID, self.resourceID)
)
+
+ @classmethod
+ @inlineCallbacks
+ def _schedule(cls, txn, eventID, groupID, seconds):
+ notBefore = datetime.datetime.utcnow() + datetime.timedelta(seconds=seconds)
+ log.debug(
+ "scheduling group reconciliation for "
+ "({resourceID}, {groupID},): {when}",
+ resourceID=eventID,
+ groupID=groupID,
+ when=notBefore
+ )
+ wp = yield txn.enqueue(
+ cls,
+ resourceID=eventID,
+ groupID=groupID,
+ notBefore=notBefore,
+ )
+ returnValue(wp)
+
@inlineCallbacks
def doWork(self):
@@ -413,27 +434,13 @@
wps = []
for [eventID] in rows:
-
- notBefore = (
- datetime.datetime.utcnow() +
- datetime.timedelta(seconds=10)
+ wp = yield GroupAttendeeReconciliationWork._schedule(
+ txn,
+ eventID=eventID,
+ groupID=groupID,
+ seconds=float(config.GroupAttendees.ReconciliationDelaySeconds)
)
- log.debug(
- "scheduling group reconciliation for "
- "({resourceID}, {groupID},): {when}",
- resourceID=eventID,
- groupID=groupID,
- when=notBefore
- )
-
- wp = yield txn.enqueue(
- GroupAttendeeReconciliationWork,
- resourceID=eventID,
- groupID=groupID,
- notBefore=notBefore
- )
wps.append(wp)
-
returnValue(tuple(wps))
Modified: CalendarServer/trunk/txdav/who/test/test_group_attendees.py
===================================================================
--- CalendarServer/trunk/txdav/who/test/test_group_attendees.py 2014-05-02 02:18:30 UTC (rev 13397)
+++ CalendarServer/trunk/txdav/who/test/test_group_attendees.py 2014-05-02 02:28:56 UTC (rev 13398)
@@ -38,7 +38,8 @@
@inlineCallbacks
def setUp(self):
- self.patch(config.Scheduling.Options, "AllowGroupAsAttendee", "True")
+ self.patch(config.GroupAttendees, "Enabled", "True")
+ self.patch(config.GroupAttendees, "ReconciliationDelaySeconds", "0")
yield super(GroupAttendeeReconciliation, self).setUp()
self.xmlService = xmlService(self.mktemp(), xmlData=None)
@@ -794,7 +795,9 @@
wps = yield groupCacher.refreshGroup(self.transactionUnderTest(), "20000000-0000-0000-0000-000000000001")
self.assertEqual(len(wps), 0)
+ test_groupChangeOldEvent.todo = "Doesn't work yet"
+
@inlineCallbacks
def test_groupRemovalFromDirectory(self):
"""
Modified: CalendarServer/trunk/txdav/who/vcard.py
===================================================================
--- CalendarServer/trunk/txdav/who/vcard.py 2014-05-02 02:18:30 UTC (rev 13397)
+++ CalendarServer/trunk/txdav/who/vcard.py 2014-05-02 02:28:56 UTC (rev 13398)
@@ -57,8 +57,8 @@
#"PHOTO": {"ENCODING": ("B",), "TYPE": ("JPEG",), },
"ADR": {"TYPE": ("WORK", "PREF", "POSTAL", "PARCEL",),
"LABEL": None, "GEO": None, },
- #"LABEL": {"TYPE": ("POSTAL", "PARCEL",)},
- #"TEL": {"TYPE": None, }, # None means param can contain can be anything
+ "LABEL": {"TYPE": ("POSTAL", "PARCEL",)},
+ #"TEL": {"TYPE": None, }, # None means param value can be anything
"EMAIL": {"TYPE": None, },
#"KEY": {"ENCODING": ("B",), "TYPE": ("PGPPUBILICKEY", "USERCERTIFICATE", "USERPKCS12DATA", "USERSMIMECERTIFICATE",)},
#"URL": {"TYPE": ("WEBLOG", "HOMEPAGE",)},
@@ -227,8 +227,10 @@
)
)
- # UNIMPLEMENTED
- # 3.2.2 LABEL
+ # 3.2.2 LABEL
+ #label = record.fields.get(CalFieldName.streetAddress)
+ if label:
+ vcard.addProperty(Property("LABEL", label.encode("utf-8"), params={"TYPE": ["POSTAL", "PARCEL", ]}))
#===================================================================
# 3.3 TELECOMMUNICATIONS ADDRESSING TYPES http://tools.ietf.org/html/rfc2426#section-3.3
@@ -241,7 +243,7 @@
preferredWorkParams = {"TYPE": ("WORK", "PREF", "INTERNET",), }
workParams = {"TYPE": ("WORK", "INTERNET",), }
params = preferredWorkParams
- for emailAddress in record.fields.get(FieldName.emailAddresses, []):
+ for emailAddress in record.fields.get(FieldName.emailAddresses, ()):
addUniqueProperty(Property("EMAIL", emailAddress.encode("utf-8"), params=params), ignoredParameters={"TYPE": ("PREF",)})
params = workParams
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20140501/fce38fc3/attachment-0001.html>
More information about the calendarserver-changes
mailing list