From: Lawrence D'Oliveiro on
Very handy library for creating and manipulating ODF documents without any
dependency on OpenOffice.org <http://odfpy.forge.osor.eu/>.

I've been looking at using it for automating the generation of the invoices
I send out at the end of each month. So far, it's been a lot easier than
trying to figure out PyUNO. :)

One thing, though, the examples are full of procedural sequences involving
creating an object, and then calling some other object's addElement method
to add the new object as a child—lots of repetitive accesses to intermediate
variables. So I wrote this nice, simple convenience routine

def AddElement(Parent, Construct, Attrs, Children) :
# convenience routine for building ODF structures.
NewElt = Construct(**Attrs)
for Child in Children :
NewElt.addElement(Child)
#end for
if Parent != None :
Parent.addElement(NewElt)
#end if
return NewElt
#end AddElement

With this, I can build quite complicated structures in a single statement,
using a more functional approach, e.g.

AddElement \
(
Parent = TheDoc.text,
Construct = odf.text.P,
Attrs = dict
(
stylename = AddElement
(
Parent = TheDoc.automaticstyles,
Construct = odf.style.Style,
Attrs = dict(name = "work header", family = "paragraph"),
Children =
(
odf.style.TextProperties(fontweight = "bold"),
AddElement
(
Parent = None,
Construct = odf.style.ParagraphProperties,
Attrs = dict
(
marginbottom = "0.21cm"
),
Children =
(
AddElement
(
Parent = None,
Construct = odf.style.TabStops,
Attrs = dict(),
Children =
(
odf.style.TabStop(position = "15.1cm"),
)
),
)
),
)
)
),
Children =
(
odf.text.Span(text = "Description of Work"),
odf.text.Tab(),
odf.text.Span(text = "Charge"),
)
)