def write_report(self): """ Build the actual report. """ records = find_records(self.database, self.filter, self.top_size, self.callname, trans_text=self._, name_format=self._nf) self.doc.start_paragraph('REC-Title') title = self._("Records") mark = IndexMark(title, INDEX_TYPE_TOC, 1) self.doc.write_text(title, mark) self.doc.end_paragraph() self.doc.start_paragraph('REC-Subtitle') self.doc.write_text(self.filter.get_name(self._locale)) self.doc.end_paragraph() for (text, varname, top) in records: if not self.include[varname]: continue self.doc.start_paragraph('REC-Heading') self.doc.write_text(self._(text)) self.doc.end_paragraph() last_value = None rank = 0 for (number, (sort, value, name, handletype, handle)) in enumerate(top): # FIXME check whether person or family, if a family mark BOTH person = self.database.get_person_from_handle(handle) mark = ReportUtils.get_person_mark(self.database, person) if value != last_value: last_value = value rank = number self.doc.start_paragraph('REC-Normal') # FIXME this won't work for RTL languages: self.doc.write_text( self._("%(number)s. ") % {'number': rank + 1}) self.doc.write_markup(str(name), name.get_tags(), mark) if isinstance(value, Span): tvalue = value.get_repr(dlocale=self._locale) else: tvalue = value self.doc.write_text(" (%s)" % tvalue) self.doc.end_paragraph() self.doc.start_paragraph('REC-Footer') self.doc.write_text(self.footer) self.doc.end_paragraph()
def get(self, args: Dict) -> Response: """Get statistics from records.""" db_handle = get_db_handle() locale = get_locale_for_language(args["locale"], default=True) person_filter = get_person_filter(db_handle, args) database = db_handle if args["private"]: database = PrivateProxyDb(db_handle) if args["living"] != "IncludeAll": database = LivingProxyDb( database, LIVING_FILTERS[args["living"]], llocale=locale, ) records = find_records( database, person_filter, args["rank"], None, trans_text=locale.translation.sgettext, name_format=None, living_mode=LIVING_FILTERS["IncludeAll"], user=User(), ) profiles = [] for record in records: profile = { "description": record[0], "key": record[1], "objects": [] } for item in record[2]: try: value = item[1].format(precision=3, as_age=True, dlocale=locale) except AttributeError: value = str(item[1]) query_method = db_handle.method("get_%s_from_handle", item[3]) obj = query_method(item[4]) profile["objects"].append({ "gramps_id": obj.gramps_id, "handle": item[4], "name": str(item[2]), "object": item[3], "value": value, }) profiles.append(profile) return self.response(200, profiles)
def write_report(self): """ Build the actual report. """ records = find_records(self.database, self.filter, self.top_size, self.callname, trans_text=self._, name_format=self._nf) self.doc.start_paragraph('REC-Title') title = self._("Records") mark = IndexMark(title, INDEX_TYPE_TOC, 1) self.doc.write_text(title, mark) self.doc.end_paragraph() self.doc.start_paragraph('REC-Subtitle') self.doc.write_text(self.filter.get_name(self._locale)) self.doc.end_paragraph() for (text, varname, top) in records: if not self.include[varname]: continue self.doc.start_paragraph('REC-Heading') self.doc.write_text(self._(text)) self.doc.end_paragraph() last_value = None rank = 0 for (number, (sort, value, name, handletype, handle)) in enumerate(top): # FIXME check whether person or family, if a family mark BOTH person = self.database.get_person_from_handle(handle) mark = ReportUtils.get_person_mark(self.database, person) if value != last_value: last_value = value rank = number self.doc.start_paragraph('REC-Normal') # FIXME this won't work for RTL languages: self.doc.write_text(self._("%(number)s. ") % {'number': rank+1}) self.doc.write_markup(str(name), name.get_tags(), mark) if isinstance(value, Span): tvalue = value.get_repr(dlocale=self._locale) else: tvalue = value self.doc.write_text(" (%s)" % tvalue) self.doc.end_paragraph() self.doc.start_paragraph('REC-Footer') self.doc.write_text(self.footer) self.doc.end_paragraph()
def main(self): self.set_text(_("Processing...") + "\n") yield True records = find_records(self.dbstate.db, None, 3, CALLNAME_DONTUSE) self.set_text("") for (text, varname, top) in records: yield True self.render_text("<b>%s</b>" % text) last_value = None rank = 0 for (number, (sort, value, name, handletype, handle)) in enumerate(top): if value != last_value: last_value = value rank = number self.append_text("\n %s. " % (rank+1)) self.link(str(name), handletype, handle) self.append_text(" (%s)" % value) self.append_text("\n") self.append_text("", scroll_to='begin') yield False
def write_report(self): """ Build the actual report. """ records = find_records(self.database, self.filter, self.top_size, self.callname, trans_text=self._, name_format=self._nf, living_mode=self._lv, user=self._user) self.doc.start_paragraph('REC-Title') title = self._("Records") mark = IndexMark(title, INDEX_TYPE_TOC, 1) self.doc.write_text(title, mark) self.doc.end_paragraph() self.doc.start_paragraph('REC-Subtitle') filter_name = self.filter.get_name(self._locale) self.doc.write_text("(%s)" % filter_name) self.doc.end_paragraph() if self._lv != LivingProxyDb.MODE_INCLUDE_ALL: self.doc.start_paragraph('REC-Subtitle') self.doc.write_text(self.living_desc) self.doc.end_paragraph() for (text, varname, top) in records: if not self.include[varname]: continue self.doc.start_paragraph('REC-Heading') self.doc.write_text(self._(text)) self.doc.end_paragraph() last_value = None rank = 0 for (number, (sort, value, name, handletype, handle)) in enumerate(top): mark = None if handletype == 'Person': person = self.database.get_person_from_handle(handle) mark = utils.get_person_mark(self.database, person) elif handletype == 'Family': family = self.database.get_family_from_handle(handle) # librecords.py checks that the family has both # a father and a mother and also that each one is # in the filter if any filter was used, so we don't # have to do any similar checking here, it's been done f_handle = family.get_father_handle() dad = self.database.get_person_from_handle(f_handle) f_mark = utils.get_person_mark(self.database, dad) m_handle = family.get_mother_handle() mom = self.database.get_person_from_handle(m_handle) m_mark = utils.get_person_mark(self.database, mom) else: raise ReportError( _("Option '%(opt_name)s' is present " "in %(file)s\n but is not known to " "the module. Ignoring...") % { 'opt_name': handletype, 'file': 'libnarrate.py' }) # since the error is very unlikely I reused the string if value != last_value: last_value = value rank = number self.doc.start_paragraph('REC-Normal') self.doc.write_text( self._("%(number)s. ") % {'number': rank + 1}) self.doc.write_markup(str(name), name.get_tags(), mark) if handletype == 'Family': self.doc.write_text('', f_mark) self.doc.write_text('', m_mark) if isinstance(value, Span): tvalue = value.get_repr(dlocale=self._locale) else: tvalue = value self.doc.write_text(" (%s)" % tvalue) self.doc.end_paragraph() self.doc.start_paragraph('REC-Footer') self.doc.write_text(self.footer) self.doc.end_paragraph()
def write_report(self): """ Build the actual report. """ records = find_records(self.database, self.filter, self.top_size, self.callname, trans_text=self._) self.doc.start_paragraph('REC-Title') title = self._("Records") mark = IndexMark(title, INDEX_TYPE_TOC, 1) self.doc.write_text(title, mark) self.doc.end_paragraph() if self._lang == 'default': self.doc.start_paragraph('REC-Subtitle') self.doc.write_text(self.filter.get_name()) self.doc.end_paragraph() else: # The only way which I thought of to get a desired non-English # filter name if the starting UI is a non-English one, was to # change ReportUtils.get_person_filters so that it creates the # filters with English (untranslated) names, but that would mean # changing every filter.get_name() in every place that the # get_person_filters filters are used, to always translate the # get_name, and I wasn't in the mood to do that to all of them, # so until that happen -- assuming it works, since I didn't try # it to see, since the person's name will be in get_person_filters # but the deferred translation will be where the filter.get_name() # is, so it might not work at all -- but until it does, or another # way is found, there will be no translated subtitle, only a # subtitle if the report's output is in the main/UI language pass # FIXME for (text, varname, top) in records: if not self.include[varname]: continue self.doc.start_paragraph('REC-Heading') self.doc.write_text(self._(text)) self.doc.end_paragraph() last_value = None rank = 0 for (number, (sort, value, name, handletype, handle)) in enumerate(top): # FIXME check whether person or family, if a family mark BOTH person = self.database.get_person_from_handle(handle) mark = ReportUtils.get_person_mark(self.database, person) if value != last_value: last_value = value rank = number self.doc.start_paragraph('REC-Normal') # FIXME this won't work for RTL languages: self.doc.write_text(self._("%(number)s. ") % {'number': rank+1}) self.doc.write_markup(cuni(name), name.get_tags(), mark) if isinstance(value, Span): tvalue = value.get_repr(dlocale=self._locale) else: tvalue = value self.doc.write_text(" (%s)" % tvalue) self.doc.end_paragraph() self.doc.start_paragraph('REC-Footer') self.doc.write_text(self.footer) self.doc.end_paragraph()
def write_report(self): """ Build the actual report. """ records = find_records(self.database, self.filter, self.top_size, self.callname, trans_text=self._, name_format=self._nf, living_mode=self._lv) self.doc.start_paragraph('REC-Title') title = self._("Records") mark = IndexMark(title, INDEX_TYPE_TOC, 1) self.doc.write_text(title, mark) self.doc.end_paragraph() self.doc.start_paragraph('REC-Subtitle') filter_name = self.filter.get_name(self._locale) self.doc.write_text("(%s)" % filter_name) self.doc.end_paragraph() if self._lv != LivingProxyDb.MODE_INCLUDE_ALL: self.doc.start_paragraph('REC-Subtitle') self.doc.write_text(self.living_desc) self.doc.end_paragraph() for (text, varname, top) in records: if not self.include[varname]: continue self.doc.start_paragraph('REC-Heading') self.doc.write_text(self._(text)) self.doc.end_paragraph() last_value = None rank = 0 for (number, (sort, value, name, handletype, handle)) in enumerate(top): mark = None if handletype == 'Person': person = self.database.get_person_from_handle(handle) mark = utils.get_person_mark(self.database, person) elif handletype == 'Family': family = self.database.get_family_from_handle(handle) # librecords.py checks that the family has both # a father and a mother and also that each one is # in the filter if any filter was used, so we don't # have to do any similar checking here, it's been done f_handle = family.get_father_handle() dad = self.database.get_person_from_handle(f_handle) f_mark = utils.get_person_mark(self.database, dad) m_handle = family.get_mother_handle() mom = self.database.get_person_from_handle(m_handle) m_mark = utils.get_person_mark(self.database, mom) else: raise ReportError(_( "Option '%(opt_name)s' is present " "in %(file)s\n but is not known to " "the module. Ignoring...") % {'opt_name': handletype, 'file': 'libnarrate.py'}) # since the error is very unlikely I reused the string if value != last_value: last_value = value rank = number self.doc.start_paragraph('REC-Normal') self.doc.write_text( self._("%(number)s. ") % {'number': rank+1}) self.doc.write_markup(str(name), name.get_tags(), mark) if handletype == 'Family': self.doc.write_text('', f_mark) self.doc.write_text('', m_mark) if isinstance(value, Span): tvalue = value.get_repr(dlocale=self._locale) else: tvalue = value self.doc.write_text(" (%s)" % tvalue) self.doc.end_paragraph() self.doc.start_paragraph('REC-Footer') self.doc.write_text(self.footer) self.doc.end_paragraph()