Преглед изворни кода

Add a pre_filtered_list method in collection. This allow filters optimizations

Florian Mounier пре 9 година
родитељ
комит
39823f8909
2 измењених фајлова са 10 додато и 1 уклоњено
  1. 9 0
      radicale/storage.py
  2. 1 1
      radicale/xmlutils.py

+ 9 - 0
radicale/storage.py

@@ -231,6 +231,15 @@ class BaseCollection:
         for href in set(hrefs):
             yield self.get(href)
 
+    def pre_filtered_list(self, filters):
+        """List collection items with optional pre filtering.
+
+        This could largely improve performance of reports depending on
+        the filters and this implementation.
+        This returns all event by default
+        """
+        return [self.get(href) for href, _ in self.list()]
+
     def has(self, href):
         """Check if an item exists by its href.
 

+ 1 - 1
radicale/xmlutils.py

@@ -837,7 +837,7 @@ def report(path, xml_request, collection):
         else:
             # Reference is a collection
             path = hreference
-            items = [collection.get(href) for href, etag in collection.list()]
+            items = collection.pre_filtered_list(filters)
 
         for item in items:
             if filters: