[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