From fe6c5895b26918bcb250d712271d7e34431acd44 Mon Sep 17 00:00:00 2001 From: Nick Hall Date: Tue, 17 May 2016 22:23:36 +0100 Subject: [PATCH] Improve pylint score of some new files The programming guidelines require that new files have a pylint score of 9.0 or greater. --- .../gen/filters/rules/family/_isancestorof.py | 13 +- .../filters/rules/family/_isdescendantof.py | 13 +- .../filters/rules/test/event_rules_test.py | 100 +++- .../filters/rules/test/family_rules_test.py | 159 ++++-- .../filters/rules/test/person_rules_test.py | 473 ++++++++++++------ .../filters/rules/test/place_rules_test.py | 110 +++- gramps/gen/utils/test/file_test.py | 37 +- gramps/plugins/tool/findloop.py | 84 ++-- 8 files changed, 724 insertions(+), 265 deletions(-) diff --git a/gramps/gen/filters/rules/family/_isancestorof.py b/gramps/gen/filters/rules/family/_isancestorof.py index aad5fc808..fa2aa0440 100644 --- a/gramps/gen/filters/rules/family/_isancestorof.py +++ b/gramps/gen/filters/rules/family/_isancestorof.py @@ -19,6 +19,10 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # +""" +Rule that checks for a family that is an ancestor of a specified family. +""" + #------------------------------------------------------------------------- # # Gramps modules @@ -37,9 +41,9 @@ class IsAncestorOf(Rule): """ Rule that checks for a family that is an ancestor of a specified family. """ - labels = [ _('ID:'), _('Inclusive:') ] - name = _('Ancestor families of ') - category = _('General filters') + labels = [_('ID:'), _('Inclusive:')] + name = _('Ancestor families of ') + category = _('General filters') description = _('Matches ancestor families of the specified family') def prepare(self, db): @@ -55,6 +59,9 @@ class IsAncestorOf(Rule): return family.handle in self.map def init_list(self, db, family, first): + """ + Initialise family handle list. + """ if not family: return if family.handle in self.map: diff --git a/gramps/gen/filters/rules/family/_isdescendantof.py b/gramps/gen/filters/rules/family/_isdescendantof.py index 16a7f1138..76bbac77a 100644 --- a/gramps/gen/filters/rules/family/_isdescendantof.py +++ b/gramps/gen/filters/rules/family/_isdescendantof.py @@ -19,6 +19,10 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # +""" +Rule that checks for a family that is a descendant of a specified family. +""" + #------------------------------------------------------------------------- # # Gramps modules @@ -37,9 +41,9 @@ class IsDescendantOf(Rule): """ Rule that checks for a family that is a descendant of a specified family. """ - labels = [ _('ID:'), _('Inclusive:') ] - name = _('Descendant families of ') - category = _('General filters') + labels = [_('ID:'), _('Inclusive:')] + name = _('Descendant families of ') + category = _('General filters') description = _('Matches descendant families of the specified family') def prepare(self, db): @@ -55,6 +59,9 @@ class IsDescendantOf(Rule): return family.handle in self.map def init_list(self, db, family, first): + """ + Initialise family handle list. + """ if not family: return if not first: diff --git a/gramps/gen/filters/rules/test/event_rules_test.py b/gramps/gen/filters/rules/test/event_rules_test.py index 525c003b3..e3059fef6 100644 --- a/gramps/gen/filters/rules/test/event_rules_test.py +++ b/gramps/gen/filters/rules/test/event_rules_test.py @@ -27,42 +27,70 @@ from gramps.gen.merge.diff import import_as_dict from gramps.cli.user import User from gramps.gen.filters import GenericFilterFactory -from gramps.gen.filters.rules.event import * +from gramps.gen.filters.rules.event import ( + AllEvents, HasType, HasIdOf, HasGallery, RegExpIdOf, HasCitation, HasNote, + HasNoteRegexp, HasReferenceCountOf, HasSourceCount, EventPrivate, + MatchesSourceConfidence, HasAttribute, HasData, ChangedSince, HasTag, + HasDayOfWeek) GenericEventFilter = GenericFilterFactory('Event') class BaseTest(unittest.TestCase): + """ + Event rule tests. + """ @classmethod def setUpClass(cls): + """ + Import example database. + """ cls.db = import_as_dict("example/gramps/example.gramps", User()) def filter_with_rule(self, rule): + """ + Apply a filter with the given rule. + """ filter_ = GenericEventFilter() filter_.add_rule(rule) results = filter_.apply(self.db) return set(results) - def test_AllEvents(self): + def test_allevents(self): + """ + Test AllEvents rule. + """ rule = AllEvents([]) self.assertEqual(len(self.filter_with_rule(rule)), self.db.get_number_of_events()) - def test_HasType(self): + def test_hastype(self): + """ + Test HasType rule. + """ rule = HasType(['Burial']) self.assertEqual(len(self.filter_with_rule(rule)), 296) - def test_HasIdOf(self): + def test_hasidof(self): + """ + Test HasIdOf rule. + """ rule = HasIdOf(['E0001']) self.assertEqual(self.filter_with_rule(rule), set([b'a5af0eb696917232725'])) - def test_HasGallery(self): + def test_hasgallery(self): + """ + Test HasGallery rule. + """ rule = HasGallery(['0', 'greater than']) self.assertEqual(self.filter_with_rule(rule), set([b'a5af0ecb107303354a0'])) - def test_RegExpIdOf(self): + def test_regexpidof(self): + """ + Test RegExpIdOf rule. + """ rule = RegExpIdOf(['E000.'], use_regex=True) self.assertEqual(self.filter_with_rule(rule), set([ b'a5af0eb69cf2d3fb615', b'a5af0eb667015e355db', @@ -71,63 +99,99 @@ class BaseTest(unittest.TestCase): b'a5af0eb69f41bfb5a6a', b'a5af0eb69c40c179441', b'a5af0eb6a3229544ba2', b'a5af0eb696917232725'])) - def test_HasCitation(self): + def test_hascitation(self): + """ + Test HasCitation rule. + """ rule = HasCitation(['page 1', '', '']) self.assertEqual(self.filter_with_rule(rule), set([b'a5af0ecb107303354a0'])) - def test_HasNote(self): + def test_hasnote(self): + """ + Test HasNote rule. + """ rule = HasNote([]) self.assertEqual(self.filter_with_rule(rule), set([b'a5af0ecb11f5ac3110e'])) - def test_HasNoteRegexp(self): + def test_hasnoteregexp(self): + """ + Test HasNoteRegexp rule. + """ rule = HasNoteRegexp(['.'], use_regex=True) self.assertEqual(self.filter_with_rule(rule), set([b'a5af0ecb11f5ac3110e'])) - def test_HasReferenceCountOf(self): + def test_hasreferencecountof(self): + """ + Test HasReferenceCountOf rule. + """ rule = HasReferenceCountOf(['greater than', '1']) self.assertEqual(self.filter_with_rule(rule), set([ b'cc8205d86fc4e9706a5', b'a5af0ed60de7a612b9e', b'cc820604ef05cb67907'])) - def test_HasSourceCount(self): + def test_hassourcecount(self): + """ + Test HasSourceCount rule. + """ rule = HasSourceCount(['1', 'greater than']) self.assertEqual(self.filter_with_rule(rule), set([b'a5af0ecb107303354a0'])) - def test_EventPrivate(self): + def test_eventprivate(self): + """ + Test EventPrivate rule. + """ rule = EventPrivate([]) self.assertEqual(self.filter_with_rule(rule), set([])) - def test_MatchesSourceConfidence(self): + def test_matchessourceconfidence(self): + """ + Test MatchesSourceConfidence rule. + """ rule = MatchesSourceConfidence(['2']) self.assertEqual(self.filter_with_rule(rule), set([b'a5af0ecb107303354a0'])) - def test_HasAttribute(self): + def test_hasattribute(self): + """ + Test HasAttribute rule. + """ rule = HasAttribute(['Cause', '']) self.assertEqual(self.filter_with_rule(rule), set([b'a5af0ecb11f5ac3110e'])) - def test_HasData(self): + def test_hasdata(self): + """ + Test HasData rule. + """ rule = HasData(['Burial', 'before 1800', 'USA', '']) self.assertEqual(self.filter_with_rule(rule), set([ b'a5af0ed4211095487d2', b'a5af0ed36793c1d3e05', b'a5af0ecfcc16ce7a96a'])) - def test_ChangedSince(self): + def test_changedsince(self): + """ + Test ChangedSince rule. + """ rule = ChangedSince(['2011-01-01', '2014-01-01']) self.assertEqual(self.filter_with_rule(rule), set([ b'a5af0ecb107303354a0', b'a5af0ecb11f5ac3110e', b'a5af0ed5df832ee65c1'])) - def test_HasTag(self): + def test_hastag(self): + """ + Test HasTag rule. + """ rule = HasTag(['ToDo']) self.assertEqual(self.filter_with_rule(rule), set([])) - def test_HasDayOfWeek(self): + def test_hasdayofweek(self): + """ + Test HasDayOfWeek rule. + """ rule = HasDayOfWeek(['2']) self.assertEqual(len(self.filter_with_rule(rule)), 177) diff --git a/gramps/gen/filters/rules/test/family_rules_test.py b/gramps/gen/filters/rules/test/family_rules_test.py index 0b64f87ad..baf95fbc8 100644 --- a/gramps/gen/filters/rules/test/family_rules_test.py +++ b/gramps/gen/filters/rules/test/family_rules_test.py @@ -27,52 +27,88 @@ from gramps.gen.merge.diff import import_as_dict from gramps.cli.user import User from gramps.gen.filters import GenericFilterFactory -from gramps.gen.filters.rules.family import * +from gramps.gen.filters.rules.family import ( + AllFamilies, HasRelType, HasGallery, HasIdOf, HasLDS, HasNote, RegExpIdOf, + HasNoteRegexp, HasReferenceCountOf, HasSourceCount, HasSourceOf, + HasCitation, FamilyPrivate, HasEvent, HasAttribute, IsBookmarked, + MatchesSourceConfidence, FatherHasNameOf, FatherHasIdOf, MotherHasNameOf, + MotherHasIdOf, ChildHasNameOf, ChildHasIdOf, ChangedSince, HasTag, + HasTwins, IsAncestorOf, IsDescendantOf) GenericFamilyFilter = GenericFilterFactory('Family') class BaseTest(unittest.TestCase): + """ + Family rule tests. + """ @classmethod def setUpClass(cls): + """ + Import example database. + """ cls.db = import_as_dict("example/gramps/example.gramps", User()) def filter_with_rule(self, rule): + """ + Apply a filter with the given rule. + """ filter_ = GenericFamilyFilter() filter_.add_rule(rule) results = filter_.apply(self.db) return set(results) - def test_AllFamilies(self): + def test_allfamilies(self): + """ + Test AllFamilies rule. + """ rule = AllFamilies([]) self.assertEqual(len(self.filter_with_rule(rule)), self.db.get_number_of_families()) - def test_HasRelType(self): + def test_hasreltype(self): + """ + Test HasRelType rule. + """ rule = HasRelType(['Married']) self.assertEqual(len(self.filter_with_rule(rule)), 738) - def test_HasGallery(self): + def test_hasgallery(self): + """ + Test HasGallery rule. + """ rule = HasGallery(['0', 'greater than']) self.assertEqual(self.filter_with_rule(rule), set([b'9OUJQCBOHW9UEK9CNV'])) - def test_HasIdOf(self): + def test_hasidof(self): + """ + Test HasIdOf rule. + """ rule = HasIdOf(['F0001']) self.assertEqual(self.filter_with_rule(rule), set([b'48TJQCGNNIR5SJRCAK'])) - def test_HasLDS(self): + def test_haslds(self): + """ + Test HasLDS rule. + """ rule = HasLDS(['0', 'greater than']) self.assertEqual(self.filter_with_rule(rule), set([b'9OUJQCBOHW9UEK9CNV'])) - def test_HasNote(self): + def test_hasnote(self): + """ + Test HasNote rule. + """ rule = HasNote([]) self.assertEqual(self.filter_with_rule(rule), set([b'9OUJQCBOHW9UEK9CNV'])) - def test_RegExpIdOf(self): + def test_regexpidof(self): + """ + Test RegExpIdOf rule. + """ rule = RegExpIdOf(['F000.'], use_regex=True) self.assertEqual(self.filter_with_rule(rule), set([ b'LOTJQC78O5B4WQGJRP', b'UPTJQC4VPCABZUDB75', b'NBTJQCIX49EKOCIHBP', @@ -80,12 +116,18 @@ class BaseTest(unittest.TestCase): b'48TJQCGNNIR5SJRCAK', b'4YTJQCTEH7PQUU4AD', b'MTTJQC05LKVFFLN01A', ])) - def test_HasNoteRegexp(self): + def test_hasnoteregexp(self): + """ + Test HasNoteRegexp rule. + """ rule = HasNoteRegexp(['.'], use_regex=True) self.assertEqual(self.filter_with_rule(rule), set([b'9OUJQCBOHW9UEK9CNV'])) - def test_HasReferenceCountOf(self): + def test_hasreferencecountof(self): + """ + Test HasReferenceCountOf rule. + """ rule = HasReferenceCountOf(['greater than', '12']) self.assertEqual(self.filter_with_rule(rule), set([ b'29IKQCMUNFTIBV653N', b'8OUJQCUVZ0XML7BQLF', b'UPTJQC4VPCABZUDB75', @@ -93,69 +135,108 @@ class BaseTest(unittest.TestCase): b'MTTJQC05LKVFFLN01A', b'C2VJQC71TNHO7RBBMX', b'QIDKQCJQ37SIUQ3UFU', b'DV4KQCX9OBVQ74H77F'])) - def test_HasSourceCount(self): + def test_hassourcecount(self): + """ + Test HasSourceCount rule. + """ rule = HasSourceCount(['1', 'greater than']) self.assertEqual(self.filter_with_rule(rule), set([b'9OUJQCBOHW9UEK9CNV'])) - def test_HasSourceOf(self): + def test_hassourceof(self): + """ + Test HasSourceOf rule. + """ rule = HasSourceOf(['S0001']) self.assertEqual(self.filter_with_rule(rule), - set([b'9OUJQCBOHW9UEK9CNV'])) + set([b'9OUJQCBOHW9UEK9CNV'])) - def test_HasCitation(self): + def test_hascitation(self): + """ + Test HasCitation rule. + """ rule = HasCitation(['page 10', '', '2']) self.assertEqual(self.filter_with_rule(rule), set([b'9OUJQCBOHW9UEK9CNV'])) - def test_FamilyPrivate(self): + def test_familyprivate(self): + """ + Test FamilyPrivate rule. + """ rule = FamilyPrivate([]) self.assertEqual(self.filter_with_rule(rule), set([])) - def test_HasEvent(self): + def test_hasevent(self): + """ + Test HasEvent rule. + """ rule = HasEvent(['Marriage', 'before 1900', 'USA', '', 'Garner']) self.assertEqual(self.filter_with_rule(rule), set([ b'KSFKQCP4V0YXGM1LR9', b'8ZFKQC3FRSHACOJBOU', b'3XFKQCE7QUDJ99AVNV', b'OVFKQC51DX0OQUV3JB', b'9OUJQCBOHW9UEK9CNV'])) - def test_HasAttribute(self): + def test_hasattribute(self): + """ + Test HasAttribute rule. + """ rule = HasAttribute(['Number of Children', '']) self.assertEqual(self.filter_with_rule(rule), set([b'9OUJQCBOHW9UEK9CNV'])) - def test_IsBookmarked(self): + def test_isbookmarked(self): + """ + Test IsBookmarked rule. + """ rule = IsBookmarked([]) self.assertEqual(self.filter_with_rule(rule), set([b'9OUJQCBOHW9UEK9CNV'])) - def test_MatchesSourceConfidence(self): + def test_matchessourceconfidence(self): + """ + Test MatchesSourceConfidence rule. + """ rule = MatchesSourceConfidence(['0']) self.assertEqual(len(self.filter_with_rule(rule)), 734) - def test_FatherHasNameOf(self): + def test_fatherhasnameof(self): + """ + Test FatherHasNameOf rule. + """ rule = FatherHasNameOf(['', '', 'Dr.', '', '', '', '', '', '', '', '']) self.assertEqual(self.filter_with_rule(rule), set([b'9OUJQCBOHW9UEK9CNV'])) - def test_FatherHasIdOf(self): + def test_fatherhasidof(self): + """ + Test FatherHasIdOf rule. + """ rule = FatherHasIdOf(['I0106']) self.assertEqual(self.filter_with_rule(rule), set([b'8OUJQCUVZ0XML7BQLF'])) - def test_MotherHasNameOf(self): + def test_motherhasnameof(self): + """ + Test MotherHasNameOf rule. + """ rule = MotherHasNameOf(['', 'Alvarado', '', '', '', '', '', '', '', '', '']) self.assertEqual(self.filter_with_rule(rule), set([ b'EM3KQC48HFLA02TF8D', b'K9NKQCBG105ECXZ48D', b'2QMKQC5YWNAWZMG6VO', b'6JUJQCCAXGENRX990K'])) - def test_MotherHasIdOf(self): + def test_motherhasidof(self): + """ + Test MotherHasIdOf rule. + """ rule = MotherHasIdOf(['I0107']) self.assertEqual(self.filter_with_rule(rule), set([b'8OUJQCUVZ0XML7BQLF'])) - def test_ChildHasNameOf(self): + def test_childhasnameof(self): + """ + Test ChildHasNameOf rule. + """ rule = ChildHasNameOf(['Eugene', '', '', '', '', '', '', '', '', '', '']) self.assertEqual(self.filter_with_rule(rule), set([ @@ -163,29 +244,44 @@ class BaseTest(unittest.TestCase): b'7CTJQCFJVBQSY076A6', b'9OUJQCBOHW9UEK9CNV', b'9IXJQCX18AHUFPQHEZ', b'9NWJQCJGLXUR3AQSFJ'])) - def test_ChildHasIdOf(self): + def test_childhasidof(self): + """ + Test ChildHasIdOf rule. + """ rule = ChildHasIdOf(['I0001']) self.assertEqual(self.filter_with_rule(rule), set([b'48TJQCGNNIR5SJRCAK'])) - def test_ChangedSince(self): + def test_changedsince(self): + """ + Test ChangedSince rule. + """ rule = ChangedSince(['2008-01-01', '2014-01-01']) self.assertEqual(self.filter_with_rule(rule), set([b'9OUJQCBOHW9UEK9CNV'])) - def test_HasTag(self): + def test_hastag(self): + """ + Test HasTag rule. + """ rule = HasTag(['ToDo']) self.assertEqual(self.filter_with_rule(rule), set([b'9OUJQCBOHW9UEK9CNV'])) - def test_HasTwins(self): + def test_hastwins(self): + """ + Test HasTwins rule. + """ rule = HasTwins([]) self.assertEqual(self.filter_with_rule(rule), set([ b'SD6KQC7LB8MYGA7F5W', b'8OUJQCUVZ0XML7BQLF', b'1BVJQCNTFAGS8273LJ', b'5IUJQCRJY47YQ8PU7N', b'ZLUJQCPDV93OR8KHB7', b'4U2KQCBXG2VTPH6U1F', ])) - def test_IsAncestorOf(self): + def test_isancestorof(self): + """ + Test IsAncestorOf rule. + """ rule = IsAncestorOf(['F0031', '0']) self.assertEqual(self.filter_with_rule(rule), set([ b'4AXJQC96KTN3WGPTVE', b'1RUJQCYX9QL1V45YLD', b'5GTJQCXVYVAIQTBVKA', @@ -194,7 +290,10 @@ class BaseTest(unittest.TestCase): b'57WJQCTBJKR5QYPS6K', b'8OUJQCUVZ0XML7BQLF', b'7PUJQC4PPS4EDIVMYE' ])) - def test_IsDescendantOf(self): + def test_isdescendantof(self): + """ + Test IsDescendantOf rule. + """ rule = IsDescendantOf(['F0031', '0']) self.assertEqual(self.filter_with_rule(rule), set([ b'SFXJQCLE8PIG7PH38J', b'UCXJQCC5HS8VXDKWBM', b'IIEKQCRX89WYBHKB7R', diff --git a/gramps/gen/filters/rules/test/person_rules_test.py b/gramps/gen/filters/rules/test/person_rules_test.py index 47a2aca69..443bab3a8 100644 --- a/gramps/gen/filters/rules/test/person_rules_test.py +++ b/gramps/gen/filters/rules/test/person_rules_test.py @@ -27,337 +27,520 @@ from gramps.gen.merge.diff import import_as_dict from gramps.cli.user import User from gramps.gen.filters import GenericFilter -from gramps.gen.filters.rules.person import * +from gramps.gen.filters.rules.person import ( + Disconnected, Everyone, FamilyWithIncompleteEvent, HasAlternateName, + HasCommonAncestorWith, HasNickname, HasUnknownGender, HasSourceOf, + HaveAltFamilies, HaveChildren, IncompleteNames, IsBookmarked, + IsDuplicatedAncestorOf, IsRelatedWith, HasIdOf, IsDefaultPerson, IsFemale, + IsMale, MissingParent, MultipleMarriages, NeverMarried, NoBirthdate, + NoDeathdate, PeoplePrivate, PeoplePublic, PersonWithIncompleteEvent, + RelationshipPathBetweenBookmarks) class BaseTest(unittest.TestCase): + """ + Person rule tests. + """ @classmethod def setUpClass(cls): + """ + Import example database. + """ cls.db = import_as_dict("example/gramps/example.gramps", User()) def filter_with_rule(self, rule): + """ + Apply a filter with the given rule. + """ filter_ = GenericFilter() filter_.add_rule(rule) results = filter_.apply(self.db) return set(results) - def test_Disconnected(self): + def test_disconnected(self): + """ + Test Disconnected rule. + """ rule = Disconnected([]) self.assertEqual(self.filter_with_rule(rule), set([ - b'0PBKQCXHLAEIB46ZIA', b'QEVJQC04YO01UAWJ2N', b'UT0KQCMN7PC9XURRXJ', b'MZAKQCKAQLIQYWP5IW', - b'Y7BKQC9CUXWQLGLPQM', b'OBBKQC8NJM5UYBO849', b'NPBKQCKEF0G7T4H312', b'423KQCGLT8UISDUM1Q', - b'8S0KQCNORIWDL0X8SB', b'AP5KQC0LBXPM727OWB', b'AREKQC0VPBHNZ5R3IO', b'KU0KQCJ0RUTJTIUKSA', - b'VC4KQC7L7KKH9RLHXN', b'0P3KQCRSIVL1A4VJ19', b'PK6KQCGEL4PTE720BL', b'YIKKQCSD2Z85UHJ8LX', - b'KY8KQCMIH2HUUGLA3R', b'RD7KQCQ24B1N3OEC5X', b'NV0KQC7SIEH3SVDPP1', b'KIKKQCU2CJ543TLM5J', - b'AT0KQC4P3MMUCHI3BK', b'J6BKQC1PMNBAYSLM9U', b'IXXJQCLKOUAJ5RSQY4', b'U4ZJQC5VR0QBIE8DU', - b'F7BKQC4NXO9R7XOG2W', b'7U0KQC6PGZBNQATNOT', b'78AKQCI05U36T3E82O', b'H1GKQCWOUJHFSHXABA', - b'ZWGKQCRFZAPC5PYJZ1', b'EZ0KQCF3LSM9PRSG0K', b'FHKKQC963NGSY18ZDZ', b'FJ9KQCRJ3RGHNBWW4S', - b'S2EKQC9F4UR4R71IC3', b'1XBKQCX019BKJ0M9IH', b'Z62KQC706L0B0WTN3Q', b'O7EKQCEVZ7FBEWMNWE', - b'XY8KQCULFPN4SR915Q', b'WQDKQCEULSD5G9XNFI', b'2Z0KQCSWKVFG7RPFD8', b'26BKQC0SJIJOH02H2A', - b'262KQCH2RQKN0CBRLF', b'P5ZJQCMKO7EYV4HFCL', b'KXBKQC52JO3AP4GMLF', b'9IFKQC60JTDBV57N6S', - b'TQ0KQCZ8LA7X9DIEAN', b'BAXJQCORQA5Q46FCDG', b'VR0KQC7LVANO83AL35', b'75CKQC4T617U2E5T5Y', - b'LCTKQCZU3F94CEFSOM', b'WJYJQCPNJJI5JN07SD', b'3N6KQC6BE5EIXTRMDL', b'CM5KQCD57I15GKLAMB', - b'cccbffffd3e69819cd8', b'BJKKQCVDA66528PDAU', b'QS0KQCLMIZFI8ZDLM3', b'UW0KQCRHBIYMA8LPZD', - b'GJ7KQC7APJSAMHEK5Q', b'711KQCDXOQWB3KDWEP', b'PY0KQC77AJ3457A6C2', b'WZ0KQCYVMEJHDR4MV2', - b'28EKQCQGM6NLLWFRG7', b'E33KQCRREJALRA715H', b'8HKKQCTEJAOBVH410L', b'IO6KQC70PMBQUDNB3L', - b'1YBKQCWRBNB433NEMH', b'M01KQCF7KUWCDY67JD', b'CR0KQCOMV2QPPC90IF', b'85ZJQCMG38N7Q2WKIK', - b'I9GKQCERACL8UZF2PY', b'BY0KQCOZUK47R2JZDE', b'7W0KQCYDMD4LTSY5JL', b'A0YJQC3HONEKD1JCPK', + b'0PBKQCXHLAEIB46ZIA', b'QEVJQC04YO01UAWJ2N', b'UT0KQCMN7PC9XURRXJ', + b'MZAKQCKAQLIQYWP5IW', b'Y7BKQC9CUXWQLGLPQM', b'OBBKQC8NJM5UYBO849', + b'NPBKQCKEF0G7T4H312', b'423KQCGLT8UISDUM1Q', b'8S0KQCNORIWDL0X8SB', + b'AP5KQC0LBXPM727OWB', b'AREKQC0VPBHNZ5R3IO', b'KU0KQCJ0RUTJTIUKSA', + b'VC4KQC7L7KKH9RLHXN', b'0P3KQCRSIVL1A4VJ19', b'PK6KQCGEL4PTE720BL', + b'YIKKQCSD2Z85UHJ8LX', b'KY8KQCMIH2HUUGLA3R', b'RD7KQCQ24B1N3OEC5X', + b'NV0KQC7SIEH3SVDPP1', b'KIKKQCU2CJ543TLM5J', b'AT0KQC4P3MMUCHI3BK', + b'J6BKQC1PMNBAYSLM9U', b'IXXJQCLKOUAJ5RSQY4', b'U4ZJQC5VR0QBIE8DU', + b'F7BKQC4NXO9R7XOG2W', b'7U0KQC6PGZBNQATNOT', b'78AKQCI05U36T3E82O', + b'H1GKQCWOUJHFSHXABA', b'ZWGKQCRFZAPC5PYJZ1', b'EZ0KQCF3LSM9PRSG0K', + b'FHKKQC963NGSY18ZDZ', b'FJ9KQCRJ3RGHNBWW4S', b'S2EKQC9F4UR4R71IC3', + b'1XBKQCX019BKJ0M9IH', b'Z62KQC706L0B0WTN3Q', b'O7EKQCEVZ7FBEWMNWE', + b'XY8KQCULFPN4SR915Q', b'WQDKQCEULSD5G9XNFI', b'2Z0KQCSWKVFG7RPFD8', + b'26BKQC0SJIJOH02H2A', b'262KQCH2RQKN0CBRLF', b'P5ZJQCMKO7EYV4HFCL', + b'KXBKQC52JO3AP4GMLF', b'9IFKQC60JTDBV57N6S', b'TQ0KQCZ8LA7X9DIEAN', + b'BAXJQCORQA5Q46FCDG', b'VR0KQC7LVANO83AL35', b'75CKQC4T617U2E5T5Y', + b'LCTKQCZU3F94CEFSOM', b'WJYJQCPNJJI5JN07SD', b'3N6KQC6BE5EIXTRMDL', + b'CM5KQCD57I15GKLAMB', b'cccbffffd3e69819cd8', + b'BJKKQCVDA66528PDAU', b'QS0KQCLMIZFI8ZDLM3', b'UW0KQCRHBIYMA8LPZD', + b'GJ7KQC7APJSAMHEK5Q', b'711KQCDXOQWB3KDWEP', b'PY0KQC77AJ3457A6C2', + b'WZ0KQCYVMEJHDR4MV2', b'28EKQCQGM6NLLWFRG7', b'E33KQCRREJALRA715H', + b'8HKKQCTEJAOBVH410L', b'IO6KQC70PMBQUDNB3L', b'1YBKQCWRBNB433NEMH', + b'M01KQCF7KUWCDY67JD', b'CR0KQCOMV2QPPC90IF', b'85ZJQCMG38N7Q2WKIK', + b'I9GKQCERACL8UZF2PY', b'BY0KQCOZUK47R2JZDE', b'7W0KQCYDMD4LTSY5JL', + b'A0YJQC3HONEKD1JCPK', ])) - def test_Everyone(self): + def test_everyone(self): + """ + Test Everyone rule. + """ rule = Everyone([]) - self.assertEqual(len(self.filter_with_rule(rule)), self.db.get_number_of_people()) + self.assertEqual(len(self.filter_with_rule(rule)), + self.db.get_number_of_people()) - def test_FamilyWithIncompleteEvent(self): + def test_familywithincompleteevent(self): + """ + Test FamilyWithIncompleteEvent rule. + """ rule = FamilyWithIncompleteEvent([]) # too many to list out to test explicitly self.assertEqual(len(self.filter_with_rule(rule)), 775) - def test_HasAlternateName(self): + def test_hasalternatename(self): + """ + Test HasAlternateName rule. + """ rule = HasAlternateName([]) self.assertEqual(self.filter_with_rule(rule), set([ b'46WJQCIOLQ0KOX2XCC', b'GNUJQCL9MD64AM56OH', ])) - def test_HasCommonAncestorWith_empty(self): + def test_commonancestor_empty(self): + """ + Test empty HasCommonAncestorWith rule. + """ rule = HasCommonAncestorWith(['']) self.assertEqual(self.filter_with_rule(rule), set([ ])) - def test_HasCommonAncestorWith_nonmatching(self): + def test_commonancestor_nonmatching(self): + """ + Test non-matching HasCommonAncestorWith rule. + """ rule = HasCommonAncestorWith(['I0000']) self.assertEqual(self.filter_with_rule(rule), set([ ])) - def test_HasCommonAncestorWith_irregular(self): + def test_commonancestor_irregular(self): + """ + Test irregular HasCommonAncestorWith rule. + """ rule = HasCommonAncestorWith(['ABCDEFG']) self.assertEqual(self.filter_with_rule(rule), set([ ])) - def test_HasCommonAncestorWith_matching(self): + def test_commonancestor_matching(self): + """ + Test matching HasCommonAncestorWith rule. + """ rule = HasCommonAncestorWith(['I0044']) self.assertEqual(self.filter_with_rule(rule), set([ - b'GNUJQCL9MD64AM56OH', b'SOFKQCBYAO18OWC0CS', b'EMEKQC02EOUF8H0SHM', b'3EXJQCVWOSQFGLYB6H', - b'EMTJQCQU6TL4WAVSE4', b'QUEKQCZL61S8BJJ388', b'MKEKQCSBQGAVHAPCQT', b'MUFKQCMXUJ07MCDUNI', - b'DBXJQCJCEZMO17WZ89', b'ORFKQC4KLWEGTGR19L', b'MG5KQC6ZKSVO4A63G2', b'N26KQCF3ASHMZ0HEW6', - b'GNWJQC9NLVF2MZLHU9', b'ZFXJQCHAD8SLZZ7KRP', b'44WJQCLCQIPZUB0UH', b'B8TJQC53HJXOGXK8F7', - b'D3WJQCCGV58IP8PNHZ', b'3LEKQCRF3FD2E1H73I', b'F06KQCZY1I4H4IFZM', b'VMTJQC49IGKLG2EQ5', - b'9BXKQC1PVLPYFMD6IX', b'H1DKQC4YGZ5A61FGS', b'1GWJQCGOOZ8FJW3YK9', b'S16KQCX8XUO3EEL85N', - b'OREKQCF34YE89RL8S6', b'RU5KQCQTPC9SJ5Q1JN', b'GYFKQCPH8Q0JDN94GR', b'9QFKQC54ET79K2SD57', - b'MLEKQCH64557K610VR', b'AWFKQCJELLUWDY2PD3', b'ZDWJQC7TMS2AWAVF2Y', b'VJFKQCFO7WESWPNKHE', - b'LV5KQCJCCR0S3DN5WW', b'CDTJQCVTVX7CNMY9YU', b'OX5KQCKE3I94MEPDC', b'JF5KQC2L6ABI0MVD3E', - b'CH5KQCIEXSN1J5UEHB', b'4JEKQC22K5UTH9QHCU', b'EPFKQCETTDTEL3PYIR', b'D16KQCIZS56HVPW6DA', - b'2TEKQCTSCRL4Z2AUHE', b'3WEKQCHXRH61E3CIKB', b'TDTJQCGYRS2RCCGQN3', b'SMWJQCXQ6I2GEXSPK9', - b'PXFKQCXEHJX3W1Q1IV', b'Q9TJQCXDL1599L2B2Z', b'BFXJQCF1JBOXPRW2OS', b'6TFKQCUTO94WB2NHN', - b'FNEKQCO239QSNK0R78', b'3RFKQCNKMX9HVLNSLW', b'W2DKQCV4H3EZUJ35DX', b'5IEKQCN37EFBK9EBUD', - b'LW5KQCXSXRC2XV3T3D', b'ZNEKQCULV911DIXBK3', b'35WJQC1B7T7NPV8OLV', b'MPEKQC6TIP3SP1YF7I', - b'DMFKQC5MHGYC6503F2', b'3KEKQC45RL87D4ZG86', b'KLTJQC70XVZJSPQ43U', b'LVEKQCP09W7JNFDAFC', - b'DPUJQCUYKKDPT78JJV', b'JDXJQCR5L0NTR21SQA', b'UAXJQC6HC354V7Q6JA', b'XBXJQCS4QY316ZGHRN', - b'HCXJQCRKB4K65V1C07', b'66TJQC6CC7ZWL9YZ64', b'XNFKQC6DN59LACS9IU', b'LL5KQCG687Y165GL5P', - b'7X5KQC9ABK4T6AW7QF', b'HKTJQCIJD8RK9RJFO1', b'1LTJQCYQI1DXBLG6Z', b'0FWJQCLYEP736P3YZK', - b'0DXJQC1T8P3CQKZIUO', b'ISEKQC97YI74A9VKWC', b'KGXJQCBQ39ON9VB37T', b'BZ5KQCD4KFI3BTIMZU', - b'0HEKQCLINMQS4RB7B8', b'BBTJQCNT6N1H4X6TL4', b'COFKQCUXC2H4G3QBYT', b'DI5KQC3CLKWQI3I0CC', - b'T8TJQCWWI8RY57YNTQ', b'46WJQCIOLQ0KOX2XCC', b'OEXJQCQJHF2BLSAAIS', b'GNFKQCH8AFJRJO9V4Y', - b'8LFKQCQWXTJQJR4CXV', b'IGWJQCSVT8NXTFXOFJ', b'3PEKQC8ZDCYTSSIKZ9', b'5UEKQC8N8NEPSWU1QQ', - b'NK5KQC1MAOU2BP35ZV', b'UZFKQCIHVT44DC9KGH', b'JJ5KQC83DT7VDMUYRQ', b'626KQC7C08H3UTM38E', - b'XIFKQCLQOY645QTGP7', b'HEWJQCWQQ3K4BNRLIO', b'HDWJQCT361VOV2PQLP', b'XFKKQCGA4DVECEB48E', + b'GNUJQCL9MD64AM56OH', b'SOFKQCBYAO18OWC0CS', b'EMEKQC02EOUF8H0SHM', + b'3EXJQCVWOSQFGLYB6H', b'EMTJQCQU6TL4WAVSE4', b'QUEKQCZL61S8BJJ388', + b'MKEKQCSBQGAVHAPCQT', b'MUFKQCMXUJ07MCDUNI', b'DBXJQCJCEZMO17WZ89', + b'ORFKQC4KLWEGTGR19L', b'MG5KQC6ZKSVO4A63G2', b'N26KQCF3ASHMZ0HEW6', + b'GNWJQC9NLVF2MZLHU9', b'ZFXJQCHAD8SLZZ7KRP', b'44WJQCLCQIPZUB0UH', + b'B8TJQC53HJXOGXK8F7', b'D3WJQCCGV58IP8PNHZ', b'3LEKQCRF3FD2E1H73I', + b'F06KQCZY1I4H4IFZM', b'VMTJQC49IGKLG2EQ5', b'9BXKQC1PVLPYFMD6IX', + b'H1DKQC4YGZ5A61FGS', b'1GWJQCGOOZ8FJW3YK9', b'S16KQCX8XUO3EEL85N', + b'OREKQCF34YE89RL8S6', b'RU5KQCQTPC9SJ5Q1JN', b'GYFKQCPH8Q0JDN94GR', + b'9QFKQC54ET79K2SD57', b'MLEKQCH64557K610VR', b'AWFKQCJELLUWDY2PD3', + b'ZDWJQC7TMS2AWAVF2Y', b'VJFKQCFO7WESWPNKHE', b'LV5KQCJCCR0S3DN5WW', + b'CDTJQCVTVX7CNMY9YU', b'OX5KQCKE3I94MEPDC', b'JF5KQC2L6ABI0MVD3E', + b'CH5KQCIEXSN1J5UEHB', b'4JEKQC22K5UTH9QHCU', b'EPFKQCETTDTEL3PYIR', + b'D16KQCIZS56HVPW6DA', b'2TEKQCTSCRL4Z2AUHE', b'3WEKQCHXRH61E3CIKB', + b'TDTJQCGYRS2RCCGQN3', b'SMWJQCXQ6I2GEXSPK9', b'PXFKQCXEHJX3W1Q1IV', + b'Q9TJQCXDL1599L2B2Z', b'BFXJQCF1JBOXPRW2OS', b'6TFKQCUTO94WB2NHN', + b'FNEKQCO239QSNK0R78', b'3RFKQCNKMX9HVLNSLW', b'W2DKQCV4H3EZUJ35DX', + b'5IEKQCN37EFBK9EBUD', b'LW5KQCXSXRC2XV3T3D', b'ZNEKQCULV911DIXBK3', + b'35WJQC1B7T7NPV8OLV', b'MPEKQC6TIP3SP1YF7I', b'DMFKQC5MHGYC6503F2', + b'3KEKQC45RL87D4ZG86', b'KLTJQC70XVZJSPQ43U', b'LVEKQCP09W7JNFDAFC', + b'DPUJQCUYKKDPT78JJV', b'JDXJQCR5L0NTR21SQA', b'UAXJQC6HC354V7Q6JA', + b'XBXJQCS4QY316ZGHRN', b'HCXJQCRKB4K65V1C07', b'66TJQC6CC7ZWL9YZ64', + b'XNFKQC6DN59LACS9IU', b'LL5KQCG687Y165GL5P', b'7X5KQC9ABK4T6AW7QF', + b'HKTJQCIJD8RK9RJFO1', b'1LTJQCYQI1DXBLG6Z', b'0FWJQCLYEP736P3YZK', + b'0DXJQC1T8P3CQKZIUO', b'ISEKQC97YI74A9VKWC', b'KGXJQCBQ39ON9VB37T', + b'BZ5KQCD4KFI3BTIMZU', b'0HEKQCLINMQS4RB7B8', b'BBTJQCNT6N1H4X6TL4', + b'COFKQCUXC2H4G3QBYT', b'DI5KQC3CLKWQI3I0CC', b'T8TJQCWWI8RY57YNTQ', + b'46WJQCIOLQ0KOX2XCC', b'OEXJQCQJHF2BLSAAIS', b'GNFKQCH8AFJRJO9V4Y', + b'8LFKQCQWXTJQJR4CXV', b'IGWJQCSVT8NXTFXOFJ', b'3PEKQC8ZDCYTSSIKZ9', + b'5UEKQC8N8NEPSWU1QQ', b'NK5KQC1MAOU2BP35ZV', b'UZFKQCIHVT44DC9KGH', + b'JJ5KQC83DT7VDMUYRQ', b'626KQC7C08H3UTM38E', b'XIFKQCLQOY645QTGP7', + b'HEWJQCWQQ3K4BNRLIO', b'HDWJQCT361VOV2PQLP', b'XFKKQCGA4DVECEB48E', b'KWEKQCTNIIV9BROFFG', ])) - def test_HasNickname(self): + def test_hasnickname(self): + """ + Test HasNickname rule. + """ rule = HasNickname([]) self.assertEqual(self.filter_with_rule(rule), set([ - b'cc8205d883763f02abd', b'GNUJQCL9MD64AM56OH', b'Q8HKQC3VMRM1M6M7ES', + b'cc8205d883763f02abd', b'GNUJQCL9MD64AM56OH', + b'Q8HKQC3VMRM1M6M7ES', ])) - def test_HasUnknownGender(self): + def test_hasunknowngender(self): + """ + Test HasUnknownGender rule. + """ rule = HasUnknownGender([]) self.assertEqual(self.filter_with_rule(rule), set([ - b'OJOKQC83Y1EDBIMLJ6', b'8BHKQCFK9UZFRJYC2Y', b'PGFKQC1TUQMXFAMLMB', b'IHOKQCECRZYQDKW6KF', - b'8HKKQCTEJAOBVH410L', b'AGFKQCO358R18LNJYV', b'1ENKQCBPFZTAQJSP4O', b'NUWKQCO7TVAOH0CHLV', - b'P5IKQC88STY3FNTFZ3', b'7GXKQCMVFU8WR1LKZL', b'LGXKQCJ5OP6MKF9QLN', b'XNFKQC6DN59LACS9IU', - b'7IOKQC1NVGUI1E55CQ', b'57PKQCFAWY7AM3JS4M', b'BNXKQCEBXC1RCOGJNF', b'TFFKQC1RMG8RRADKDH', - b'FHKKQC963NGSY18ZDZ', b'WMXKQCDUJ4JKQQYCR7', b'PBHKQCHOAGTECRKT9L', b'OFXKQC8W0N3N6JP6YQ', + b'OJOKQC83Y1EDBIMLJ6', b'8BHKQCFK9UZFRJYC2Y', b'PGFKQC1TUQMXFAMLMB', + b'IHOKQCECRZYQDKW6KF', b'8HKKQCTEJAOBVH410L', b'AGFKQCO358R18LNJYV', + b'1ENKQCBPFZTAQJSP4O', b'NUWKQCO7TVAOH0CHLV', b'P5IKQC88STY3FNTFZ3', + b'7GXKQCMVFU8WR1LKZL', b'LGXKQCJ5OP6MKF9QLN', b'XNFKQC6DN59LACS9IU', + b'7IOKQC1NVGUI1E55CQ', b'57PKQCFAWY7AM3JS4M', b'BNXKQCEBXC1RCOGJNF', + b'TFFKQC1RMG8RRADKDH', b'FHKKQC963NGSY18ZDZ', b'WMXKQCDUJ4JKQQYCR7', + b'PBHKQCHOAGTECRKT9L', b'OFXKQC8W0N3N6JP6YQ', ])) - def test_HasSourceOf_empty(self): - # this rule run with an empty string finds people with no source citations + def test_hassourceof_empty(self): + """ + Test empty HasSourceOf rule. + """ + # when run with an empty string finds people with no sourc citations rule = HasSourceOf(['']) self.assertEqual(self.filter_with_rule(rule), set([ - b'cc82060512042f67e2c', b'cc8205d87831c772e87', b'cc82060516c6c141500', b'cc8205d87fd529000ff', - b'cc82060504445ab6deb', b'cc8205d887376aacba2', b'cccbffffd3e69819cd8', b'cc8205d87c20350420b', - b'cc8206050e541f79f92', b'cc8205d883763f02abd', b'cc8206050980ea622d0', b'cc8205d872f532ab14e', + b'cc82060512042f67e2c', b'cc8205d87831c772e87', + b'cc82060516c6c141500', b'cc8205d87fd529000ff', + b'cc82060504445ab6deb', b'cc8205d887376aacba2', + b'cccbffffd3e69819cd8', b'cc8205d87c20350420b', + b'cc8206050e541f79f92', b'cc8205d883763f02abd', + b'cc8206050980ea622d0', b'cc8205d872f532ab14e', ])) - def test_HasSourceOf_nonmatching(self): + def test_hassourceof_nonmatching(self): + """ + Test non-matching HasSourceOf rule. + """ rule = HasSourceOf(['S0004']) self.assertEqual(self.filter_with_rule(rule), set([ ])) - def test_HasSourceOf_irregular(self): + def test_hassourceof_irregular(self): + """ + Test irregular HasSourceOf rule. + """ rule = HasSourceOf(['ABCDEFG']) self.assertEqual(self.filter_with_rule(rule), set([ ])) - def test_HasSourceOf_matching(self): + def test_hassourceof_matching(self): + """ + Test matching HasSourceOf rule. + """ rule = HasSourceOf(['S0000']) self.assertEqual(self.filter_with_rule(rule), set([ b'GNUJQCL9MD64AM56OH', ])) - def test_HaveAltFamilies(self): + def test_havealtfamilies(self): + """ + Test HaveAltFamilies rule. + """ rule = HaveAltFamilies([]) self.assertEqual(self.filter_with_rule(rule), set([ b'CH5KQCIEXSN1J5UEHB', b'MG5KQC6ZKSVO4A63G2', ])) - def test_HaveChildren(self): + def test_havechildren(self): + """ + Test HaveChildren rule. + """ rule = HaveChildren([]) # too many to list out to test explicitly self.assertEqual(len(self.filter_with_rule(rule)), 895) - def test_IncompleteNames(self): + def test_incompletenames(self): + """ + Test IncompleteNames rule. + """ rule = IncompleteNames([]) self.assertEqual(self.filter_with_rule(rule), set([ - b'IHOKQCECRZYQDKW6KF', b'cc82060504445ab6deb', b'LCXKQCQZH5EH56NTCD', b'cc8205d87831c772e87', - b'3RFKQCNKMX9HVLNSLW', b'cc8205d87fd529000ff', b'B1UKQCBR49WB3134PN', b'0TTKQCXXY59OCDPLV3', - b'F3UKQC7ZV3EYVWTZ8O', b'1MXKQCJ2BR43910ZYX', b'cc8206050e541f79f92', b'FHKKQC963NGSY18ZDZ', - b'R5HKQCIEPOY1DMQOWX', b'ZHMKQC50PFVAPI8PZ6', b'T4UKQCYGECXGVNBWMY', b'cc82060516c6c141500', - b'UPWKQCYVFH7RZOSZ29', b'2AMKQCE67YOH3TBVYI', b'2CUKQCFDVN3EZE2E4C', b'7IOKQC1NVGUI1E55CQ', - b'KSTKQC018GNA7HDCAS', b'WIVKQC4Q4FCQJT5M63', b'A4YKQCRYSI5FT5T38', b'BUNKQCO4HZHZP70F3K', - b'YRTKQCNDP343OD5OQJ', b'7VEKQCV05EDK0625KI', b'cc8205d872f532ab14e', b'TPXKQCEGL04KHGMO2X', - b'L9LKQCQ8KJRKHM4D2E', b'8QXKQCHJ2EUC7OV8EQ', b'W0XKQCKSFWWJWQ2OSN', b'I6QKQCFRDTV2LDC8M2', - b'XTUKQC7WCIVA5F0NC4', b'F4UKQCPK572VWU2YZQ', b'JKDKQCF4ND92A088J2', b'COFKQCUXC2H4G3QBYT', - b'BNXKQCEBXC1RCOGJNF', b'Q42KQCKJZGS4IZWHF5', b'P5IKQC88STY3FNTFZ3', b'7CXKQC59NSZFXIG1UE', - b'cc8205d87c20350420b', b'FQUKQCWEHOAWUP4QWS', b'3YTKQCK2W63W0MQBJE', b'8HKKQCTEJAOBVH410L', - b'HLQKQC0BJIZL0V4EK4', b'B0UKQC9A54F1GUB7NR', b'EPXKQCQRZP2PNPN7BE', b'cc82060512042f67e2c', - b'XZLKQCRQA9EHPBNZPT', b'OQXKQC2Y5FVH9PK0JL', b'AXLKQC0YTFAWQ234YD', b'OFXKQC8W0N3N6JP6YQ', - b'MWUKQCD2ZSCECQOCLG', b'1ENKQCBPFZTAQJSP4O', b'N7XKQCYD3VSCSZREGJ', b'2LQKQC62GJUQCJIOK8', - b'QXXKQC9PT5FWNT140K', b'VAXKQC19HIFPX61J28', b'0PXKQCJ9S1M3NNASET', b'K8XKQCDSVLSK422A3K', - b'52UKQCFYXMFTKIGNBS', b'7GXKQCMVFU8WR1LKZL', b'4UMKQCF07KL2K92CI5', b'LGXKQCJ5OP6MKF9QLN', - b'FZTKQCSTPIQ3C9JC46', b'WMXKQCDUJ4JKQQYCR7', b'R6UKQC939L9FV62UGE', b'OIUKQCBHUWDGL7DNTI', - b'FRTKQC3G6JBJAR2ZPX', b'PIEKQCKUL6OAMS8Q9R', b'cc8205d887376aacba2', b'LGMKQCQP5M5L18FVTN', - b'8HUKQCRV8B3J2LLQ3B', b'LOUKQC45HUN532HOOM', b'cc8205d883763f02abd', b'TBXKQC7OHIN28PVCS3', + b'IHOKQCECRZYQDKW6KF', b'cc82060504445ab6deb', + b'LCXKQCQZH5EH56NTCD', b'cc8205d87831c772e87', + b'3RFKQCNKMX9HVLNSLW', b'cc8205d87fd529000ff', + b'B1UKQCBR49WB3134PN', b'0TTKQCXXY59OCDPLV3', + b'F3UKQC7ZV3EYVWTZ8O', b'1MXKQCJ2BR43910ZYX', + b'cc8206050e541f79f92', b'FHKKQC963NGSY18ZDZ', + b'R5HKQCIEPOY1DMQOWX', b'ZHMKQC50PFVAPI8PZ6', b'T4UKQCYGECXGVNBWMY', + b'cc82060516c6c141500', b'UPWKQCYVFH7RZOSZ29', + b'2AMKQCE67YOH3TBVYI', b'2CUKQCFDVN3EZE2E4C', b'7IOKQC1NVGUI1E55CQ', + b'KSTKQC018GNA7HDCAS', b'WIVKQC4Q4FCQJT5M63', b'A4YKQCRYSI5FT5T38', + b'BUNKQCO4HZHZP70F3K', b'YRTKQCNDP343OD5OQJ', b'7VEKQCV05EDK0625KI', + b'cc8205d872f532ab14e', b'TPXKQCEGL04KHGMO2X', + b'L9LKQCQ8KJRKHM4D2E', b'8QXKQCHJ2EUC7OV8EQ', b'W0XKQCKSFWWJWQ2OSN', + b'I6QKQCFRDTV2LDC8M2', b'XTUKQC7WCIVA5F0NC4', b'F4UKQCPK572VWU2YZQ', + b'JKDKQCF4ND92A088J2', b'COFKQCUXC2H4G3QBYT', b'BNXKQCEBXC1RCOGJNF', + b'Q42KQCKJZGS4IZWHF5', b'P5IKQC88STY3FNTFZ3', b'7CXKQC59NSZFXIG1UE', + b'cc8205d87c20350420b', b'FQUKQCWEHOAWUP4QWS', + b'3YTKQCK2W63W0MQBJE', b'8HKKQCTEJAOBVH410L', b'HLQKQC0BJIZL0V4EK4', + b'B0UKQC9A54F1GUB7NR', b'EPXKQCQRZP2PNPN7BE', + b'cc82060512042f67e2c', b'XZLKQCRQA9EHPBNZPT', + b'OQXKQC2Y5FVH9PK0JL', b'AXLKQC0YTFAWQ234YD', b'OFXKQC8W0N3N6JP6YQ', + b'MWUKQCD2ZSCECQOCLG', b'1ENKQCBPFZTAQJSP4O', b'N7XKQCYD3VSCSZREGJ', + b'2LQKQC62GJUQCJIOK8', b'QXXKQC9PT5FWNT140K', b'VAXKQC19HIFPX61J28', + b'0PXKQCJ9S1M3NNASET', b'K8XKQCDSVLSK422A3K', b'52UKQCFYXMFTKIGNBS', + b'7GXKQCMVFU8WR1LKZL', b'4UMKQCF07KL2K92CI5', b'LGXKQCJ5OP6MKF9QLN', + b'FZTKQCSTPIQ3C9JC46', b'WMXKQCDUJ4JKQQYCR7', b'R6UKQC939L9FV62UGE', + b'OIUKQCBHUWDGL7DNTI', b'FRTKQC3G6JBJAR2ZPX', b'PIEKQCKUL6OAMS8Q9R', + b'cc8205d887376aacba2', b'LGMKQCQP5M5L18FVTN', + b'8HUKQCRV8B3J2LLQ3B', b'LOUKQC45HUN532HOOM', + b'cc8205d883763f02abd', b'TBXKQC7OHIN28PVCS3', ])) - def test_IsBookmarked(self): + def test_isbookmarked(self): + """ + Test IsBookmarked rule. + """ rule = IsBookmarked([]) self.assertEqual(self.filter_with_rule(rule), set([ b'35WJQC1B7T7NPV8OLV', b'AWFKQCJELLUWDY2PD3', b'Q8HKQC3VMRM1M6M7ES', ])) - def test_IsDuplicatedAncestorOf_empty(self): + def test_dupancestor_empty(self): + """ + Test empty IsDuplicatedAncestorOf rule. + """ rule = IsDuplicatedAncestorOf(['']) self.assertEqual(self.filter_with_rule(rule), set([ ])) - def test_IsDuplicatedAncestorOf_nonmatching(self): + def test_dupancestor_nonmatching(self): + """ + Test non-matching IsDuplicatedAncestorOf rule. + """ rule = IsDuplicatedAncestorOf(['I0000']) self.assertEqual(self.filter_with_rule(rule), set([ ])) - def test_IsDuplicatedAncestorOf_irregular(self): + def test_dupancestor_irregular(self): + """ + Test irregular IsDuplicatedAncestorOf rule. + """ rule = IsDuplicatedAncestorOf(['ABCDEFG']) self.assertEqual(self.filter_with_rule(rule), set([ ])) - def test_IsDuplicatedAncestorOf_matching(self): + def test_dupancestor_matching(self): + """ + Test matching IsDuplicatedAncestorOf rule. + """ rule = IsDuplicatedAncestorOf(['I1631']) self.assertEqual(self.filter_with_rule(rule), set([ b'I3VJQCUY5I6UR92507', b'D4VJQC09STQCWD393E', ])) - def test_IsRelatedWith_empty(self): + def test_isrelatedwith_empty(self): + """ + Test empty IsRelatedWith rule. + """ rule = IsRelatedWith(['']) self.assertEqual(self.filter_with_rule(rule), set([ ])) - def test_IsRelatedWith_nonmatching(self): + def test_isrelatedwith_nonmatching(self): + """ + Test non-matching IsRelatedWith rule. + """ rule = IsRelatedWith(['I0000']) self.assertEqual(self.filter_with_rule(rule), set([ ])) - def test_IsRelatedWith_irregular(self): + def test_isrelatedwith_irregular(self): + """ + Test irregular IsRelatedWith rule. + """ rule = IsRelatedWith(['ABCDEFG']) self.assertEqual(self.filter_with_rule(rule), set([ ])) - def test_IsRelatedWith_matching(self): + def test_isrelatedwith_matching(self): + """ + Test matching IsRelatedWith rule. + """ rule = IsRelatedWith(['I1844']) self.assertEqual(self.filter_with_rule(rule), set([ - b'HWTKQCSM28EI6WFDHP', b'T4UKQCYGECXGVNBWMY', b'YOTKQCEX2PLG03LZQS', b'X8UKQCIDY21QIQBDVI', - b'F3UKQC7ZV3EYVWTZ8O', b'0TTKQCXXY59OCDPLV3', b'EVTKQCHV2E2PODFD7C', b'BBUKQC5GPRPDJHJAWU', - b'FRTKQC3G6JBJAR2ZPX', b'NDTKQCN95VFLGJ21L', b'SFTKQC26EJ2BYQCRIA', b'MYTKQCVCFOFM32H9GB', - b'B0UKQC9A54F1GUB7NR', b'PTTKQCYN0JR3ZZJNWR', b'F4UKQCPK572VWU2YZQ', b'LLTKQCX39KCXFSX0U4', - b'IXTKQC1BAU1F1WNXKB', b'3YTKQCK2W63W0MQBJE', b'TQTKQCO897BNA1H93B', b'DOTKQCP1MG3VC8D7V2', - b'3NTKQCZKLMIM6HYFE1', b'WUTKQCVQCUPFFOGUT8', b'GETKQCPRC2W5YDUYM6', b'YRTKQCNDP343OD5OQJ', - b'U0UKQCBZS0R6WW7LBS', b'J2UKQC897I42M9VHDD', b'7MTKQC1QNE4H5RF35S', b'5FTKQCKT9SDZ8TB03C', - b'O1UKQCJD5YHDRW887V', b'EUTKQCFATXRU431YY6', b'UHTKQCORH3NTZ0FYL3', b'2CUKQCFDVN3EZE2E4C', - b'RNTKQCMLGRRKQVKDPR', b'CGTKQC4WO8W3WSQRCX', b'WAUKQCOQ91QCJZWQ9U', b'FZTKQCSTPIQ3C9JC46', - b'AHTKQCM2YFRW3AGSRL', b'WBTKQCC775IAAGIWZD', b'8KTKQC407A8CN5O68H', b'8QTKQCN8ZKY5OWWJZF', - b'UKTKQCSL3AUJIWTD2A', b'HAUKQCM3GYGVTREGZS', b'52UKQCFYXMFTKIGNBS', b'U3UKQCO30PWAK6JQBA', - b'R6UKQC939L9FV62UGE', b'TZTKQCR39A060AQ63C', b'X9UKQCFELSDAQ2TDP1', b'B1UKQCBR49WB3134PN', - b'KSTKQC018GNA7HDCAS', b'FJTKQCJCMAHJOA9NHI', b'HITKQCWJSCZX2AN6NP', b'WVTKQCZC91I63LHEE7', - b'0DTKQC6KBOS69LQJ35', + b'HWTKQCSM28EI6WFDHP', b'T4UKQCYGECXGVNBWMY', b'YOTKQCEX2PLG03LZQS', + b'X8UKQCIDY21QIQBDVI', b'F3UKQC7ZV3EYVWTZ8O', b'0TTKQCXXY59OCDPLV3', + b'EVTKQCHV2E2PODFD7C', b'BBUKQC5GPRPDJHJAWU', b'FRTKQC3G6JBJAR2ZPX', + b'NDTKQCN95VFLGJ21L', b'SFTKQC26EJ2BYQCRIA', b'MYTKQCVCFOFM32H9GB', + b'B0UKQC9A54F1GUB7NR', b'PTTKQCYN0JR3ZZJNWR', b'F4UKQCPK572VWU2YZQ', + b'LLTKQCX39KCXFSX0U4', b'IXTKQC1BAU1F1WNXKB', b'3YTKQCK2W63W0MQBJE', + b'TQTKQCO897BNA1H93B', b'DOTKQCP1MG3VC8D7V2', b'3NTKQCZKLMIM6HYFE1', + b'WUTKQCVQCUPFFOGUT8', b'GETKQCPRC2W5YDUYM6', b'YRTKQCNDP343OD5OQJ', + b'U0UKQCBZS0R6WW7LBS', b'J2UKQC897I42M9VHDD', b'7MTKQC1QNE4H5RF35S', + b'5FTKQCKT9SDZ8TB03C', b'O1UKQCJD5YHDRW887V', b'EUTKQCFATXRU431YY6', + b'UHTKQCORH3NTZ0FYL3', b'2CUKQCFDVN3EZE2E4C', b'RNTKQCMLGRRKQVKDPR', + b'CGTKQC4WO8W3WSQRCX', b'WAUKQCOQ91QCJZWQ9U', b'FZTKQCSTPIQ3C9JC46', + b'AHTKQCM2YFRW3AGSRL', b'WBTKQCC775IAAGIWZD', b'8KTKQC407A8CN5O68H', + b'8QTKQCN8ZKY5OWWJZF', b'UKTKQCSL3AUJIWTD2A', b'HAUKQCM3GYGVTREGZS', + b'52UKQCFYXMFTKIGNBS', b'U3UKQCO30PWAK6JQBA', b'R6UKQC939L9FV62UGE', + b'TZTKQCR39A060AQ63C', b'X9UKQCFELSDAQ2TDP1', b'B1UKQCBR49WB3134PN', + b'KSTKQC018GNA7HDCAS', b'FJTKQCJCMAHJOA9NHI', b'HITKQCWJSCZX2AN6NP', + b'WVTKQCZC91I63LHEE7', b'0DTKQC6KBOS69LQJ35', ])) - def test_HasIdOf_empty(self): + def test_hasidof_empty(self): + """ + Test empty HasIdOf rule. + """ rule = HasIdOf(['']) self.assertEqual(self.filter_with_rule(rule), set([ ])) - def test_HasIdOf_nonmatching(self): + def test_hasidof_nonmatching(self): + """ + Test non-matching HasIdOf rule. + """ rule = HasIdOf(['I0000']) self.assertEqual(self.filter_with_rule(rule), set([ ])) - def test_HasIdOf_irregular(self): + def test_hasidof_irregular(self): + """ + Test irregular HasIdOf rule. + """ rule = HasIdOf(['ABCDEFG']) self.assertEqual(self.filter_with_rule(rule), set([ ])) - def test_HasIdOf_matching(self): + def test_hasidof_matching(self): + """ + Test matching HasIdOf rule. + """ rule = HasIdOf(['I0044']) self.assertEqual(self.filter_with_rule(rule), set([ b'GNUJQCL9MD64AM56OH', ])) - def test_IsDefaultPerson(self): + def test_isdefaultperson(self): + """ + Test IsDefaultPerson rule. + """ rule = IsDefaultPerson([]) self.assertEqual(self.filter_with_rule(rule), set([ b'GNUJQCL9MD64AM56OH', ])) - def test_IsFemale(self): + def test_isfemale(self): + """ + Test IsFemale rule. + """ rule = IsFemale([]) # too many to list out to test explicitly self.assertEqual(len(self.filter_with_rule(rule)), 928) - def test_IsMale(self): + def test_ismale(self): + """ + Test IsMale rule. + """ rule = IsMale([]) # too many to list out to test explicitly self.assertEqual(len(self.filter_with_rule(rule)), 1154) - def test_MissingParent(self): + def test_missingparent(self): + """ + Test MissingParent rule. + """ rule = MissingParent([]) # too many to list out to test explicitly self.assertEqual(len(self.filter_with_rule(rule)), 849) - def test_MultipleMarriages(self): + def test_multiplemarriages(self): + """ + Test MultipleMarriages rule. + """ rule = MultipleMarriages([]) self.assertEqual(self.filter_with_rule(rule), set([ - b'R1VKQCJWNP24VN7BO', b'ZTVJQCTSMI85EGMXFM', b'ENTJQCZXQV1IRKJXUL', b'44WJQCLCQIPZUB0UH', - b'SMWJQCXQ6I2GEXSPK9', b'DN3KQC1URTED410L3R', b'5FYJQC86G8EZ0L4E4B', b'5F4KQCJRU8ZKL6SILT', - b'0YNKQC5U4EQGVNUZD8', b'YRYJQCE3RF4U8A59UB', b'APWKQCI6YXAXBLC33I', b'XSKKQC6GGKLAYANWAF', - b'0FQKQCOQD0VRVJPTSD', b'B3UJQCZHDXII99AWW4', b'cc8205d872f532ab14e', b'SS1KQCWWF9488Q330U', - b'OCYJQCS8YT7JO8KIMO', b'I6HKQCQF72V2N56JQ5', b'6YWJQC86FBVN0J6JS', b'KYNKQCVA6FE65ONFIQ', - b'SHAKQCNY5IXO30GUAB', b'O5XKQC3V6BPJI13J24', b'ZN7KQC3RLB82EXF1QF', b'CIYJQCF3UK12DL0S2Y', - b'H3XJQCFJ4FP4U2WGZC', b'cc82060504445ab6deb', b'4E4KQC1K4XUEX29IJO', b'0XVJQCJUNJY40WDSMA', - b'1WUJQCHNH76G6YD3A', b'IH3KQCM1VZPRKLBLK7', b'242KQCBALBOD8ZK5VI', b'8G4KQCS6C1AOM6ZGR3', - b'I1EKQCGGDSUD8ILUW4', b'X8BKQCSFF4AET5MY23', b'RJWJQCN1XKXRN5KMCP', b'ZWNKQC9DAZ3C6UHUAV', - b'9QUJQCCSWRZNSAPCR', b'HI0KQCG9TGT5AAIPU', b'DI4KQC3S1AO27VWOLN', b'QBDKQCH2IU6N8IXMFE', - b'DK2KQCJYW14VXUJ85', b'117KQCBB32RMTTV4G6', b'0QLKQCFTQMNVGCV4GM', b'D2OKQCGDNPT3BH4WH', - b'CAYJQCKOL49OF7XWB3', b'ZQGKQCGHS67Q4IMHEG', b'OEXJQCQJHF2BLSAAIS', b'UKYJQC70LIZQ11BP89', + b'R1VKQCJWNP24VN7BO', b'ZTVJQCTSMI85EGMXFM', b'ENTJQCZXQV1IRKJXUL', + b'44WJQCLCQIPZUB0UH', b'SMWJQCXQ6I2GEXSPK9', b'DN3KQC1URTED410L3R', + b'5FYJQC86G8EZ0L4E4B', b'5F4KQCJRU8ZKL6SILT', b'0YNKQC5U4EQGVNUZD8', + b'YRYJQCE3RF4U8A59UB', b'APWKQCI6YXAXBLC33I', b'XSKKQC6GGKLAYANWAF', + b'0FQKQCOQD0VRVJPTSD', b'B3UJQCZHDXII99AWW4', + b'cc8205d872f532ab14e', b'SS1KQCWWF9488Q330U', + b'OCYJQCS8YT7JO8KIMO', b'I6HKQCQF72V2N56JQ5', b'6YWJQC86FBVN0J6JS', + b'KYNKQCVA6FE65ONFIQ', b'SHAKQCNY5IXO30GUAB', b'O5XKQC3V6BPJI13J24', + b'ZN7KQC3RLB82EXF1QF', b'CIYJQCF3UK12DL0S2Y', b'H3XJQCFJ4FP4U2WGZC', + b'cc82060504445ab6deb', b'4E4KQC1K4XUEX29IJO', + b'0XVJQCJUNJY40WDSMA', b'1WUJQCHNH76G6YD3A', b'IH3KQCM1VZPRKLBLK7', + b'242KQCBALBOD8ZK5VI', b'8G4KQCS6C1AOM6ZGR3', b'I1EKQCGGDSUD8ILUW4', + b'X8BKQCSFF4AET5MY23', b'RJWJQCN1XKXRN5KMCP', b'ZWNKQC9DAZ3C6UHUAV', + b'9QUJQCCSWRZNSAPCR', b'HI0KQCG9TGT5AAIPU', b'DI4KQC3S1AO27VWOLN', + b'QBDKQCH2IU6N8IXMFE', b'DK2KQCJYW14VXUJ85', b'117KQCBB32RMTTV4G6', + b'0QLKQCFTQMNVGCV4GM', b'D2OKQCGDNPT3BH4WH', b'CAYJQCKOL49OF7XWB3', + b'ZQGKQCGHS67Q4IMHEG', b'OEXJQCQJHF2BLSAAIS', b'UKYJQC70LIZQ11BP89', b'FF2KQCRBSPCG1QY97', b'L6EKQCO8QYL2UO2MQO', ])) - def test_NeverMarried(self): + def test_nevermarried(self): + """ + Test NeverMarried rule. + """ rule = NeverMarried([]) # too many to list out to test explicitly self.assertEqual(len(self.filter_with_rule(rule)), 749) - def test_NoBirthdate(self): + def test_nobirthdate(self): + """ + Test NoBirthdate rule. + """ rule = NoBirthdate([]) # too many to list out to test explicitly self.assertEqual(len(self.filter_with_rule(rule)), 966) - def test_NoDeathdate(self): + def test_nodeathdate(self): + """ + Test NoDeathdate rule. + """ rule = NoDeathdate([]) # too many to list out to test explicitly self.assertEqual(len(self.filter_with_rule(rule)), 1581) - def test_PeoplePrivate(self): + def test_peopleprivate(self): + """ + Test PeoplePrivate rule. + """ # TODO: example.gramps has no people marked private rule = PeoplePrivate([]) - self.assertEqual(self.filter_with_rule(rule), set([ - ])) + self.assertEqual(self.filter_with_rule(rule), set([])) - def test_PeoplePublic(self): + def test_peoplepublic(self): + """ + Test PeoplePublic rule. + """ rule = PeoplePublic([]) # too many to list out to test explicitly self.assertEqual(len(self.filter_with_rule(rule)), 2102) - def test_PersonWithIncompleteEvent(self): + def test_personwithincompleteevent(self): + """ + Test PersonWithIncompleteEvent rule. + """ rule = PersonWithIncompleteEvent([]) # too many to list out to test explicitly self.assertEqual(len(self.filter_with_rule(rule)), 740) - def test_RelationshipPathBetweenBookmarks(self): + def test_relationshipbookmarks(self): + """ + Test RelationshipPathBetweenBookmarks rule. + """ rule = RelationshipPathBetweenBookmarks([]) self.assertEqual(self.filter_with_rule(rule), set([ - b'44WJQCLCQIPZUB0UH', b'35WJQC1B7T7NPV8OLV', b'AWFKQCJELLUWDY2PD3', b'D3WJQCCGV58IP8PNHZ', - b'Q8HKQC3VMRM1M6M7ES', + b'44WJQCLCQIPZUB0UH', b'35WJQC1B7T7NPV8OLV', b'AWFKQCJELLUWDY2PD3', + b'D3WJQCCGV58IP8PNHZ', b'Q8HKQC3VMRM1M6M7ES', ])) diff --git a/gramps/gen/filters/rules/test/place_rules_test.py b/gramps/gen/filters/rules/test/place_rules_test.py index da9a5cab9..e2e09a5ae 100644 --- a/gramps/gen/filters/rules/test/place_rules_test.py +++ b/gramps/gen/filters/rules/test/place_rules_test.py @@ -27,43 +27,71 @@ from gramps.gen.merge.diff import import_as_dict from gramps.cli.user import User from gramps.gen.filters import GenericFilterFactory -from gramps.gen.filters.rules.place import * +from gramps.gen.filters.rules.place import ( + AllPlaces, HasCitation, HasGallery, HasIdOf, RegExpIdOf, HasNote, + HasNoteRegexp, HasReferenceCountOf, HasSourceCount, HasSourceOf, + PlacePrivate, MatchesSourceConfidence, HasData, HasNoLatOrLon, + InLatLonNeighborhood, ChangedSince, HasTag, HasTitle, IsEnclosedBy) GenericPlaceFilter = GenericFilterFactory('Place') class BaseTest(unittest.TestCase): + """ + Place rule tests. + """ @classmethod def setUpClass(cls): + """ + Import example database. + """ cls.db = import_as_dict("example/gramps/example.gramps", User()) def filter_with_rule(self, rule): + """ + Apply a filter with the given rule. + """ filter_ = GenericPlaceFilter() filter_.add_rule(rule) results = filter_.apply(self.db) return set(results) - def test_AllPlaces(self): + def test_allplaces(self): + """ + Test AllPlaces rule. + """ rule = AllPlaces([]) self.assertEqual(len(self.filter_with_rule(rule)), self.db.get_number_of_places()) - def test_HasCitation(self): + def test_hascitation(self): + """ + Test HasCitation rule. + """ rule = HasCitation(['page 23', '', '']) self.assertEqual(self.filter_with_rule(rule), set([b'YNUJQC8YM5EGRG868J'])) - def test_HasGallery(self): + def test_hasgallery(self): + """ + Test HasGallery rule. + """ rule = HasGallery(['0', 'greater than']) self.assertEqual(self.filter_with_rule(rule), set([b'YNUJQC8YM5EGRG868J'])) - def test_HasIdOf(self): + def test_hasidof(self): + """ + Test HasIdOf rule. + """ rule = HasIdOf(['P0001']) self.assertEqual(self.filter_with_rule(rule), set([b'c96587262e91149933fcea5f20a'])) - def test_RegExpIdOf(self): + def test_regexpidof(self): + """ + Test RegExpIdOf rule. + """ rule = RegExpIdOf(['P000.'], use_regex=True) self.assertEqual(self.filter_with_rule(rule), set([ b'c96587262e91149933fcea5f20a', b'c96587262ff262aaac31f6db7af', @@ -73,70 +101,112 @@ class BaseTest(unittest.TestCase): b'c96587262f4a44183c65ff1e52', b'c96587262ed43fdb37bf04bdb7f', ])) - def test_HasNote(self): + def test_hasnote(self): + """ + Test HasNote rule. + """ rule = HasNote([]) self.assertEqual(self.filter_with_rule(rule), set([])) - def test_HasNoteRegexp(self): + def test_hasnoteregexp(self): + """ + Test HasNoteRegexp rule. + """ rule = HasNoteRegexp(['.'], use_regex=True) self.assertEqual(self.filter_with_rule(rule), set([])) - def test_HasReferenceCountOf(self): + def test_hasreferencecountof(self): + """ + Test HasReferenceCountOf rule. + """ rule = HasReferenceCountOf(['greater than', '35']) self.assertEqual(self.filter_with_rule(rule), set([ b'c96587262e566596a225682bf53', b'MATJQCJYH8ULRIRYTH', b'5HTJQCSB91P69HY731', b'4ECKQCWCLO5YIHXEXC', b'c965872630a68ebd32322c4a30a'])) - def test_HasSourceCount(self): + def test_hassourcecount(self): + """ + Test HasSourceCount rule. + """ rule = HasSourceCount(['1', 'equal to']) self.assertEqual(self.filter_with_rule(rule), set([b'YNUJQC8YM5EGRG868J'])) - def test_HasSourceOf(self): + def test_hassourceof(self): + """ + Test HasSourceOf rule. + """ rule = HasSourceOf(['S0001']) self.assertEqual(self.filter_with_rule(rule), set([b'YNUJQC8YM5EGRG868J'])) - def test_PlacePrivate(self): + def test_placeprivate(self): + """ + Test PlacePrivate rule. + """ rule = PlacePrivate([]) self.assertEqual(self.filter_with_rule(rule), set([])) - def test_MatchesSourceConfidence(self): + def test_matchessourceconfidence(self): + """ + Test MatchesSourceConfidence rule. + """ rule = MatchesSourceConfidence(['2']) self.assertEqual(self.filter_with_rule(rule), set([b'YNUJQC8YM5EGRG868J'])) - def test_HasData(self): + def test_hasdata(self): + """ + Test HasData rule. + """ rule = HasData(['Albany', 'County', '']) self.assertEqual(self.filter_with_rule(rule), set([b'c9658726d602acadb74e330116a'])) - def test_HasNoLatOrLon(self): + def test_hasnolatorlon(self): + """ + Test HasNoLatOrLon rule. + """ rule = HasNoLatOrLon([]) self.assertEqual(len(self.filter_with_rule(rule)), 915) - def test_InLatLonNeighborhood(self): + def test_inlatlonneighborhood(self): + """ + Test InLatLonNeighborhood rule. + """ rule = InLatLonNeighborhood(['30N', '90W', '2', '2']) self.assertEqual(self.filter_with_rule(rule), set([ b'C6WJQC0GDYP3HZDPR3', b'N88LQCRB363ES5WJ83', b'03EKQCC2KTNLHFLDRJ', b'M9VKQCJV91X0M12J8'])) - def test_ChangedSince(self): + def test_changedsince(self): + """ + Test ChangedSince rule. + """ rule = ChangedSince(['2013-01-01', '2014-01-01']) self.assertEqual(len(self.filter_with_rule(rule)), 435) - def test_HasTag(self): + def test_hastag(self): + """ + Test HasTag rule. + """ rule = HasTag(['ToDo']) self.assertEqual(self.filter_with_rule(rule), set([])) - def test_HasTitle(self): + def test_hastitle(self): + """ + Test HasTitle rule. + """ rule = HasTitle(['Albany']) self.assertEqual(self.filter_with_rule(rule), set([ b'51VJQCXUP61H9JRL66', b'9XBKQCE1LZ7PMJE56G', b'c9658726d602acadb74e330116a', b'P9MKQCT08Z3YBJV5UB'])) - def test_IsEnclosedBy(self): + def test_isenclosedby(self): + """ + Test IsEnclosedBy rule. + """ rule = IsEnclosedBy(['P0001']) self.assertEqual(self.filter_with_rule(rule), set([ b'EAFKQCR0ED5QWL87EO', b'S22LQCLUZM135LVKRL', b'VDUJQCFP24ZV3O4ID2', diff --git a/gramps/gen/utils/test/file_test.py b/gramps/gen/utils/test/file_test.py index 9ef040e9c..ff38fe6fd 100644 --- a/gramps/gen/utils/test/file_test.py +++ b/gramps/gen/utils/test/file_test.py @@ -21,13 +21,16 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # +""" +File tests. +""" + #------------------------------------------------------------------------- # # Standard python modules # #------------------------------------------------------------------------- import os -import shutil import unittest #------------------------------------------------------------------------- @@ -36,7 +39,6 @@ import unittest # #------------------------------------------------------------------------- from gramps.gen.const import TEMP_DIR, USER_HOME, USER_PLUGINS, VERSION -from gramps.gen.constfunc import get_env_var from gramps.gen.utils.file import media_path, get_empty_tempdir from gramps.gen.dbstate import DbState @@ -46,8 +48,14 @@ from gramps.gen.dbstate import DbState # #------------------------------------------------------------------------- class FileTest(unittest.TestCase): + """ + File tests. + """ def test_mediapath(self): + """ + Test media path variables. + """ # Create database dbstate = DbState() @@ -58,36 +66,45 @@ class FileTest(unittest.TestCase): dbstate.change_database(db) # Test without db.mediapath set - self.assertEqual(media_path(db), os.path.normcase(os.path.normpath(os.path.abspath(USER_HOME)))) + self.assertEqual(media_path(db), os.path.normcase(os.path.normpath( + os.path.abspath(USER_HOME)))) self.assertTrue(os.path.exists(media_path(db))) # Test with absolute db.mediapath db.set_mediapath(os.path.abspath(USER_HOME) + "/test_abs") - self.assertEqual(media_path(db), os.path.normcase(os.path.normpath(os.path.abspath(USER_HOME + "/test_abs")))) + self.assertEqual(media_path(db), os.path.normcase(os.path.normpath( + os.path.abspath(USER_HOME + "/test_abs")))) # Test with relative db.mediapath db.set_mediapath("test_rel") - self.assertEqual(media_path(db), os.path.normcase(os.path.normpath(os.path.abspath(TEMP_DIR + "/utils_file_test/test_rel")))) + self.assertEqual(media_path(db), os.path.normcase(os.path.normpath( + os.path.abspath(TEMP_DIR + "/utils_file_test/test_rel")))) # Test with environment variable db.set_mediapath("/test/{VERSION}/test_var") - self.assertEqual(media_path(db), os.path.normcase(os.path.normpath(os.path.abspath("/test/" + VERSION + "/test_var")))) + self.assertEqual(media_path(db), os.path.normcase(os.path.normpath( + os.path.abspath("/test/" + VERSION + "/test_var")))) db.set_mediapath("{USER_PLUGINS}/test_var") - self.assertEqual(media_path(db), os.path.normcase(os.path.normpath(os.path.abspath(USER_PLUGINS + "/test_var")))) + self.assertEqual(media_path(db), os.path.normcase(os.path.normpath( + os.path.abspath(USER_PLUGINS + "/test_var")))) db.set_mediapath("{VERSION}/test_var") - self.assertEqual(media_path(db), os.path.normcase(os.path.normpath(os.path.abspath(TEMP_DIR + "/utils_file_test/" + VERSION + "/test_var")))) + self.assertEqual(media_path(db), os.path.normcase(os.path.normpath( + os.path.abspath(TEMP_DIR + "/utils_file_test/" + VERSION + + "/test_var")))) # Test with $GRAMPSHOME environment variable not set old_env = os.environ.copy() if 'GRAMPSHOME' in os.environ: del os.environ['GRAMPSHOME'] db.set_mediapath("{GRAMPSHOME}/test_var") - self.assertEqual(media_path(db), os.path.normcase(os.path.normpath(os.path.abspath(USER_HOME + "/test_var")))) + self.assertEqual(media_path(db), os.path.normcase(os.path.normpath( + os.path.abspath(USER_HOME + "/test_var")))) # Test with $GRAMPSHOME environment variable set os.environ['GRAMPSHOME'] = "/this/is/a/test" db.set_mediapath("{GRAMPSHOME}/test_var") - self.assertEqual(media_path(db), os.path.normcase(os.path.normpath(os.path.abspath("/this/is/a/test/test_var")))) + self.assertEqual(media_path(db), os.path.normcase(os.path.normpath( + os.path.abspath("/this/is/a/test/test_var")))) # Restore environment os.environ = old_env diff --git a/gramps/plugins/tool/findloop.py b/gramps/plugins/tool/findloop.py index 8eac91d92..3a42d9244 100644 --- a/gramps/plugins/tool/findloop.py +++ b/gramps/plugins/tool/findloop.py @@ -34,20 +34,18 @@ from gi.repository import GObject # Gramps modules # #------------------------------------------------------------------------ -from gramps.gen.const import GRAMPS_LOCALE as glocale -_ = glocale.translation.sgettext -ngettext = glocale.translation.ngettext # else "nearby" comments are ignored from gramps.gen.const import URL_MANUAL_PAGE from gramps.gui.plug import tool -from gramps.gen.plug.report import utils as ReportUtils -from gramps.gui.editors import EditPerson, EditFamily +from gramps.gui.editors import EditFamily +from gramps.gen.errors import WindowActiveError from gramps.gui.managedwindow import ManagedWindow from gramps.gui.utils import ProgressMeter from gramps.gui.display import display_help from gramps.gui.glade import Glade -from gramps.gen.lib import Tag -from gramps.gen.db import DbTxn from gramps.gen.display.name import displayer as _nd +from gramps.gen.const import GRAMPS_LOCALE as glocale +_ = glocale.translation.sgettext +ngettext = glocale.translation.ngettext # else "nearby" comments are ignored #------------------------------------------------------------------------- # @@ -62,8 +60,10 @@ WIKI_HELP_SEC = _('manual|Find_database_loop') # FindLoop class # #------------------------------------------------------------------------ -class FindLoop(ManagedWindow) : - +class FindLoop(ManagedWindow): + """ + Find loops in the family tree. + """ def __init__(self, dbstate, user, options_class, name, callback=None): uistate = user.uistate @@ -73,20 +73,20 @@ class FindLoop(ManagedWindow) : self.uistate = uistate self.db = dbstate.db - topDialog = Glade() + top_dialog = Glade() - topDialog.connect_signals({ + top_dialog.connect_signals({ "destroy_passed_object" : self.close, "on_help_clicked" : self.on_help_clicked, "on_delete_event" : self.close, }) - window = topDialog.toplevel - title = topDialog.get_object("title") + window = top_dialog.toplevel + title = top_dialog.get_object("title") self.set_window(window, title, self.title) # start the progress indicator - self.progress = ProgressMeter(self.title,_('Starting'), + self.progress = ProgressMeter(self.title, _('Starting'), parent=self.window) self.progress.set_pass(_('Looking for possible loop for each person'), self.db.get_number_of_people()) @@ -98,13 +98,18 @@ class FindLoop(ManagedWindow) : GObject.TYPE_STRING, # 3==son GObject.TYPE_STRING) # 4==family gid - self.treeView = topDialog.get_object("treeview") - self.treeView.set_model(self.model) - col1 = Gtk.TreeViewColumn(_('Gramps ID'), Gtk.CellRendererText(), text=0) - col2 = Gtk.TreeViewColumn(_('Ancestor'), Gtk.CellRendererText(), text=1) - col3 = Gtk.TreeViewColumn(_('Gramps ID'), Gtk.CellRendererText(), text=2) - col4 = Gtk.TreeViewColumn(_('Descendant'), Gtk.CellRendererText(), text=3) - col5 = Gtk.TreeViewColumn(_('Family ID'), Gtk.CellRendererText(), text=4) + self.treeview = top_dialog.get_object("treeview") + self.treeview.set_model(self.model) + col1 = Gtk.TreeViewColumn(_('Gramps ID'), + Gtk.CellRendererText(), text=0) + col2 = Gtk.TreeViewColumn(_('Ancestor'), + Gtk.CellRendererText(), text=1) + col3 = Gtk.TreeViewColumn(_('Gramps ID'), + Gtk.CellRendererText(), text=2) + col4 = Gtk.TreeViewColumn(_('Descendant'), + Gtk.CellRendererText(), text=3) + col5 = Gtk.TreeViewColumn(_('Family ID'), + Gtk.CellRendererText(), text=4) col1.set_resizable(True) col2.set_resizable(True) col3.set_resizable(True) @@ -120,14 +125,15 @@ class FindLoop(ManagedWindow) : col3.set_sort_column_id(2) col4.set_sort_column_id(3) col5.set_sort_column_id(4) - self.treeView.append_column(col1) - self.treeView.append_column(col2) - self.treeView.append_column(col3) - self.treeView.append_column(col4) - self.treeView.append_column(col5) - self.treeSelection = self.treeView.get_selection() - self.treeView.connect('row-activated', self.rowactivated) + self.treeview.append_column(col1) + self.treeview.append_column(col2) + self.treeview.append_column(col3) + self.treeview.append_column(col4) + self.treeview.append_column(col5) + self.treeselection = self.treeview.get_selection() + self.treeview.connect('row-activated', self.rowactivated_cb) + self.curr_fam = None people = self.db.get_person_handles() count = 0 for person_handle in people: @@ -145,6 +151,9 @@ class FindLoop(ManagedWindow) : self.show() def descendants(self, person_handle, new_list): + """ + Find the descendants of a given person. + """ person = self.db.get_person_from_handle(person_handle) pset = set() for item in new_list: @@ -182,13 +191,14 @@ class FindLoop(ManagedWindow) : self.parent = person self.descendants(child_handle, pset) - def rowactivated(self, treeView, path, column) : + def rowactivated_cb(self, treeview, path, column): + """ + Called when a row is activated. + """ # first we need to check that the row corresponds to a person - iter = self.model.get_iter(path) - From_id = self.model.get_value(iter, 0) - To_id = self.model.get_value(iter, 2) - Fam_id = self.model.get_value(iter, 4) - fam = self.dbstate.db.get_family_from_gramps_id(Fam_id) + iter_ = self.model.get_iter(path) + fam_id = self.model.get_value(iter_, 4) + fam = self.dbstate.db.get_family_from_gramps_id(fam_id) if fam: try: EditFamily(self.dbstate, self.uistate, [], fam) @@ -198,11 +208,13 @@ class FindLoop(ManagedWindow) : return False def on_help_clicked(self, obj): - """Display the relevant portion of GRAMPS manual""" + """ + Display the relevant portion of Gramps manual. + """ display_help(webpage=WIKI_HELP_PAGE, section=WIKI_HELP_SEC) def close(self, *obj): - ManagedWindow.close(self,*obj) + ManagedWindow.close(self, *obj) #------------------------------------------------------------------------ #