[CalendarServer-changes] [11028] CalendarServer/branches/users/cdaboo/store-scheduling/txdav/caldav/ datastore/sql.py

source_changes at macosforge.org source_changes at macosforge.org
Thu Apr 11 06:46:55 PDT 2013


Revision: 11028
          http://trac.calendarserver.org//changeset/11028
Author:   cdaboo at apple.com
Date:     2013-04-11 06:46:55 -0700 (Thu, 11 Apr 2013)
Log Message:
-----------
Checkpoint prior to merge from trunk.

Modified Paths:
--------------
    CalendarServer/branches/users/cdaboo/store-scheduling/txdav/caldav/datastore/sql.py

Modified: CalendarServer/branches/users/cdaboo/store-scheduling/txdav/caldav/datastore/sql.py
===================================================================
--- CalendarServer/branches/users/cdaboo/store-scheduling/txdav/caldav/datastore/sql.py	2013-04-11 13:34:51 UTC (rev 11027)
+++ CalendarServer/branches/users/cdaboo/store-scheduling/txdav/caldav/datastore/sql.py	2013-04-11 13:46:55 UTC (rev 11028)
@@ -1702,6 +1702,49 @@
 
 
     @inlineCallbacks
+    def doImplicitScheduling(self, component, inserting, update_state):
+
+        data_changed = False
+        did_implicit_action = False
+
+        # Do scheduling
+        if not self.calendar().isInbox():
+            scheduler = ImplicitScheduler()
+
+            # PUT
+            do_implicit_action, is_scheduling_resource = (yield scheduler.testImplicitSchedulingPUT(
+                self.calendar(),
+                None if inserting else self,
+                component,
+                internal_request=(update_state != ComponentUpdateState.NORMAL),
+            ))
+
+            if do_implicit_action and self.allowImplicitSchedule:
+
+                # Cannot do implicit in sharee's shared calendar
+                isShareeCollection = self.destinationparent.isShareeCollection()
+                if isShareeCollection:
+                    raise HTTPError(ErrorResponse(
+                        responsecode.FORBIDDEN,
+                        (calendarserver_namespace, "sharee-privilege-needed",),
+                        description="Sharee's cannot schedule"
+                    ))
+
+                new_calendar = (yield scheduler.doImplicitScheduling(self.schedule_tag_match))
+                if new_calendar:
+                    if isinstance(new_calendar, int):
+                        returnValue(new_calendar)
+                    else:
+                        self.calendar = new_calendar
+                        data_changed = True
+                did_implicit_action = True
+        else:
+            is_scheduling_resource = False
+
+        returnValue((is_scheduling_resource, data_changed, did_implicit_action,))
+
+
+    @inlineCallbacks
     def mergePerUserData(self, component, inserting):
         """
         Merge incoming calendar data with other user's per-user data in existing calendar data.
@@ -1831,28 +1874,28 @@
         # Default/duplicate alarms
         self.processAlarms(component, inserting)
 
-#        # Do scheduling
-#        implicit_result = (yield self.doImplicitScheduling())
-#        if isinstance(implicit_result, int):
-#            if implicit_result == ImplicitScheduler.STATUS_ORPHANED_CANCELLED_EVENT:
-#                raise ResourceDeletedError("Resource created but immediately deleted by the server.")
-#
-#            elif implicit_result == ImplicitScheduler.STATUS_ORPHANED_EVENT:
-#
-#                # Now forcibly delete the event
-#                if not inserting:
-#                    yield self.storeRemove()
-#                    raise ResourceDeletedError("Resource modified but immediately deleted by the server.")
-#                else:
-#                    raise AttendeeAllowedError("Attendee cannot create event for Organizer: %s" % (implicit_result,))
-#
-#            else:
-#                msg = "Invalid return status code from ImplicitScheduler: %s" % (implicit_result,)
-#                log.err(msg)
-#                raise InvalidObjectResourceError(msg)
-#        else:
-#            self.isScheduleObject, data_changed, did_implicit_action = implicit_result
+        # Do scheduling
+        implicit_result = (yield self.doImplicitScheduling())
+        if isinstance(implicit_result, int):
+            if implicit_result == ImplicitScheduler.STATUS_ORPHANED_CANCELLED_EVENT:
+                raise ResourceDeletedError("Resource created but immediately deleted by the server.")
 
+            elif implicit_result == ImplicitScheduler.STATUS_ORPHANED_EVENT:
+
+                # Now forcibly delete the event
+                if not inserting:
+                    yield self.storeRemove()
+                    raise ResourceDeletedError("Resource modified but immediately deleted by the server.")
+                else:
+                    raise AttendeeAllowedError("Attendee cannot create event for Organizer: %s" % (implicit_result,))
+
+            else:
+                msg = "Invalid return status code from ImplicitScheduler: %s" % (implicit_result,)
+                log.err(msg)
+                raise InvalidObjectResourceError(msg)
+        else:
+            self.isScheduleObject, data_changed, did_implicit_action = implicit_result
+
         # Always do the per-user data merge right before we store
         component = (yield self.mergePerUserData(component, inserting))
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20130411/02c2f9ea/attachment-0001.html>


More information about the calendarserver-changes mailing list