[CalendarServer-changes] [10850] CalendarServer/branches/users/sagen/testing

source_changes at macosforge.org source_changes at macosforge.org
Tue Mar 5 13:04:32 PST 2013


Revision: 10850
          http://trac.calendarserver.org//changeset/10850
Author:   sagen at apple.com
Date:     2013-03-05 13:04:32 -0800 (Tue, 05 Mar 2013)
Log Message:
-----------
Set notBefore based on config.Notifications.CoalesceSeconds

Modified Paths:
--------------
    CalendarServer/branches/users/sagen/testing/calendarserver/push/notifier.py
    CalendarServer/branches/users/sagen/testing/calendarserver/tap/util.py
    CalendarServer/branches/users/sagen/testing/calendarserver/tools/util.py
    CalendarServer/branches/users/sagen/testing/twext/enterprise/dal/record.py
    CalendarServer/branches/users/sagen/testing/twext/enterprise/dal/test/test_record.py
    CalendarServer/branches/users/sagen/testing/twext/enterprise/queue.py

Modified: CalendarServer/branches/users/sagen/testing/calendarserver/push/notifier.py
===================================================================
--- CalendarServer/branches/users/sagen/testing/calendarserver/push/notifier.py	2013-03-05 19:48:27 UTC (rev 10849)
+++ CalendarServer/branches/users/sagen/testing/calendarserver/push/notifier.py	2013-03-05 21:04:32 UTC (rev 10850)
@@ -18,8 +18,8 @@
 Notification framework for Calendar Server
 """
 
+import datetime
 from twext.python.log import LoggingMixIn, Logger
-
 from twisted.internet.defer import inlineCallbacks, succeed
 from twext.enterprise.dal.record import fromTable
 from twext.enterprise.queue import WorkItem
@@ -123,9 +123,10 @@
     work queue.
     """
 
-    def __init__(self, store, hostname, reactor=None):
+    def __init__(self, store, hostname, coalesceSeconds, reactor=None):
         self.store = store
         self.hostname = hostname
+        self.coalesceSeconds = coalesceSeconds
 
         if reactor is None:
             from twisted.internet import reactor
@@ -134,7 +135,10 @@
     @inlineCallbacks
     def send(self, id):
         txn = self.store.newTransaction()
-        yield txn.enqueue(PushNotificationWork, pushID=self.pushKeyForId(id))
+        notBefore = datetime.datetime.utcnow() + datetime.timedelta(
+            seconds=self.coalesceSeconds)
+        yield txn.enqueue(PushNotificationWork, pushID=self.pushKeyForId(id),
+            notBefore=notBefore)
         yield txn.commit()
 
     def newNotifier(self, label="default", id=None, prefix=None):

Modified: CalendarServer/branches/users/sagen/testing/calendarserver/tap/util.py
===================================================================
--- CalendarServer/branches/users/sagen/testing/calendarserver/tap/util.py	2013-03-05 19:48:27 UTC (rev 10849)
+++ CalendarServer/branches/users/sagen/testing/calendarserver/tap/util.py	2013-03-05 21:04:32 UTC (rev 10850)
@@ -225,7 +225,8 @@
     if config.Notifications.Enabled:
         # FIXME: NotifierFactory needs reference to the store in order
         # to get a txn in order to create a Work item
-        notifierFactory = NotifierFactory(None, config.ServerHostName)
+        notifierFactory = NotifierFactory(None, config.ServerHostName,
+            config.Notifications.CoalesceSeconds)
     else:
         notifierFactory = None
     quota = config.UserQuota

Modified: CalendarServer/branches/users/sagen/testing/calendarserver/tools/util.py
===================================================================
--- CalendarServer/branches/users/sagen/testing/calendarserver/tools/util.py	2013-03-05 19:48:27 UTC (rev 10849)
+++ CalendarServer/branches/users/sagen/testing/calendarserver/tools/util.py	2013-03-05 21:04:32 UTC (rev 10850)
@@ -81,6 +81,7 @@
                     # to get a txn in order to create a Work item
                     notifierFactory = NotifierFactory(
                         None, config.ServerHostName,
+                        config.Notifications.CoalesceSeconds,
                     )
                 else:
                     notifierFactory = None

Modified: CalendarServer/branches/users/sagen/testing/twext/enterprise/dal/record.py
===================================================================
--- CalendarServer/branches/users/sagen/testing/twext/enterprise/dal/record.py	2013-03-05 19:48:27 UTC (rev 10849)
+++ CalendarServer/branches/users/sagen/testing/twext/enterprise/dal/record.py	2013-03-05 21:04:32 UTC (rev 10850)
@@ -193,7 +193,7 @@
         results = (yield cls.query(transaction,
                                 cls._primaryKeyComparison(primaryKey)))
         if len(results) != 1:
-            returnValue(None)
+            raise NoSuchRecord()
         else:
             returnValue(results[0])
 

Modified: CalendarServer/branches/users/sagen/testing/twext/enterprise/dal/test/test_record.py
===================================================================
--- CalendarServer/branches/users/sagen/testing/twext/enterprise/dal/test/test_record.py	2013-03-05 19:48:27 UTC (rev 10849)
+++ CalendarServer/branches/users/sagen/testing/twext/enterprise/dal/test/test_record.py	2013-03-05 21:04:32 UTC (rev 10850)
@@ -98,6 +98,16 @@
 
 
     @inlineCallbacks
+    def test_missingLoad(self):
+        """
+        Try loading an row which doesn't exist
+        """
+        txn = self.pool.connection()
+        yield txn.execSQL("insert into ALPHA values (:1, :2)", [234, "one"])
+        self.assertFailure(TestRecord.load(txn, 456), NoSuchRecord)
+
+
+    @inlineCallbacks
     def test_simpleCreate(self):
         """
         When a record object is created, a row with matching column values will

Modified: CalendarServer/branches/users/sagen/testing/twext/enterprise/queue.py
===================================================================
--- CalendarServer/branches/users/sagen/testing/twext/enterprise/queue.py	2013-03-05 19:48:27 UTC (rev 10849)
+++ CalendarServer/branches/users/sagen/testing/twext/enterprise/queue.py	2013-03-05 21:04:32 UTC (rev 10850)
@@ -97,7 +97,7 @@
 from twext.enterprise.dal.syntax import SchemaSyntax, Lock, NamedValue
 
 from twext.enterprise.dal.model import ProcedureCall
-from twext.enterprise.dal.record import Record, fromTable
+from twext.enterprise.dal.record import Record, fromTable, NoSuchRecord
 from twisted.python.failure import Failure
 
 from twext.enterprise.dal.model import Table, Schema, SQLType, Constraint
@@ -826,8 +826,8 @@
     @inlineCallbacks
     def work(txn):
         workItemClass = WorkItem.forTable(table)
-        workItem = yield workItemClass.load(txn, workID)
-        if workItem is not None:
+        try:
+            workItem = yield workItemClass.load(txn, workID)
             if workItem.group is not None:
                 yield NamedLock.acquire(txn, workItem.group)
             # TODO: what if we fail?  error-handling should be recorded someplace,
@@ -836,6 +836,9 @@
             yield workItem.delete()
             # TODO: verify that workID is the primary key someplace.
             yield workItem.doWork()
+        except NoSuchRecord:
+            # The record has already been removed
+            pass
     return inTransaction(txnFactory, work)
 
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20130305/e64a5536/attachment.html>


More information about the calendarserver-changes mailing list