Source code for opennode.oms.model.model.filtrable

from grokcore.component import Adapter, context
from zope.interface import Interface, implements

from opennode.oms.model.schema import get_schema_fields
from opennode.oms.model.model.base import IModel


class IFiltrable(Interface):
    def match(query):
        """Returns true if this object matches the given query."""


[docs]class ModelFiltrable(Adapter): implements(IFiltrable) context(IModel)
[docs] def match(self, query): keywords = [i.lower() for i in query.split(' ') if i] def matches(keyword, value): if isinstance(value, unicode): value = value.encode('utf-8') if isinstance(value, str): if keyword in value: return True if isinstance(value, list) or isinstance(value, set): if keyword in value: return True if keyword == value: return True return False def any_field(keyword): return any(matches(keyword, field.get(schema(self.context))) for name, field, schema in get_schema_fields(self.context)) return all(any_field(keyword) for keyword in keywords)
[docs]class DefaultFiltrable(Adapter): implements(IFiltrable) context(object)
[docs] def match(self, query): return False

This Page