diff --git a/ChangeLog b/ChangeLog index 67b8dfc68..1a87b78a3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2005-04-01 Martin Hawlisch + * src/plugins/TestcaseGenerator.py: Small changes to family generation + * src/plugins/StatisticsChart.py: Added statistics for Surnames, + Number of Families and Event Types + 2005-04-01 Richard Taylor * src/GrampsDBCallback.py: rewrite of new callback scheme using python signals * src/GrampsBSDDB.py: handle signals instead of callback functions diff --git a/src/plugins/StatisticsChart.py b/src/plugins/StatisticsChart.py index 74a63cdce..7354ed841 100755 --- a/src/plugins/StatisticsChart.py +++ b/src/plugins/StatisticsChart.py @@ -95,6 +95,8 @@ class Extract: self.extractors = { 'data_title': ("Titles", _("Titles"), self.get_person, self.get_title), + 'data_sname': ("Surnames", _("Surnames"), + self.get_person, self.get_surname), 'data_fname': ("Forenames", _("Forenames"), self.get_person, self.get_forename), 'data_gender': ("Genders", _("Genders"), @@ -115,18 +117,22 @@ class Extract: self.get_death, self.get_place), 'data_mplace': ("Marriage places", _("Marriage places"), self.get_marriage_handles, self.get_places), + 'data_mcount': ("Number of relationships", _("Number of relationships"), + self.get_family_handles, self.get_handle_count), 'data_fchild': ("Ages when first child born", _("Ages when first child born"), self.get_child_handles, self.get_first_child_age), 'data_lchild': ("Ages when last child born", _("Ages when last child born"), self.get_child_handles, self.get_last_child_age), 'data_ccount': ("Number of children", _("Number of children"), - self.get_child_handles, self.get_child_count), + self.get_child_handles, self.get_handle_count), 'data_mage': ("Marriage ages", _("Marriage ages"), self.get_marriage_handles, self.get_event_ages), 'data_dage': ("Ages at death", _("Ages at death"), self.get_person, self.get_death_age), 'data_age': ("Ages", _("Ages"), - self.get_person, self.get_person_age) + self.get_person, self.get_person_age), + 'data_etypes': ("Event types", _("Event types"), + self.get_event_handles, self.get_event_type) } # ----------------- data extraction methods -------------------- @@ -150,6 +156,15 @@ class Extract: else: return [_("(Preferred) forename missing")] + def get_surname(self, person): + "return surnames for given person" + # TODO: return all surnames, not just primary ones... + surnames = person.get_primary_name().get_surname().strip() + if surnames: + return [name.capitalize() for name in surnames.split()] + else: + return [_("(Preferred) surname missing")] + def get_gender(self, person): "return gender for given person" # TODO: why there's no Person.getGenderName? @@ -233,6 +248,17 @@ class Extract: return ages return [_("Events missing")] + def get_event_type(self, data): + "return event types at given (person,event_handles)" + types = [] + person, event_handles = data + for event_handle in event_handles: + event = self.db.get_event_from_handle(event_handle) + types.append(event.get_name()) + if types: + return types + return [_("Events missing")] + def get_first_child_age(self, data): "return age when first child in given (person,child_handles) was born" ages, errors = self.get_sorted_child_ages(data) @@ -249,8 +275,8 @@ class Extract: return errors return [_("Children missing")] - def get_child_count(self, data): - "return number of children in given (person,child_handles)" + def get_handle_count(self, data): + "return number of handles in given (person,handle_list) used for child count, family count" return [str(len(data[1]))] # ------------------- utility methods ------------------------- @@ -336,6 +362,22 @@ class Extract: return (person, marriages) return None + def get_family_handles(self, person): + "return list of family handles for given person or None" + families = person.get_family_handle_list() + + if families: + return (person, families) + return None + + def get_event_handles(self, person): + "return list of event handles for given person or None" + events = person.get_event_list() + + if events: + return (person, events) + return None + # ----------------- data collection methods -------------------- def get_person_data(self, person, collect): diff --git a/src/plugins/TestcaseGenerator.py b/src/plugins/TestcaseGenerator.py index c48bbc4dc..119cec75d 100644 --- a/src/plugins/TestcaseGenerator.py +++ b/src/plugins/TestcaseGenerator.py @@ -133,6 +133,10 @@ class TestcaseGenerator: self.persons_todo.append( self.generate_person(0)) for person_h in self.persons_todo: self.generate_family(person_h) + if randint(0,3) == 0: + self.generate_family(person_h) + if randint(0,7) == 0: + self.generate_family(person_h) if self.person_count > self.max_person_count: break for child_h in self.parents_todo: @@ -438,6 +442,7 @@ class TestcaseGenerator: self.db.commit_person(child,self.trans) if randint(0,3) > 0: self.persons_todo.append(child_h) + def generate_parents(self,child_h): child = self.db.get_person_from_handle(child_h) if child.get_parent_family_handle_list(): @@ -448,9 +453,9 @@ class TestcaseGenerator: person1_h = self.generate_person(1,lastname) person2_h = self.generate_person(0) - if randint(0,2) > 0: + if randint(0,2) > 1: self.parents_todo.append(person1_h) - if randint(0,2) > 0: + if randint(0,2) > 1: self.parents_todo.append(person2_h)