ng.base.itemsfilter
2009-08-13 11:06Продукт ng.base.itemsfilter предоставляет основу для создания фильтров и отбора с их помощью элеметов контейнера, удовлетворяющих условиям, заданным фильтром.
Продукт
| Название: | |
| ng.base.itemsfilter | |
| Репозиторий |
Краткое описание пакета ng.base.itemsfilter
Пакет предоставляет основу для создания фильтров, позволяющих отобрать содержимое контейнера по некоторому условию.
Использование
Использование пакета включает в себя создание фильтра и его последующее использование. Фильтр наследуюется от класса ItemsFilterCondition и регистрируется как адаптер к интерфейсу IItemsFilterCondition с указанием имени. Зарегистрированный фильтр в последствии может вызываться по имени, указанному при регистрации.
Фильтр, отбирающий объекты, для которых установлен флаг isselected интерфейса ISomeSelection, определяется следующим образом:
from ng.base.itemsfilter.itemsfiltercondition import ItemsFilterCondition
from interfaces import ISomeSelection
class SomeSelectionFilter(ItemsFilterCondition) :
def __call__(self) :
try :
return ISomeSelection(self.context).is_selected
except TypeErrror :
return False
Фильтр нужно зарегистрировать в configure.zcml как именованный адаптер:
<zope:adapter for="zope.app.container.interfaces.IContained" factory = ".someselectionfilter.SomeSelection" name="someselection" />
Для отбора элементов контейнера при помощи фильтра someselection контейнейнер приводится к интерфейсу IItemsFilter. Этот интерфейс позволяет обращаться ко всем зарегистрированным фильтрам по имени, как к элементам словаря:
from ng.base.itemsfilter.interfaces import IItemsFilter
def selected(context) :
return IItemsFilter(context)["someselection"].values()
Использование зарегистрированных фильтров позволяет вынести в отдельные модули и централизовано использовать все условия отбора, что упрощает и упорядочивает код, облегчая его повторное условие. В настоящее время в стадии разработки находится модуль, выполняющий кеширование отобранных объектов.


