Re: Zasync on Zope 2.9

"Santi Camps" <[email protected]>
Newsgroups gmane.comp.web.zope.cps.devel
Message-ID <[email protected]>
I answer to myself :-)

Here there is a patch to make nuxeo.persistentqueue optional in ZAsync
Z29 branch, and to user OOBTree otherwise.

Perhaps it could be useful to someone else.   Do you think It could be
commited to the branch ?

Thanks a lot
-- 
Santi Camps
Earcon S.L. - http://www.earcon.com
                  - http://www.kmkey.com



On 8/18/06, Santi Camps <[email protected]> wrote:
> Hi all,
>
> I'm trying to use Zasync on Zope 2.9, from the branch:
> http://svn.nuxeo.org/trac/pub/browser/vendor/zasync/branches/z29-nux
>
> But it seems to be a dependence with nuxeo.persisentqueue, which I'm
> not able to find.   Is this software public ?  If yes, where I can get
> it ?
>
> "    import manager
>   File "/usr/local/kmcps/zope/Products/zasync/manager.py", line 45, in ?
>     from nuxeo.persistentqueue.persistentqueue import PersistentQueue
> ImportError: No module named nuxeo.persistentqueue.persistentqueue
> "
>
> Thanks in advance
> --
> Santi Camps
> Earcon S.L. - http://www.earcon.com
>                   - http://www.kmkey.com
>

_______________________________________________
cps-devel mailing list
http://lists.nuxeo.com/mailman/listinfo/cps-devel
patch_manager.py (text/x-python, 3 KB)
--- /tmp/z29-nux/manager.py	2006-08-21 11:51:10.000000000 +0200
+++ manager.py	2006-08-21 11:00:55.000000000 +0200
@@ -42,7 +42,10 @@
 from Products.Sessions.BrowserIdManager import BROWSERID_MANAGER_NAME
 from AccessControl.SecurityInfo import allow_class
 
-from nuxeo.persistentqueue.persistentqueue import PersistentQueue
+try:
+    from nuxeo.persistentqueue.persistentqueue import PersistentQueue
+except ImportError:
+    PersistentQueue = None
 
 import permissions, bforests, interfaces
 
@@ -466,7 +469,7 @@
 
 def getDeferredInfo(context, info, sort_field=None, reverse=False):
     res = []
-    if isinstance(info, PersistentQueue):
+    if PersistentQueue and isinstance(info, PersistentQueue):
         ditems = info
     else:
         ditems = info.values()
@@ -542,7 +545,10 @@
         if id is not None:
             self.id = id
         # items to be picked up by zasync
-        self._new = PersistentQueue()
+        if PersistentQueue:
+            self._new = PersistentQueue()
+        else:
+            self._new = OOBTree.OOBTree()
         # items collected by zasync from the queue
         self._accepted = OOBTree.OOBTree()
         # long term cache
@@ -663,7 +669,8 @@
         d.key = key
         d.id = repr(key)
         d.local_key = randomizer
-        self._new.append(d)
+        if PersistentQueue: self._new.append(d)
+        else: self._new[key] = d
         wrapped = d.__of__(self)
         wrapped.manage_fixupOwnershipAfterAdd()
         user=getSecurityManager().getUser()
@@ -688,10 +695,14 @@
     security.declareProtected(
         permissions.MakeAsynchronousApplicationCalls, 'getDeferred')
     def getDeferred(self, d_id, default=None):
-        for src in self._new:
-            if src.key == d_id:
-                return src.__of__(self)
-        for src in (self._accepted, self._resolved):
+        if PersistentQueue:
+            for src in self._new:
+                if src.key == d_id:
+                    return src.__of__(self)
+            where_to_search = (self._accepted, self._resolved)
+        else:
+            where_to_search = (self._new, self._accepted, self._resolved)
+        for src in where_to_search:
             res = src.get(d_id)
             if res is not None:
                 return res.__of__(self)
@@ -768,15 +779,21 @@
 
     security.declarePrivate('acceptAll')
     def acceptAll(self):
-        new = self._new
-        for d in new:
-            self._accepted[d.key] = d
-        res = []
-        if new:
-            res = new[:]
-        while new:
-            new.pop(0)
-        return res
+        if PersistentQueue:
+            new = self._new
+            for d in new:
+                self._accepted[d.key] = d
+            res = []
+            if new:
+                res = new[:]
+            while new:
+                new.pop(0)
+            return res
+        else:
+            self._accepted.update(self._new)
+            res = self._new.values()
+            self._new.clear()
+            return res
 
     security.declarePrivate('getAcceptedCalls')
     def getAcceptedCalls(self):
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.