Autocomplete working in query_editor plugin
[myslice.git] / manifold / util / callback.py
diff --git a/manifold/util/callback.py b/manifold/util/callback.py
new file mode 100644 (file)
index 0000000..03e8280
--- /dev/null
@@ -0,0 +1,49 @@
+from manifold.operators      import LAST_RECORD
+import threading
+
+#------------------------------------------------------------------
+# Class callback
+#------------------------------------------------------------------
+
+class Callback:
+    def __init__(self, deferred=None, router=None, cache_id=None):
+    #def __init__(self, deferred=None, event=None, router=None, cache_id=None):
+        self.results = []
+        self._deferred = deferred
+
+        #if not self.event:
+        self.event = threading.Event()
+        #else:
+        #    self.event = event
+
+        # Used for caching...
+        self.router = router
+        self.cache_id = cache_id
+
+    def __call__(self, value):
+        # End of the list of records sent by Gateway
+        if value == LAST_RECORD:
+            if self.cache_id:
+                # Add query results to cache (expires in 30min)
+                #print "Result added to cached under id", self.cache_id
+                self.router.cache[self.cache_id] = (self.results, time.time() + CACHE_LIFETIME)
+
+            if self._deferred:
+                # Send results back using deferred object
+                self._deferred.callback(self.results)
+            else:
+                # Not using deferred, trigger the event to return results
+                self.event.set()
+            return self.event
+
+        # Not LAST_RECORD add the value to the results
+        self.results.append(value)
+
+    def wait(self):
+        self.event.wait()
+        self.event.clear()
+
+    def get_results(self):
+        self.wait()
+        return self.results
+