From: Jérôme <rom...@ya...> - 2008-11-29 07:21:47
|
Hi devs, Trying to add Filters/rules/obj/MatchesObjFilter rules based on Filters/rules/_MatchesFilterBase.py, seems that _MatchesFilterBase.py is still using old model (Filters.SystemFilters, Filters.CustomFilters) ... On Filters/__init__.py Gramps calls SYSTEM_FILTERS, CUSTOM_FILTERS (const.py) but does GRAMPS still need a system_filter.xml ??? For me, system_filter.xml was on previous sources, maybe deprecated by using current report/tool framework and Exporter. http://gramps.svn.sourceforge.net/viewvc/gramps/branches/gramps20/gramps2/src/system_filters.xml Also, if possible, maybe to call GenericFilterFactory(namespace) present on Filters/_GenericFilter.py for a more generic code really based on base ? Ex: I planned to add a MatchesFamilyFilter rule on Person. I thought on something like : class MatchesFamilyFilter(MatchesFilterBase): """ Rule that checks against another filter. This is a base rule for subclassing by specific objects. Subclasses need to define the namespace class attribute. """ labels = [_('Family filter name:')] name = _('Persons with family matching the <family filter>') description = _("Matches persons who have family that match a certain" " family filter") category = _('General filters') # we want to have this filter show family filters namespace = 'Family' but looking at MatchesEventFilter.py, MatchesFilterBase is not really used, just find_filter() function, if so, sounds like "class MatchesEventFilter(Rule)" or it was planned to only use subclass for filter ? class MatchesEventFilter(MatchesFilterBase): """ Rule that checks against another filter. This is a base rule for subclassing by specific objects. Subclasses need to define the namespace class attribute. """ labels = [_('Event filter name:')] name = _('Persons with events matching the <event filter>') description = _("Matches persons who have events that match a certain" " event filter") category = _('General filters') # we want to have this filter show event filters namespace = 'Event' def prepare(self, db): MatchesFilterBase.prepare(self, db) self.MEF_filt = self.find_filter() def apply(self, db, person): if self.MEF_filt is None : return False eventlist = [x.ref for x in person.get_event_ref_list()] for eventhandle in eventlist: #check if event in event filter if self.MEF_filt.check(db, eventhandle): return True return False I do not know if there is a lot of changes, but maybe it is possible to clean-up MatchesFilterBase and some deprecated references ? To get something like GenericFilterFactory(namespace) present on Filters/_GenericFilter.py for MatchesFilerBase.py and to remove Filters.SystemFilters on code for filter framework : /Filters/_FilterComboBox.py /Filters/_FilterMenu.py /Filters/__init__.py /Filters/Rules/MatchesFilterBase.py const.py.in Changes will be on MatchesFilterBase rule and no more on each "/object/MatchesFilters.py" ? And if the MatchesFilter rule does not follow MatchesFilterBase, just keep the current code but is it still a subclass ? Jérôme |