Skip to main content

An easy solution to design reports using OpenOffice

Project description

Introduction
============

This work was originally inspired by `relatorio`_ and diverged in
implementation, scope and ambitions. Relatorio has many more features
when py3o.template is mainly focused on ODT, ODS and text output.

py3o is an elegant and scalable solution to design
reports using LibreOffice.
py3o.template is the templating component that takes care of
merging your data sets with a corresponding templated OpenOffice document.

It is plateform independent and does not require LibreOffice/OpenOffice itself
to generate an ODF file.

If you want to generate a PDF or any other supported output format you will then
need to have a server with either LibreOffice or OpenOffice and to install
the `py3o.renderserver`_ on it. We also provide a docker image on
the `docker hub`_

If you want to have templating fusion & document conversion in one
single web service usable from any language with just HTTP/POST you can install
`py3o.fusion`_ server. Which also exists as a `docker image`_

Python 3 support
================

py3o.template is python3 ready. But, yes there is a but... alas!,
you'll need to install a trunk version of Genshi::

$ # activate your python env...
$ svn checkout http://svn.edgewall.org/repos/genshi/trunk genshi_trunk
$ cd genshi_trunk
$ python setup.py build
$ python setup.py install

We tested this with revision 1271.
When genshi 0.8 is released we can officially say we support Python3 out of
the box.

Full Documentation
==================

We `provide a documentation`_ for this package. If anything is not correctly
explained, please! create a ticket `in our ticketing system`_

Example Usage
=============

Below is an example that you can find in the source code inside the examples
directory.

::

from py3o.template import Template

t = Template("py3o_example_template.odt", "py3o_example_output.odt")

t.set_image_path('staticimage.logo', 'images/new_logo.png')


class Item(object):
pass

items = list()

item1 = Item()
item1.val1 = 'Item1 Value1'
item1.val2 = 'Item1 Value2'
item1.val3 = 'Item1 Value3'
item1.Currency = 'EUR'
item1.Amount = '12345.35'
item1.InvoiceRef = '#1234'
items.append(item1)

for i in xrange(1000):
item = Item()
item.val1 = 'Item%s Value1' % i
item.val2 = 'Item%s Value2' % i
item.val3 = 'Item%s Value3' % i
item.Currency = 'EUR'
item.Amount = '6666.77'
item.InvoiceRef = 'Reference #%04d' % i
items.append(item)

document = Item()
document.total = '9999999999999.999'

data = dict(items=items, document=document)
t.render(data)

Changelog
=========

0.9.5 Oct. 30 2015
~~~~~~~~~~~~~~~~~~~~

- 0.9.5 is just a rerelease of 0.9.4 with this README correctly
amended...

- Added support for formatting functions in the template in
order to control date number localization
- Added reference to original inspiration in the README
- Added example source code for ODS output.
- Fixed a memory usage in case of big output file size that
was introduced by the dynamic image feature.
- Introduced an experimental TextTemplate
- Fixed support for special cases where page breaks removals
removed trailing text (thanks to agix)

0.9.3 Jun. 26 2015
~~~~~~~~~~~~~~~~~~

- Introduced dynamic image support (ie: pass in image data in the input
iterator) and use it to insert images on the fly in the report)

0.9.2 Jun. 26 2015
~~~~~~~~~~~~~~~~~~

- WARNING: if you used the old image replacement system, you
need to update your code to set static image from this::

# old way
t.set_image_path('logo', 'images/new_logo.png')

# You should now set it like this instead

# new way. Note the 'staticimage.' prefix added just before 'logo'
t.set_image_path('staticimage.logo', 'images/new_logo.png')

- WARNING: after updating your code you must also update your template
to prefix your static images names with the 'staticimage.' prefix.

- Added dynamic images support. You can now add images instructions inside
for loops or anywhere in your templates and pass the image data
inside your objects attributes.
- Added support for image data (dynamic ones) being passed-in as base64
data. This is useful for some clients like `Odoo's report_py3o`_ because
they store image data as base64 encoded fields.

.. _Odoo's report_py3o: https://bitbucket.org/xcg/report_py3o

0.9.1 Jun. 3 2015
~~~~~~~~~~~~~~~~~

- Fixed parser to read from the var name instead of its description,
if you dont use the helper tool to introspect your reports this release
is of no importance to you as it only fixes this particular point.

0.9 Jan. 8 2015
~~~~~~~~~~~~~~~~

- Added support for soft page breaks


0.8 Nov. 19 2014
~~~~~~~~~~~~~~~~

- Added better unit tests
- Fixed corner cases in the variable introspection mechanism
- Better handling of "ignore_undefined" that now also allows undefined images

0.7 Oct. 15 2014
~~~~~~~~~~~~~~~~

- Added Python3 support
- Fixed a problem with validity of output in case the template contains
a text:list inside a for loop
- Added new public methods to help report servers introspect the template
data dictionary
- Added real unit tests (96% coverage ATM, way to go test team!)

Contributors
============

By order of contribution date:

- `Florent Aide`_
- `Emmanuel Cazenave`_
- `jon1012`_
- `Eugene Morozov`_
- `Houzéfa Abbasbay`_
- `Torsten Irländer`_
- `Sergey Fedoseev`_
- `Vincent Lhote-Hatakeyama`_
- `Anael Lorimier`_
- `Björn Ricks`_
- `Agix`_

.. _Florent Aide: https://bitbucket.org/faide
.. _Emmanuel Cazenave: https://bitbucket.org/cazino
.. _jon1012: https://bitbucket.org/jon1012
.. _Eugene Morozov: https://bitbucket.org/mojo
.. _Houzéfa Abbasbay: https://bitbucket.org/houzefa-abba
.. _Torsten Irländer: https://bitbucket.org/ti
.. _Sergey Fedoseev: https://bitbucket.org/sir_sigurd
.. _Vincent Lhote-Hatakeyama: https://bitbucket.org/vincent_lhote
.. _Anael Lorimier: https://bitbucket.org/alorimier
.. _Björn Ricks: https://bitbucket.org/bjoernricks
.. _Agix: https://bitbucket.org/agix

.. _py3o.renderserver: https://bitbucket.org/faide/py3o.renderserver/
.. _provide a documentation: http://py3otemplate.readthedocs.org
.. _in our ticketing system: https://bitbucket.org/faide/py3o.template/issues?status=new&status=open
.. _docker hub: https://registry.hub.docker.com/u/xcgd/py3oserver-docker/
.. _py3o.fusion: https://bitbucket.org/faide/py3o.fusion
.. _docker image: https://registry.hub.docker.com/u/xcgd/py3o.fusion
.. _relatorio: http://relatorio.tryton.org/

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

py3o.template-0.9.5.zip (822.3 kB view details)

Uploaded Source

py3o.template-0.9.5.tar.gz (767.3 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

py3o.template-0.9.5-py2.7.egg (409.6 kB view details)

Uploaded Egg

py3o.template-0.9.5-py2-none-any.whl (386.2 kB view details)

Uploaded Python 2

File details

Details for the file py3o.template-0.9.5.zip.

File metadata

  • Download URL: py3o.template-0.9.5.zip
  • Upload date:
  • Size: 822.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for py3o.template-0.9.5.zip
Algorithm Hash digest
SHA256 376bd4ce90c2504eba5b1ad530ba745d0ca4f8ace05d8f46d5a8d74ed06a1d25
MD5 3943da5ae9458b00015b2d5b86be13be
BLAKE2b-256 c8af4e4fcac9e94eb26f58bfa0f124e5c19ff95d4184b97af9aec33b02df1b38

See more details on using hashes here.

File details

Details for the file py3o.template-0.9.5.tar.gz.

File metadata

  • Download URL: py3o.template-0.9.5.tar.gz
  • Upload date:
  • Size: 767.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for py3o.template-0.9.5.tar.gz
Algorithm Hash digest
SHA256 1b71be8e9e79ceaa5cfa2baa175642144ccbcc095ada93127f3b12f3daad576e
MD5 67ce6c2d5107b507abe4ae9ad0c6cb99
BLAKE2b-256 9f787421a23f210c56a56ffa9990dc1e5d9f4ee13f59591ddf4440014d1869a6

See more details on using hashes here.

File details

Details for the file py3o.template-0.9.5-py2.7.egg.

File metadata

File hashes

Hashes for py3o.template-0.9.5-py2.7.egg
Algorithm Hash digest
SHA256 e1c9081a3429f90a1b279bad834a708084bcdf890d3a1007c3c3064f7ea19fb3
MD5 584dc900ccc89e67916c184b521b5ce6
BLAKE2b-256 372322b3a1813b594329ee643e43a1ca0b28d63b7cce61678d646629f78335d9

See more details on using hashes here.

File details

Details for the file py3o.template-0.9.5-py2-none-any.whl.

File metadata

File hashes

Hashes for py3o.template-0.9.5-py2-none-any.whl
Algorithm Hash digest
SHA256 1979eded0a33eb794d774812c62dad9c715009466502a4c24bb1acc3ceccba0a
MD5 16c8c393c6dfd5a6eeb54239e074d7a7
BLAKE2b-256 573d6ed54d2ed94839e83c1be584bc03df2588b243ef8e416d743c85c2191179

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page