From a7351c0cff0ffd4a2bb671ac97f2ca19bb0f6d69 Mon Sep 17 00:00:00 2001 From: helmutm Date: Thu, 16 Jul 2009 06:04:35 +0000 Subject: [PATCH] work in progress: filters git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@3457 fd906abe-77d9-0310-91a1-e0d9ade77398 --- expert/README.txt | 10 ++++++---- expert/filter.py | 13 +++++++++++-- expert/interfaces.py | 4 ++-- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/expert/README.txt b/expert/README.txt index 257f29b..4aece02 100644 --- a/expert/README.txt +++ b/expert/README.txt @@ -187,10 +187,12 @@ concepts) that are direct or indirect children of jim. >>> sorted(o.title for o in getObjects((qu & fltr.query()).apply())) [u'Doc 001', u'Doc 003'] - >>> #fltr.check(concepts['d001.txt']) - >>> #fltr.check(concepts['d002.txt']) - >>> #objs = fltr.apply(objs) - >>> #sorted(o.title for o in objs.values()) + >>> #fltr.check(resources['d001.txt']) + >>> #fltr.check(resources['d002.txt']) + >>> r1 = qu.apply() + >>> r2 = fltr.apply(dict(zip(r1, getObjects(r1)))) + >>> sorted(o.title for o in r2.values()) + [u'Doc 001', u'Doc 003'] Organizing Queries and Filters with Query Instances diff --git a/expert/filter.py b/expert/filter.py index 2c4eb5b..4ae52b0 100644 --- a/expert/filter.py +++ b/expert/filter.py @@ -28,22 +28,31 @@ from zope.interface import implements from cybertools.catalog.query import And from loops.expert.interfaces import IFilter from loops.expert.query import Children as ChildrenQuery +from loops import util class Filter(object): implements(IFilter) + query = None + def __init__(self, **kw): self.kwargs = kw def apply(self, objects, queryInstance=None): + qu = self.query() + #if qu is not None: + # return set(objects).intersection(qu.apply()) result = IOBTree() - for uid, obj in objects: - if self.check(obj, queryInstance): + for uid, obj in objects.items(): + if self.check(uid, obj, queryInstance): result[uid] = obj return result + def check(self, uid, obj, queryInstance=None): + return uid in self.query().apply() #.keys() + class Children(Filter): diff --git a/expert/interfaces.py b/expert/interfaces.py index e9c1912..1f5f582 100644 --- a/expert/interfaces.py +++ b/expert/interfaces.py @@ -26,7 +26,7 @@ from zope.interface import Interface, Attribute class IQuery(Interface): - """ A query or + """ A query. """ def apply(): @@ -68,7 +68,7 @@ class IFilter(Interface): intermediate results. """ - def check(obj, queryInstance=None): + def check(uid, obj, queryInstance=None): """ Return True if the object given should be included in the filter's result set, False otherwise.