related to 4336: added regex to name filter
svn: r16223
This commit is contained in:
		| @@ -27,6 +27,7 @@ | ||||
| # | ||||
| #------------------------------------------------------------------------- | ||||
| from gen.ggettext import sgettext as _ | ||||
| import re | ||||
|  | ||||
| #------------------------------------------------------------------------- | ||||
| # | ||||
| @@ -54,7 +55,8 @@ class HasNameOf(Rule): | ||||
|                     _('Single Surname:'), | ||||
|                     _('Connector'), | ||||
|                     _('Patronymic:'), | ||||
|                     _('Family Nick Name:')] | ||||
|                     _('Family Nick Name:'), | ||||
|                     _('Regular-Expression matching:')] | ||||
|     name        = _('People with the <name>') | ||||
|     description = _("Matches people with a specified (partial) name") | ||||
|     category    = _('General filters') | ||||
| @@ -72,6 +74,10 @@ class HasNameOf(Rule): | ||||
|         self.surn = self.list[7].upper() | ||||
|         self.con = self.list[8].upper() | ||||
|         self.patr = self.list[9].upper() | ||||
|         if len(self.list) >= 12: | ||||
|             self.regular_expression = bool(int(self.list[11])) | ||||
|         else: | ||||
|             self.regular_expression = False | ||||
|          | ||||
|     def apply(self, db, person): | ||||
|         for name in [person.get_primary_name()] + person.get_alternate_names(): | ||||
| @@ -88,32 +94,60 @@ class HasNameOf(Rule): | ||||
|             valpatr = 0 | ||||
|             if not self.patr: | ||||
|                 valpatr = 1 | ||||
|             if self.firstn and name.get_first_name().upper().find(self.firstn) == -1: | ||||
|                 val = 0 | ||||
|             elif self.lastn and name.get_surname().upper().find(self.lastn) == -1: | ||||
|                 val = 0 | ||||
|             elif self.suffix and name.get_suffix().upper().find(self.surn) == -1: | ||||
|                 val = 0 | ||||
|             elif self.title and name.get_title().upper().find(self.title) == -1: | ||||
|                 val = 0 | ||||
|             elif self.calln and name.get_call_name().upper().find(self.calln) == -1: | ||||
|                 val = 0 | ||||
|             elif self.nick and name.get_nick_name().upper().find(self.nick) == -1: | ||||
|                 val = 0 | ||||
|             elif self.famnick and name.get_family_nick_name().upper().find(self.famnick) == -1: | ||||
|                 val = 0 | ||||
|             if self.regular_expression: | ||||
|                 if self.firstn and not re.match(self.firstn, name.get_first_name(), re.I|re.U|re.L): | ||||
|                     val = 0 | ||||
|                 elif self.lastn and not re.match(self.lastn, name.get_surname(), re.I|re.U|re.L): | ||||
|                     val = 0 | ||||
|                 elif self.suffix and not re.match(self.suffix, name.get_suffix(), re.I|re.U|re.L): | ||||
|                     val = 0 | ||||
|                 elif self.title and not re.match(self.title, name.get_title(), re.I|re.U|re.L): | ||||
|                     val = 0 | ||||
|                 elif self.calln and not re.match(self.calln, name.get_call_name(), re.I|re.U|re.L): | ||||
|                     val = 0 | ||||
|                 elif self.nick and not re.match(self.nick, name.get_nick_name(), re.I|re.U|re.L): | ||||
|                     val = 0 | ||||
|                 elif self.famnick and not re.match(self.famnick, name.get_family_nick_name(), re.I|re.U|re.L): | ||||
|                     val = 0 | ||||
|                 else: | ||||
|                     #obtain surnames | ||||
|                     for surn in name.get_surname_list(): | ||||
|                         if self.prefix and re.match(self.prefix, surn.get_prefix(), re.I|re.U|re.L): | ||||
|                             valpref = 1 | ||||
|                         if self.surn and re.match(self.surn, surn.get_surname(), re.I|re.U|re.L): | ||||
|                             valsurn = 1 | ||||
|                         if self.con and re.match(self.con, surn.get_connector(), re.I|re.U|re.L): | ||||
|                             valcon = 1 | ||||
|                         if self.patr and surn.get_origintype().value == NameOriginType.PATRONYMIC \ | ||||
|                                 and re.match(self.patr, surn.get_surname(), re.I|re.U|re.L): | ||||
|                             valpatr = 1 | ||||
|             else: | ||||
|                 #obtain surnames | ||||
|                 for surn in name.get_surname_list(): | ||||
|                     if self.prefix and surn.get_prefix().upper().find(self.prefix) != -1: | ||||
|                         valpref = 1 | ||||
|                     if self.surn and surn.get_surname().upper().find(self.surn) != -1: | ||||
|                         valsurn = 1 | ||||
|                     if self.con and surn.get_connector().upper().find(self.con) != -1: | ||||
|                         valcon = 1 | ||||
|                     if self.patr and surn.get_origintype().value == NameOriginType.PATRONYMIC \ | ||||
|                             and surn.get_surname().upper().find(self.patr) != -1: | ||||
|                         valpatr = 1 | ||||
|                 if self.firstn and name.get_first_name().upper().find(self.firstn) == -1: | ||||
|                     val = 0 | ||||
|                 elif self.lastn and name.get_surname().upper().find(self.lastn) == -1: | ||||
|                     val = 0 | ||||
|                 elif self.suffix and name.get_suffix().upper().find(self.surn) == -1: | ||||
|                     val = 0 | ||||
|                 elif self.title and name.get_title().upper().find(self.title) == -1: | ||||
|                     val = 0 | ||||
|                 elif self.calln and name.get_call_name().upper().find(self.calln) == -1: | ||||
|                     val = 0 | ||||
|                 elif self.nick and name.get_nick_name().upper().find(self.nick) == -1: | ||||
|                     val = 0 | ||||
|                 elif self.famnick and name.get_family_nick_name().upper().find(self.famnick) == -1: | ||||
|                     val = 0 | ||||
|                 else: | ||||
|                     #obtain surnames | ||||
|                     for surn in name.get_surname_list(): | ||||
|                         if self.prefix and surn.get_prefix().upper().find(self.prefix) != -1: | ||||
|                             valpref = 1 | ||||
|                         if self.surn and surn.get_surname().upper().find(self.surn) != -1: | ||||
|                             valsurn = 1 | ||||
|                         if self.con and surn.get_connector().upper().find(self.con) != -1: | ||||
|                             valcon = 1 | ||||
|                         if self.patr and surn.get_origintype().value == NameOriginType.PATRONYMIC \ | ||||
|                                 and surn.get_surname().upper().find(self.patr) != -1: | ||||
|                             valpatr = 1 | ||||
|             if val == 1 and valpref == 1 and valsurn == 1 and valcon == 1 and valpatr ==1: | ||||
|                 return True | ||||
|         return False | ||||
|   | ||||
		Reference in New Issue
	
	Block a user