Template:RWT Report.py
From Gramps
class DbSummaryReport(Report):
def __init__(self, database, options_class, user):
Report.__init__(self, database, options_class, user)
what_types_option = options_class.menu.get_option_by_name('what_types')
self.what_types = what_types_option.get_selected()
self.set_locale(
options_class.menu.get_option_by_name("trans").get_value())
def _write_normal_paragraph(self, text):
self.doc.start_paragraph('DBS-Normal')
self.doc.write_text(text)
self.doc.end_paragraph()
def _write_title_paragraph(self, text):
self.doc.start_paragraph('DBS-Title')
self.doc.write_text(text)
self.doc.end_paragraph()
def _count(self):
males = 0
females = 0
others = 0
unkn = 0
total = 0
surname_map = {}
for person in self.database.iter_people():
if person.get_gender() == Person.MALE:
males += 1
elif person.get_gender() == Person.FEMALE:
females += 1
elif person.get_gender() == Person.OTHER:
others += 1
else:
unkn += 1
total += 1
surname = person.get_primary_name().get_surname()
if surname in surname_map:
surname_map[surname] += 1
else:
surname_map[surname] = 1
slist = []
for key in surname_map.keys():
slist.append((surname_map[key], key))
slist.sort(reverse=True)
return (males, females, others, unkn, total, slist)
def write_report(self):
males, females, others, unkn, total, slist = self._count()
self._write_title_paragraph(self._("Database Summary Report"))
if _('Males') in self.what_types:
self._write_normal_paragraph(self._('Males: %d') % males)
if _('Females') in self.what_types:
self._write_normal_paragraph(self._('Females: %d') % females)
if _('Unknown gender') in self.what_types:
self._write_normal_paragraph(
self._("Individuals with unknown gender: %d") % unkn)
if _('Other') in self.what_types:
self._write_normal_paragraph(
self._("Individuals with other gender: %d") % others)
self._write_normal_paragraph(
self._("Number of individuals: %d") % total)
self._write_normal_paragraph(
self._('Total unique surnames') + ': %d' % len(slist))
top_surnames = (', '.join([s[1] for s in slist[:10]]))
self._write_normal_paragraph(
self._('Top Surnames') + ' : %s' % top_surnames)