Move get_filtered to BaseCollection

This commit is contained in:
Unrud 2018-09-04 03:33:48 +02:00
parent 5e0a387ed9
commit 979414ce85
2 changed files with 14 additions and 16 deletions

View File

@ -34,6 +34,7 @@ from importlib import import_module
import pkg_resources import pkg_resources
import vobject import vobject
from radicale.item import filter as radicale_filter
from radicale.log import logger from radicale.log import logger
INTERNAL_TYPES = ("multifilesystem",) INTERNAL_TYPES = ("multifilesystem",)
@ -204,10 +205,20 @@ class BaseCollection:
``filters_matched`` is a bool that indicates if ``filters`` are fully ``filters_matched`` is a bool that indicates if ``filters`` are fully
matched. matched.
This returns all events by default
""" """
return ((item, False) for item in self.get_all()) tag, start, end, simple = radicale_filter.simplify_prefilters(
filters, collection_tag=self.get_meta("tag"))
for item in self.get_all():
if tag:
if tag != item.component_name:
continue
istart, iend = item.time_range
if istart >= end or iend <= start:
continue
item_simple = simple and (start <= istart or iend <= end)
else:
item_simple = simple
yield item, item_simple
def has_uid(self, uid): def has_uid(self, uid):
"""Check if a UID exists in the collection.""" """Check if a UID exists in the collection."""

View File

@ -35,7 +35,6 @@ import vobject
from radicale import item as radicale_item from radicale import item as radicale_item
from radicale import pathutils, storage from radicale import pathutils, storage
from radicale.item import filter as radicale_filter
from radicale.log import logger from radicale.log import logger
@ -727,18 +726,6 @@ class Collection(storage.BaseCollection):
# are from os.listdir. # are from os.listdir.
return (self._get(href, verify_href=False) for href in self._list()) return (self._get(href, verify_href=False) for href in self._list())
def get_filtered(self, filters):
tag, start, end, simple = radicale_filter.simplify_prefilters(
filters, collection_tag=self.get_meta("tag"))
if not tag:
# no filter
yield from ((item, simple) for item in self.get_all())
return
for item in (self._get(h, verify_href=False) for h in self._list()):
istart, iend = item.time_range
if tag == item.component_name and istart < end and iend > start:
yield item, simple and (start <= istart or iend <= end)
def upload(self, href, item): def upload(self, href, item):
if not pathutils.is_safe_filesystem_path_component(href): if not pathutils.is_safe_filesystem_path_component(href):
raise pathutils.UnsafePathError(href) raise pathutils.UnsafePathError(href)