src/pyams_catalog/query.py
changeset 21 464671eede98
parent 15 551c55958cf3
child 44 32052893d519
--- a/src/pyams_catalog/query.py	Tue Jun 06 17:05:31 2017 +0200
+++ b/src/pyams_catalog/query.py	Tue Jun 27 13:41:57 2017 +0200
@@ -29,20 +29,38 @@
     def __init__(self, query):
         self.query = query
         self.intids = query_utility(IIntIds)
+        self.first = []
+        self.last = []
 
     def __iter__(self):
+        for item in self.first:
+            yield item
         intids = self.intids
-        if intids is None:
-            raise StopIteration
-        query = self.query
-        if isinstance(query, Query):
-            query = query.execute()
-        if isinstance(query, tuple):
-            query = query[1]
-        for oid in query:
-            target = intids.queryObject(oid)
-            if target is not None:
-                yield target
+        if intids is not None:
+            query = self.query
+            if isinstance(query, Query):
+                query = query.execute()
+            if isinstance(query, tuple):
+                query = query[1]
+            for oid in query:
+                if isinstance(oid, int):
+                    target = intids.queryObject(oid)
+                    if target is not None:
+                        yield target
+                else:
+                    yield oid
+        for item in self.last:
+            yield item
+
+    def prepend(self, items):
+        if isinstance(items, CatalogResultSet):
+            items = list(items)
+        self.first.extend(items)
+
+    def append(self, items):
+        if isinstance(items, CatalogResultSet):
+            items = list(items)
+        self.last.extend(items)
 
 
 def or_(source, added):