Report Generation¶
Report
Class¶
The Report
class is aimed to model a report document in an object-oriented fashion. It is a subclass of list
, hence exposing the same methods. It also manages report elements' names for distinguishing elements in some particular output formats.
from tinyscript.report import *
r = Report()
r.append(Text("test"))
r.append(List("item1", "item2", name="mylist")
Free text
Note that free text can also be used. In this case, it will be handled as a Text
element instance.
New elements can be:
- Appended: report.append(*elements)
; note that, on the contrary of list.append
, it can take multiple inputs.
- Prepended: report.prepend(*elements)
.
- Inserted at position: report.insert(integer, element)
.
- Extending the report: report.extend(list_of_elements)
.
Header and footer
The Header
and Footer
elements can be added only once. Any additional instance is ignored.
And just like with the list
, we can also copy()
or clear()
a Report
instance. The count
methods uses the element class name in lowercase to provide the counts of a type of elements.
Report Objects¶
Multiple report elements can be defined:
Class | HTML tag | Description |
---|---|---|
Blockquote(c) |
blockquote |
Quoted text block, taking 1 argument: the [c]ontent |
Code(c) |
pre |
Code block, taking 1 argument: the [c]ode |
Data(d) |
Data [d]ictionary ; its HTML is generated using json2html | |
Footer(l,c,r) |
Footer text for displaying on every page, split into 3 sections: [l]eft, [c]enter and [r]ight ; center's default is the page numbering (format: #page/#pages ) |
|
Header(l,c,r) |
Header text for displaying on every page, split into 3 sections: [l]eft, [c]enter and [r]ight | |
Image(s,d,w,h) |
img |
Image reference, taking up to 4 arguments: the [s]ource and optionally a [d]escription, the [w]idth and the [h]eight |
List(*i) |
ol , ul |
List of [i]tems that can be ordered or not |
Table(d,ch,rh,cf) |
table |
Table with column and row headers, taking 3 arguments : a list of rows as the [d]ata, a list of [c]olumn [h]eaders, a list of [r]ow [h]eaders and a list of [c]olumn [f]ooters |
Text(c,t) |
p |
Text paragraph, takin 1 argument : the [c]ontent to be displayed as a paragraph or any user-defined [t]ag |
Title(t) |
h1 |
Big bold title line, taking 1 argument : title's [t]ext |
Section(t) |
h2 |
Bold section title line, taking 1 argument : section title's [t]ext |
Subsection(t) |
h3 |
Bold section title line, taking 1 argument : subsection title's [t]ext |
Styling
All these elements can have the following styling keyword-arguments:
size
: font size ; defaults to12
color
: font color ; defaults to "black
"style
: font style attribute (bold
,italic
, ...) ; default to "normal
"
Note that the aforementioned default values do not apply for particular size-dependent elements (e.g. h1
, h2
, ...) but using the size can still be forced by using the related keyword-argument.
Element naming convention and assignment
Elements are named by default with their class name. Any single instance will have its element class name as its own name. If multiple instances of a class exist, the name is class-id
, with the id
being the index (starting at 1) of the element occurrence for this class. E.g. a report with 3 Text
elements will have names, in the order of insertion, "text-1
", "text-2
" and "text-3
". If this report has only 1 List
element, this will be named "list
" by default.
This default behavior can of course be avoided by stating the name in the keyword-arguments of element's initialization. In this case, any other element from the same class initialized without a name will still have its name generated with its id
. E.g. a report with 2 Text
elements whose one with the name mytable
will have its text elements named "mytable
" and "text-2
".
Output formats¶
The Report
class aims to model a report for generating it to multiple common formats such as HTML or XML. The following formats are available:
csv
: this gathers all the data fromList
andTable
elements to aggregate these into a single CSV.html
: this generates the HTML version of the report.json
: this collects all the data from the elements, by default in the form{name: data}
, andData
'sdata
attribute (which is already in the JSON format).md
: this generates the Markdown version of the report.pdf
(only works with Python 3): this generates the PDF output of the report object with the filename set atReport
's object initialization or with itsfilename
attribute (note that ".pdf
" is appended by the output method).xml
: this generates the XML version of the report, representing the data by using elements' names like with thejson
output format.
Output indentation
For HTML and XML formats, the indentation can be set by using the indent
keyword-argument. For HTML, the indentation defaults to 4 characters and for XML, it defaults to 2.