Adapt a builtin Report
A question was posted to the Discourse forum wondering if there were tips somewhere for copying an internal Gramps report to a make an experimental addon?
It seems like more people would be intrigued with the possibilities of tweaking reports without the risk of breaking a feature. Particularly one that they use often enough that tweaking it seemed like a good idea.
Making a duplicate addon sidesteps putting the original at risk. However, there are differences between builtins and 3rd party addons. It seemed like that might require at least converting the library paths and making a new .gpr.py
registration file. What else?
Contents
In a private message {on March 28th}, GaryG privately replied and sent a few copies of reports generated that are examples of internal reports converted to the Addon format.
In the sample cases, Gary had taken the Detailed Ancestor and Detailed Descendant stock reports and added the ability to include *all* images for everyone. The Detailed individual report had that functionality, but the ancestor/descendant did not.
Find the original Addon Python source
Reports can be difficult to find in the Gramps collection of source code. There are a wide variety of report flavors: text and graphical reports, Quick Reports, reporting View modes and reporting Gramplets. And each can be builtin or be a 3rd Party Addon.
So, the first step is to find the master copy of the module generating the report.
Third party addons are easy to locate within the gramps51\plugins
subdirectory of the User Directory. You just make a duplicate of the report and modify the duplicate to be distinct (both to Gramps and how the modified report will appear in the GUI) from the original.
For the builtins, we start with the CLI Reports list from a stock installation of Gramps:
Available names are: ancestor_chart - Ancestor Tree ancestor_report - Ahnentafel Report birthday_report - Birthday and Anniversary Report calendar - Calendar descend_chart - Descendant Tree descend_report - Descendant Report det_ancestor_report - Detailed Ancestral Report det_descendant_report - Detailed Descendant Report endofline_report - End of Line Report family_descend_chart - Family Descendant Tree family_group - Family Group Report familylines_graph - Family Lines Graph fan_chart - Fan Chart hourglass_graph - Hourglass Graph indiv_complete - Complete Individual Report kinship_report - Kinship Report navwebpage - Narrated Web Site notelinkreport - Note Link Report number_of_ancestors - Number of Ancestors Report place_report - Place Report records - Records Report rel_graph - Relationship Graph statistics_chart - Statistics Charts summary - Database Summary Report tag_report - Tag Report timeline - Timeline Chart WebCal - Web Calendar
C:\Program Files\GrampsAIO64-5.1.3-2\gramps\plugins\view\view.gpr.py C:\Program Files\GrampsAIO64-5.1.3-2\gramps\plugins\importer\import.gpr.py C:\Program Files\GrampsAIO64-5.1.3-2\gramps\plugins\export\export.gpr.py C:\Program Files\GrampsAIO64-5.1.3-2\gramps\plugins\mapservices\mapservice.gpr.py C:\Program Files\GrampsAIO64-5.1.3-2\gramps\plugins\tool\tools.gpr.py C:\Program Files\GrampsAIO64-5.1.3-2\gramps\plugins\gramplet\gramplet.gpr.py C:\Program Files\GrampsAIO64-5.1.3-2\gramps\plugins\textreport\textplugins.gpr.py C:\Program Files\GrampsAIO64-5.1.3-2\gramps\plugins\quickview\quickview.gpr.py C:\Program Files\GrampsAIO64-5.1.3-2\gramps\plugins\docgen\docgen.gpr.py C:\Program Files\GrampsAIO64-5.1.3-2\gramps\plugins\drawreport\drawplugins.gpr.py C:\Program Files\GrampsAIO64-5.1.3-2\gramps\plugins\graph\graphplugins.gpr.py C:\Program Files\GrampsAIO64-5.1.3-2\gramps\plugins\webreport\webplugins.gpr.py
ch-ch-ch-changes
The important changes
- Change the Class names to be unique. Each report has 2 classes - one for the code and one for the report. In my cases, I added a trailing ‘i’.
- Change the name of the report styles. This is necessary if you are using books, not absolutely required if not. For the Descendant report I changed the style prefix from DDR to DDRI, for instance. I didn’t change the Ancestor report.
- Update the
.gpr.py
registration file to point to the correct file and correct classes.
Attached are 2 samples with the old (names ending with report.py) and the new code (names ending with reporti.py) as well as the revised .gpr.py
files. The old code may have had updates. The adaptation was written quite a while ago - so every diff may not be significant.
Not yet converted...
This article's content is incomplete or a placeholder stub. |
Apart from filing a bug report and waiting for someone qualified to do something about it, you will have to modify the code.
Unfortunately the Detailed Descendant and Detailed Ancestor reports are part of the main program and are not plugins.
The result of that is that you have to modify the code of the existing program,
Both the ancestor and descendant report programs are to be found (Linux) /usr/lib/python3/dist-packages/gramps/plugins/textreport
directory. Root permission will be required. Compare the two files, They do similar things so there should be some similarities. Look for the formatting codes (eg DAR-Title) to give some idea of what the program is printing in a given bit of code.
Oh yes, and get a book on Python programming.
Always keep a copy of the original file for when you really screw up.
When you change a file you will need to close and reopen Gramps to see the changes take effect.
Don’t be afraid to have a go, and good luck.
If you do manage to get it working, then keep a copy of your modified file, because the next Gramps update will overwrite everything that you have done.
This may come across as critical of the development team. that is not my intention. They have higher priorities than fixing things which do work well, even if some of us wished they worked differently.
See also
- Addons development
- substitution values for Reports
- Report writing tutorial
- downloadable Sample Report for new developers templates
- Report snippets
- Sample reports
- Signals and Callbacks
Reference tools of available Data fields:
- Gramps data model
- Supertool Third-party addon
Sample Report Specifications