* src/GenericFilter.py: Catch invalid input in some filters;
(old_names_2_class): Add one name for full 1.0.11 compatibility; (FilterParser): Properly catch invalid rule names and invalid module/class names. svn: r4628
This commit is contained in:
@@ -1,3 +1,9 @@
|
|||||||
|
2005-05-19 Martin Hawlisch <Martin.Hawlisch@gmx.de>
|
||||||
|
* src/GenericFilter.py: Catch invalid input in some filters;
|
||||||
|
(old_names_2_class): Add one name for full 1.0.11 compatibility;
|
||||||
|
(FilterParser): Properly catch invalid rule names and invalid
|
||||||
|
module/class names.
|
||||||
|
|
||||||
2005-05-18 Don Allingham <don@gramps-project.org>
|
2005-05-18 Don Allingham <don@gramps-project.org>
|
||||||
* src/dates/Date_de.py: handle dates in the form of dd. mon year
|
* src/dates/Date_de.py: handle dates in the form of dd. mon year
|
||||||
|
|
||||||
|
@@ -170,9 +170,12 @@ class RelationshipPathBetween(Rule):
|
|||||||
def prepare(self,db):
|
def prepare(self,db):
|
||||||
self.db = db
|
self.db = db
|
||||||
self.map = {}
|
self.map = {}
|
||||||
|
try:
|
||||||
root1_handle = db.get_person_from_gramps_id(self.list[0]).get_handle()
|
root1_handle = db.get_person_from_gramps_id(self.list[0]).get_handle()
|
||||||
root2_handle = db.get_person_from_gramps_id(self.list[1]).get_handle()
|
root2_handle = db.get_person_from_gramps_id(self.list[1]).get_handle()
|
||||||
self.init_list(root1_handle,root2_handle)
|
self.init_list(root1_handle,root2_handle)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
self.map = {}
|
self.map = {}
|
||||||
@@ -366,9 +369,11 @@ class IsDescendantOf(Rule):
|
|||||||
first = 1
|
first = 1
|
||||||
except IndexError:
|
except IndexError:
|
||||||
first = 1
|
first = 1
|
||||||
|
try:
|
||||||
root_handle = db.get_person_from_gramps_id(self.list[0]).get_handle()
|
root_handle = db.get_person_from_gramps_id(self.list[0]).get_handle()
|
||||||
self.init_list(root_handle,first)
|
self.init_list(root_handle,first)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
self.map = {}
|
self.map = {}
|
||||||
@@ -449,8 +454,11 @@ class IsLessThanNthGenerationDescendantOf(Rule):
|
|||||||
def prepare(self,db):
|
def prepare(self,db):
|
||||||
self.db = db
|
self.db = db
|
||||||
self.map = {}
|
self.map = {}
|
||||||
|
try:
|
||||||
root_handle = db.get_person_from_gramps_id(self.list[0]).get_handle()
|
root_handle = db.get_person_from_gramps_id(self.list[0]).get_handle()
|
||||||
self.init_list(root_handle,0)
|
self.init_list(root_handle,0)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
self.map = {}
|
self.map = {}
|
||||||
@@ -491,8 +499,11 @@ class IsMoreThanNthGenerationDescendantOf(Rule):
|
|||||||
def prepare(self,db):
|
def prepare(self,db):
|
||||||
self.db = db
|
self.db = db
|
||||||
self.map = {}
|
self.map = {}
|
||||||
|
try:
|
||||||
root_handle = db.get_person_from_gramps_id(self.list[0]).get_handle()
|
root_handle = db.get_person_from_gramps_id(self.list[0]).get_handle()
|
||||||
self.init_list(root_handle,0)
|
self.init_list(root_handle,0)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
self.map = {}
|
self.map = {}
|
||||||
@@ -613,9 +624,12 @@ class IsDescendantFamilyOf(Rule):
|
|||||||
return self.search(handle,1)
|
return self.search(handle,1)
|
||||||
|
|
||||||
def search(self,handle,val):
|
def search(self,handle,val):
|
||||||
|
try:
|
||||||
if handle == self.db.get_person_from_gramps_id(self.list[0]).get_handle():
|
if handle == self.db.get_person_from_gramps_id(self.list[0]).get_handle():
|
||||||
self.map[handle] = 1
|
self.map[handle] = 1
|
||||||
return 1
|
return 1
|
||||||
|
except:
|
||||||
|
return 0
|
||||||
|
|
||||||
p = self.db.get_person_from_handle(handle)
|
p = self.db.get_person_from_handle(handle)
|
||||||
for (f,r1,r2) in p.get_parent_family_handle_list():
|
for (f,r1,r2) in p.get_parent_family_handle_list():
|
||||||
@@ -660,8 +674,11 @@ class IsAncestorOf(Rule):
|
|||||||
first = 1
|
first = 1
|
||||||
except IndexError:
|
except IndexError:
|
||||||
first = 1
|
first = 1
|
||||||
|
try:
|
||||||
root_handle = db.get_person_from_gramps_id(self.list[0]).get_handle()
|
root_handle = db.get_person_from_gramps_id(self.list[0]).get_handle()
|
||||||
self.init_ancestor_list(db,root_handle,first)
|
self.init_ancestor_list(db,root_handle,first)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
self.map = {}
|
self.map = {}
|
||||||
@@ -748,8 +765,11 @@ class IsLessThanNthGenerationAncestorOf(Rule):
|
|||||||
def prepare(self,db):
|
def prepare(self,db):
|
||||||
self.db = db
|
self.db = db
|
||||||
self.map = {}
|
self.map = {}
|
||||||
|
try:
|
||||||
root_handle = db.get_person_from_gramps_id(self.list[0]).get_handle()
|
root_handle = db.get_person_from_gramps_id(self.list[0]).get_handle()
|
||||||
self.init_ancestor_list(root_handle,0)
|
self.init_ancestor_list(root_handle,0)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
self.map = {}
|
self.map = {}
|
||||||
@@ -797,8 +817,11 @@ class IsMoreThanNthGenerationAncestorOf(Rule):
|
|||||||
def prepare(self,db):
|
def prepare(self,db):
|
||||||
self.db = db
|
self.db = db
|
||||||
self.map = {}
|
self.map = {}
|
||||||
|
try:
|
||||||
root_handle = db.get_person_from_gramps_id(self.list[0]).get_handle()
|
root_handle = db.get_person_from_gramps_id(self.list[0]).get_handle()
|
||||||
self.init_ancestor_list(root_handle,0)
|
self.init_ancestor_list(root_handle,0)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
self.map = []
|
self.map = []
|
||||||
@@ -1788,11 +1811,15 @@ class HasSourceOf(Rule):
|
|||||||
description = _('Matches people who have a particular source')
|
description = _('Matches people who have a particular source')
|
||||||
|
|
||||||
def prepare(self,db):
|
def prepare(self,db):
|
||||||
|
try:
|
||||||
self.source_handle = db.get_source_from_gramps_id(self.list[0]).get_handle()
|
self.source_handle = db.get_source_from_gramps_id(self.list[0]).get_handle()
|
||||||
|
except:
|
||||||
|
self.source_handle = None
|
||||||
|
|
||||||
def apply(self,db,handle):
|
def apply(self,db,handle):
|
||||||
|
if not self.source_handle:
|
||||||
|
return False
|
||||||
p = db.get_person_from_handle(handle)
|
p = db.get_person_from_handle(handle)
|
||||||
|
|
||||||
return p.has_source_reference( self.source_handle)
|
return p.has_source_reference( self.source_handle)
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
@@ -1948,6 +1975,8 @@ old_names_2_class = {
|
|||||||
"Is a descendant of filter match": IsDescendantOfFilterMatch,
|
"Is a descendant of filter match": IsDescendantOfFilterMatch,
|
||||||
"Is a descendant of person not more than N generations away":
|
"Is a descendant of person not more than N generations away":
|
||||||
IsLessThanNthGenerationDescendantOf,
|
IsLessThanNthGenerationDescendantOf,
|
||||||
|
"Is a descendant of person at least N generations away":
|
||||||
|
IsMoreThanNthGenerationDescendantOf,
|
||||||
"Is an descendant of person at least N generations away" :
|
"Is an descendant of person at least N generations away" :
|
||||||
IsMoreThanNthGenerationDescendantOf,
|
IsMoreThanNthGenerationDescendantOf,
|
||||||
"Is a child of filter match" : IsChildOfFilterMatch,
|
"Is a child of filter match" : IsChildOfFilterMatch,
|
||||||
@@ -2147,21 +2176,32 @@ class FilterParser(handler.ContentHandler):
|
|||||||
if save_name in old_names_2_class.keys():
|
if save_name in old_names_2_class.keys():
|
||||||
self.r = old_names_2_class[save_name]
|
self.r = old_names_2_class[save_name]
|
||||||
else:
|
else:
|
||||||
module_name,class_name = save_name.split('.')
|
mc_match = save_name.split('.')
|
||||||
if class_name not in [item.__name__ for item in editor_rule_list]:
|
if len(mc_match) != 2:
|
||||||
|
# rule has an old style name, that is not in old_names_2_class
|
||||||
|
# or is not in the format "module.class"
|
||||||
print "ERROR: Filter rule '%s' in filter '%s' not found!" % (
|
print "ERROR: Filter rule '%s' in filter '%s' not found!" % (
|
||||||
class_name,self.f.get_name())
|
save_name,self.f.get_name())
|
||||||
|
self.r = None
|
||||||
|
return
|
||||||
|
module_name,class_name = mc_match
|
||||||
|
try:
|
||||||
if module_name == self.__module__:
|
if module_name == self.__module__:
|
||||||
exec 'self.r = %s' % class_name
|
exec 'self.r = %s' % class_name
|
||||||
else:
|
else:
|
||||||
exec 'import %s' % module_name
|
exec 'import %s' % module_name
|
||||||
exec 'self.r = %s.%s' % (module_name,class_name)
|
exec 'self.r = %s.%s' % (module_name,class_name)
|
||||||
|
except (ImportError,NameError):
|
||||||
|
print "ERROR: Filter rule '%s' in filter '%s' not found!" % (
|
||||||
|
save_name,self.f.get_name())
|
||||||
|
self.r = None
|
||||||
|
return
|
||||||
self.a = []
|
self.a = []
|
||||||
elif tag == "arg":
|
elif tag == "arg":
|
||||||
self.a.append(attrs['value'])
|
self.a.append(attrs['value'])
|
||||||
|
|
||||||
def endElement(self,tag):
|
def endElement(self,tag):
|
||||||
if tag == "rule":
|
if tag == "rule" and self.r != None:
|
||||||
rule = self.r(self.a)
|
rule = self.r(self.a)
|
||||||
self.f.add_rule(rule)
|
self.f.add_rule(rule)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user