7183: Fix source note citation filter

This commit is contained in:
Nick Hall 2014-01-25 19:37:35 +00:00
parent b2dec24edf
commit 3d094d7be1
4 changed files with 70 additions and 1 deletions

View File

@ -38,6 +38,7 @@ from ._hasnoteregexp import HasNoteRegexp
from ._hasreferencecountof import HasReferenceCountOf
from ._hassource import HasSource
from ._hassourceidof import HasSourceIdOf
from ._hassourcenoteregexp import HasSourceNoteRegexp
from ._matchesfilter import MatchesFilter
from ._matchespagesubstringof import MatchesPageSubstringOf
from ._matchesrepositoryfilter import MatchesRepositoryFilter
@ -58,6 +59,7 @@ editor_rule_list = [
HasReferenceCountOf,
HasSource,
HasSourceIdOf,
HasSourceNoteRegexp,
MatchesFilter,
MatchesPageSubstringOf,
MatchesRepositoryFilter,

View File

@ -0,0 +1,61 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2014 Nick Hall
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
"""
Filter rule to match citations whose source notes contain a substring or
match a regular expression.
"""
#-------------------------------------------------------------------------
#
# Standard python modules
#
#-------------------------------------------------------------------------
from ....const import GRAMPS_LOCALE as glocale
_ = glocale.translation.gettext
#-------------------------------------------------------------------------
#
# Gramps modules
#
#-------------------------------------------------------------------------
from .._hasnoteregexbase import HasNoteRegexBase
#-------------------------------------------------------------------------
#
# HasSourceNoteRegexp
#
#-------------------------------------------------------------------------
class HasSourceNoteRegexp(HasNoteRegexBase):
"""
Rule that checks if a citation has a source note that contains a
substring or matches a regular expression.
"""
name = _('Citations having source notes containing <text>')
description = _("Matches citations whose source notes contain a substring "
"or match a regular expression")
category = _('Source filters')
def apply(self, db, citation):
source = db.get_source_from_handle(citation.get_reference_handle())
if HasNoteRegexBase.apply(self, db, source):
return True
return False

View File

@ -46,7 +46,8 @@ from gramps.gen.constfunc import cuni
from gramps.gen.filters import GenericFilterFactory, rules
from gramps.gen.filters.rules.citation import (RegExpIdOf, HasCitation, HasTag,
HasNoteRegexp, MatchesFilter,
HasSource, RegExpSourceIdOf)
HasSource, RegExpSourceIdOf,
HasSourceNoteRegexp)
from gramps.gen.utils.string import conf_strings
GenericCitationFilter = GenericFilterFactory('Citation')
#-------------------------------------------------------------------------
@ -184,6 +185,10 @@ class CitationSidebarFilter(SidebarFilter):
rule = HasNoteRegexp([note], use_regex=regex)
generic_filter.add_rule(rule)
if src_note:
rule = HasSourceNoteRegexp([src_note], use_regex=regex)
generic_filter.add_rule(rule)
# check the Tag
if tag:
model = self.tag.get_model()

View File

@ -56,6 +56,7 @@ gramps/gen/filters/rules/citation/_hasnoteregexp.py
gramps/gen/filters/rules/citation/_hasreferencecountof.py
gramps/gen/filters/rules/citation/_hassource.py
gramps/gen/filters/rules/citation/_hassourceidof.py
gramps/gen/filters/rules/citation/_hassourcenoteregexp.py
gramps/gen/filters/rules/citation/_hastag.py
gramps/gen/filters/rules/citation/_matchesfilter.py
gramps/gen/filters/rules/citation/_matchespagesubstringof.py