py3o.template


Namepy3o.template JSON
Version 0.10.0 PyPI version JSON
download
home_pagehttp://bitbucket.org/faide/py3o.template
SummaryAn easy solution to design reports using LibreOffice
upload_time2019-03-15 10:09:06
maintainer
docs_urlNone
authorFlorent Aide
requires_python
licenseMIT License
keywords libreoffice openoffice templating pdf
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            py3o.template
*************

.. image:: https://drone-ci.xcg.io/api/badges/faide/py3o.template/status.svg
  :target: https://drone-ci.xcg.io/faide/py3o.template
  :alt: Build Status

.. image:: https://img.shields.io/badge/code%20style-black-000000.svg
  :target: https://github.com/ambv/black
  :alt: Code Style: Black

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

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.

Supported Python versions: 2.7, >= 3.5.

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.

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`_

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

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

Docs also contain a "Hacking" part for contributors (how tests are run, code
style...).

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.10.0 2019-03-15
-----------------

  - Save embedded images into "Pictures" directory to work with lowriter>=6.0

  - Rely on `babel`_ to format dates & numbers from now on.

    -> ``format_date`` has been deprecated in favor of the new
       ``format_datetime``. Format specifiers change as well; see the
       "templating" doc. Example (more in docs)::

        function="format_datetime('2015-08-02 17:05:06', format='full', locale='fr_FR')"
            -> dimanche 2 août 2015 à 17:05:06 Temps universel coordonné

    -> ``format_amount`` & ``format_locale`` have been deprecated in favor of
       the new ``format_currency``. Example (more in the "templating" doc)::

        function="format_currency(123456789.4242, 'EUR', locale='fr_FR')"
            -> 123 456 789,42 €

  - Re-enable Python 3 in our test suite now that a recent ``genshi`` has been
    released.


0.9.13 2018-07-03
-----------------
  - Added a new format_locale function to supersed the format_amount
  - Keep aspect ratio of image if no width or height is given (thanks to
    Tom Gottfried)
  - fix generated VALUE formula, If the Genshi expressions generates a number
    value (float or integer), the generated formula will be `=VALUE("1.1")`
    which is problematic if the user machine is configured to use a decimal
    separator different than the `.`. With this fix the generated formula will
    be `=VALUE(1.1)` (without the quotes) which is correctly handled with
    by the `.ods` format. (thanks to Zakaria Makrelouf)
  - Improve error message 'We handle urls in tables or text paragraph only'
    (thanks to Alexis de Lattre)
  - Add format_multiline for support of new lines (thanks to John Asplin)


0.9.12 2018-04-11
-----------------

  - Better error reporting for cases when the link is not positionned
    on its own line.
  - Better error reporting for cases when an instruction link does not contain
    the equal sign.
  - Correct handling of images in odf 1.2 (thanks to Ari Caldeira)
  - Now support text:span in functions (thanks to John Asplin)

0.9.11 Dec. 16 2016
-------------------

  - Added support for escaping False values. Values evaluated as False are
    replaced with an empty string during template rendering. This
    functionality is disabled by default and can be enabled with a new
    parameter on the Template object.


0.9.10 Oct. 3 2016
------------------

  - Fixed a packaging issue (genshi requirement was unintentionally
    dropped in last release)
  - Added more tests
  - Added more support for types formatting

0.9.9 Apr. 13 2016
------------------

  - Template parser: fix multiple loops on the same list of objects
  - Template parser: fix multiple for loops on a variable that corresponds to a
    name (and not an attribute) in the data source.
  - Template parser: when parsing for loops, extract the iterator even when the
    assigned variables are not used anywhere in the body.
  - Template parser: now works with ODS templates.
  - Template parser: fix a bug when parsing an unknown ast expression.
  - Template parser: manage tuple, list and set literals.
  - Template parser: improve the parsing of loops where the iterator is a
    function.
  - Template parser: implement specific iteration behavior for enumerate.
    The second unpacked variable is linked to the function argument, as if
    the latter was used as the iterable object for the loop.
  - Image injection: fix an exception that was raided when the image is
    not present in the data dictionary, even when it shouldn't
    (template initialized with ignore_undefined_variables=True)
  - 100 % coverage, with many new unit tests and fixes on the old ones.

0.9.7.1 Feb. 19 2016
~~~~~~~~~~~~~~~~~~~~

  - This release fix a bug in the formatting function format_date where
    unicode date strings were not correctly managed.

0.9.7 Dec. 8 2015
~~~~~~~~~~~~~~~~~

  - This release focuses on the parser. If you
    don't use the template parser you can skip this release as it does not
    change anything else.
  - Fix a bug where the body of the if blocks were not evaluated
    by the parser
  - Refactoring tests for clearer reading
  - fix some missing/untested functions
  - remove NotImplementedError from coverage

0.9.6 Nov. 20 2015
~~~~~~~~~~~~~~~~~~

  - Fixed formatting function
  - Fixed if="" functionality that was not correctly parsed
  - Display empty string instead of "False" when browsing relational field
  - Code formatting in the ast parser

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`_
  - `Jérémie Gavrel`_
  - `Laurent Mignon`_
  - `Alexis de Lattre`_
  - `JosDeGraeve`_
  - `Antoine Nguyen`_
  - `Ari Caldeira`_
  - `John Asplin`_
  - `Zakaria Makrelouf`_
  - `Tom Gottfried`_

.. _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
.. _Jérémie Gavrel: https://bitbucket.org/gavrelj
.. _Laurent Mignon: https://bitbucket.org/lmi
.. _Alexis de Lattre: https://github.com/alexis-via
.. _JosDeGraeve: https://bitbucket.org/JosDeGraeve
.. _Antoine Nguyen: https://github.com/tonioo
.. _Ari Caldeira: https://bitbucket.org/ari_tauga
.. _John Asplin: https://bitbucket.org/asplinsolutions
.. _Zakaria Makrelouf https://bitbucket.org/z_makrelouf/
.. _Tom Gottfried https://bitbucket.org/tfried/

.. _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/
.. _babel: http://babel.pocoo.org



            

Raw data

            {
    "_id": null,
    "home_page": "http://bitbucket.org/faide/py3o.template",
    "name": "py3o.template",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "LibreOffice OpenOffice templating PDF",
    "author": "Florent Aide",
    "author_email": "florent.aide@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/96/f6/698c45e3cc74ce801126a1f91d628884867e3c9b20dcfca2402ea3c803a7/py3o.template-0.10.0.tar.gz",
    "platform": "",
    "description": "py3o.template\n*************\n\n.. image:: https://drone-ci.xcg.io/api/badges/faide/py3o.template/status.svg\n  :target: https://drone-ci.xcg.io/faide/py3o.template\n  :alt: Build Status\n\n.. image:: https://img.shields.io/badge/code%20style-black-000000.svg\n  :target: https://github.com/ambv/black\n  :alt: Code Style: Black\n\nIntroduction\n============\n\npy3o is an elegant and scalable solution to design reports using LibreOffice.\npy3o.template is the templating component that takes care of\nmerging your data sets with a corresponding templated OpenOffice document.\n\nIt is plateform independent and does not require LibreOffice/OpenOffice itself\nto generate an ODF file.\n\nSupported Python versions: 2.7, >= 3.5.\n\nThis work was originally inspired by `relatorio`_ and diverged in\nimplementation, scope and ambitions. Relatorio has many more features\nwhen py3o.template is mainly focused on ODT, ODS and text output.\n\nIf you want to generate a PDF or any other supported output format you will then\nneed to have a server with either LibreOffice or OpenOffice and to install\nthe `py3o.renderserver`_ on it. We also provide a docker image on\nthe `docker hub`_\n\nIf you want to have templating fusion & document conversion in one\nsingle web service usable from any language with just HTTP/POST you can install\n`py3o.fusion`_ server. Which also exists as a `docker image`_\n\nFull Documentation\n==================\n\nWe `provide a documentation`_ for this package. If anything is not correctly\nexplained, please! create a ticket `in our ticketing system`_\n\nDocs also contain a \"Hacking\" part for contributors (how tests are run, code\nstyle...).\n\nExample Usage\n=============\n\nBelow is an example that you can find in the source code inside the examples\ndirectory.\n\n::\n\n    from py3o.template import Template\n\n    t = Template(\"py3o_example_template.odt\", \"py3o_example_output.odt\")\n\n    t.set_image_path('staticimage.logo', 'images/new_logo.png')\n\n\n    class Item(object):\n        pass\n\n    items = list()\n\n    item1 = Item()\n    item1.val1 = 'Item1 Value1'\n    item1.val2 = 'Item1 Value2'\n    item1.val3 = 'Item1 Value3'\n    item1.Currency = 'EUR'\n    item1.Amount = '12345.35'\n    item1.InvoiceRef = '#1234'\n    items.append(item1)\n\n    for i in xrange(1000):\n        item = Item()\n        item.val1 = 'Item%s Value1' % i\n        item.val2 = 'Item%s Value2' % i\n        item.val3 = 'Item%s Value3' % i\n        item.Currency = 'EUR'\n        item.Amount = '6666.77'\n        item.InvoiceRef = 'Reference #%04d' % i\n        items.append(item)\n\n    document = Item()\n    document.total = '9999999999999.999'\n\n    data = dict(items=items, document=document)\n    t.render(data)\n\n\nChangelog\n=========\n\n\n0.10.0 2019-03-15\n-----------------\n\n  - Save embedded images into \"Pictures\" directory to work with lowriter>=6.0\n\n  - Rely on `babel`_ to format dates & numbers from now on.\n\n    -> ``format_date`` has been deprecated in favor of the new\n       ``format_datetime``. Format specifiers change as well; see the\n       \"templating\" doc. Example (more in docs)::\n\n        function=\"format_datetime('2015-08-02 17:05:06', format='full', locale='fr_FR')\"\n            -> dimanche 2 ao\u00fbt 2015 \u00e0 17:05:06 Temps universel coordonn\u00e9\n\n    -> ``format_amount`` & ``format_locale`` have been deprecated in favor of\n       the new ``format_currency``. Example (more in the \"templating\" doc)::\n\n        function=\"format_currency(123456789.4242, 'EUR', locale='fr_FR')\"\n            -> 123 456 789,42 \u20ac\n\n  - Re-enable Python 3 in our test suite now that a recent ``genshi`` has been\n    released.\n\n\n0.9.13 2018-07-03\n-----------------\n  - Added a new format_locale function to supersed the format_amount\n  - Keep aspect ratio of image if no width or height is given (thanks to\n    Tom Gottfried)\n  - fix generated VALUE formula, If the Genshi expressions generates a number\n    value (float or integer), the generated formula will be `=VALUE(\"1.1\")`\n    which is problematic if the user machine is configured to use a decimal\n    separator different than the `.`. With this fix the generated formula will\n    be `=VALUE(1.1)` (without the quotes) which is correctly handled with\n    by the `.ods` format. (thanks to Zakaria Makrelouf)\n  - Improve error message 'We handle urls in tables or text paragraph only'\n    (thanks to Alexis de Lattre)\n  - Add format_multiline for support of new lines (thanks to John Asplin)\n\n\n0.9.12 2018-04-11\n-----------------\n\n  - Better error reporting for cases when the link is not positionned\n    on its own line.\n  - Better error reporting for cases when an instruction link does not contain\n    the equal sign.\n  - Correct handling of images in odf 1.2 (thanks to Ari Caldeira)\n  - Now support text:span in functions (thanks to John Asplin)\n\n0.9.11 Dec. 16 2016\n-------------------\n\n  - Added support for escaping False values. Values evaluated as False are\n    replaced with an empty string during template rendering. This\n    functionality is disabled by default and can be enabled with a new\n    parameter on the Template object.\n\n\n0.9.10 Oct. 3 2016\n------------------\n\n  - Fixed a packaging issue (genshi requirement was unintentionally\n    dropped in last release)\n  - Added more tests\n  - Added more support for types formatting\n\n0.9.9 Apr. 13 2016\n------------------\n\n  - Template parser: fix multiple loops on the same list of objects\n  - Template parser: fix multiple for loops on a variable that corresponds to a\n    name (and not an attribute) in the data source.\n  - Template parser: when parsing for loops, extract the iterator even when the\n    assigned variables are not used anywhere in the body.\n  - Template parser: now works with ODS templates.\n  - Template parser: fix a bug when parsing an unknown ast expression.\n  - Template parser: manage tuple, list and set literals.\n  - Template parser: improve the parsing of loops where the iterator is a\n    function.\n  - Template parser: implement specific iteration behavior for enumerate.\n    The second unpacked variable is linked to the function argument, as if\n    the latter was used as the iterable object for the loop.\n  - Image injection: fix an exception that was raided when the image is\n    not present in the data dictionary, even when it shouldn't\n    (template initialized with ignore_undefined_variables=True)\n  - 100 % coverage, with many new unit tests and fixes on the old ones.\n\n0.9.7.1 Feb. 19 2016\n~~~~~~~~~~~~~~~~~~~~\n\n  - This release fix a bug in the formatting function format_date where\n    unicode date strings were not correctly managed.\n\n0.9.7 Dec. 8 2015\n~~~~~~~~~~~~~~~~~\n\n  - This release focuses on the parser. If you\n    don't use the template parser you can skip this release as it does not\n    change anything else.\n  - Fix a bug where the body of the if blocks were not evaluated\n    by the parser\n  - Refactoring tests for clearer reading\n  - fix some missing/untested functions\n  - remove NotImplementedError from coverage\n\n0.9.6 Nov. 20 2015\n~~~~~~~~~~~~~~~~~~\n\n  - Fixed formatting function\n  - Fixed if=\"\" functionality that was not correctly parsed\n  - Display empty string instead of \"False\" when browsing relational field\n  - Code formatting in the ast parser\n\n0.9.5 Oct. 30 2015\n~~~~~~~~~~~~~~~~~~\n\n  - 0.9.5 is just a rerelease of 0.9.4 with this README correctly\n    amended...\n\n  - Added support for formatting functions in the template in\n    order to control date number localization\n  - Added reference to original inspiration in the README\n  - Added example source code for ODS output.\n  - Fixed a memory usage in case of big output file size that\n    was introduced by the dynamic image feature.\n  - Introduced an experimental TextTemplate\n  - Fixed support for special cases where page breaks removals\n    removed trailing text (thanks to agix)\n\n0.9.3 Jun. 26 2015\n~~~~~~~~~~~~~~~~~~\n\n  - Introduced dynamic image support (ie: pass in image data in the input\n    iterator) and use it to insert images on the fly in the report)\n\n0.9.2 Jun. 26 2015\n~~~~~~~~~~~~~~~~~~\n\n  - WARNING: if you used the old image replacement system, you\n    need to update your code to set static image from this::\n\n      # old way\n      t.set_image_path('logo', 'images/new_logo.png')\n\n      # You should now set it like this instead\n\n      # new way. Note the 'staticimage.' prefix added just before 'logo'\n      t.set_image_path('staticimage.logo', 'images/new_logo.png')\n\n  - WARNING: after updating your code you must also update your template\n    to prefix your static images names with the 'staticimage.' prefix.\n\n  - Added dynamic images support. You can now add images instructions inside\n    for loops or anywhere in your templates and pass the image data\n    inside your objects attributes.\n  - Added support for image data (dynamic ones) being passed-in as base64\n    data. This is useful for some clients like `Odoo's report_py3o`_ because\n    they store image data as base64 encoded fields.\n\n.. _Odoo's report_py3o: https://bitbucket.org/xcg/report_py3o\n\n0.9.1 Jun. 3 2015\n~~~~~~~~~~~~~~~~~\n\n  - Fixed parser to read from the var name instead of its description,\n    if you dont use the helper tool to introspect your reports this release\n    is of no importance to you as it only fixes this particular point.\n\n0.9 Jan. 8 2015\n~~~~~~~~~~~~~~~~\n\n  - Added support for soft page breaks\n\n\n0.8 Nov. 19 2014\n~~~~~~~~~~~~~~~~\n\n  - Added better unit tests\n  - Fixed corner cases in the variable introspection mechanism\n  - Better handling of \"ignore_undefined\" that now also allows undefined images\n\n0.7 Oct. 15 2014\n~~~~~~~~~~~~~~~~\n\n  - Added Python3 support\n  - Fixed a problem with validity of output in case the template contains\n    a text:list inside a for loop\n  - Added new public methods to help report servers introspect the template\n    data dictionary\n  - Added real unit tests (96% coverage ATM, way to go test team!)\n\nContributors\n============\n\nBy order of contribution date:\n\n  - `Florent Aide`_\n  - `Emmanuel Cazenave`_\n  - `jon1012`_\n  - `Eugene Morozov`_\n  - `Houz\u00e9fa Abbasbay`_\n  - `Torsten Irl\u00e4nder`_\n  - `Sergey Fedoseev`_\n  - `Vincent Lhote-Hatakeyama`_\n  - `Anael Lorimier`_\n  - `Bj\u00f6rn Ricks`_\n  - `Agix`_\n  - `J\u00e9r\u00e9mie Gavrel`_\n  - `Laurent Mignon`_\n  - `Alexis de Lattre`_\n  - `JosDeGraeve`_\n  - `Antoine Nguyen`_\n  - `Ari Caldeira`_\n  - `John Asplin`_\n  - `Zakaria Makrelouf`_\n  - `Tom Gottfried`_\n\n.. _Florent Aide: https://bitbucket.org/faide\n.. _Emmanuel Cazenave: https://bitbucket.org/cazino\n.. _jon1012: https://bitbucket.org/jon1012\n.. _Eugene Morozov: https://bitbucket.org/mojo\n.. _Houz\u00e9fa Abbasbay: https://bitbucket.org/houzefa-abba\n.. _Torsten Irl\u00e4nder: https://bitbucket.org/ti\n.. _Sergey Fedoseev: https://bitbucket.org/sir_sigurd\n.. _Vincent Lhote-Hatakeyama: https://bitbucket.org/vincent_lhote\n.. _Anael Lorimier: https://bitbucket.org/alorimier\n.. _Bj\u00f6rn Ricks: https://bitbucket.org/bjoernricks\n.. _Agix: https://bitbucket.org/agix\n.. _J\u00e9r\u00e9mie Gavrel: https://bitbucket.org/gavrelj\n.. _Laurent Mignon: https://bitbucket.org/lmi\n.. _Alexis de Lattre: https://github.com/alexis-via\n.. _JosDeGraeve: https://bitbucket.org/JosDeGraeve\n.. _Antoine Nguyen: https://github.com/tonioo\n.. _Ari Caldeira: https://bitbucket.org/ari_tauga\n.. _John Asplin: https://bitbucket.org/asplinsolutions\n.. _Zakaria Makrelouf https://bitbucket.org/z_makrelouf/\n.. _Tom Gottfried https://bitbucket.org/tfried/\n\n.. _py3o.renderserver: https://bitbucket.org/faide/py3o.renderserver/\n.. _provide a documentation: http://py3otemplate.readthedocs.org\n.. _in our ticketing system: https://bitbucket.org/faide/py3o.template/issues?status=new&status=open\n.. _docker hub: https://registry.hub.docker.com/u/xcgd/py3oserver-docker/\n.. _py3o.fusion: https://bitbucket.org/faide/py3o.fusion\n.. _docker image: https://registry.hub.docker.com/u/xcgd/py3o.fusion\n.. _relatorio: http://relatorio.tryton.org/\n.. _babel: http://babel.pocoo.org\n\n\n",
    "bugtrack_url": null,
    "license": "MIT License",
    "summary": "An easy solution to design reports using LibreOffice",
    "version": "0.10.0",
    "split_keywords": [
        "libreoffice",
        "openoffice",
        "templating",
        "pdf"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "md5": "4704e22d4099e807b571539848541f4d",
                "sha256": "b83c43d1ff89ec9688e0c9c5297b0afdb0ecb123c6b2311e4d173aa36920b4e2"
            },
            "downloads": -1,
            "filename": "py3o.template-0.10.0-py3-none-any.whl",
            "has_sig": true,
            "md5_digest": "4704e22d4099e807b571539848541f4d",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 614060,
            "upload_time": "2019-03-15T10:09:03",
            "upload_time_iso_8601": "2019-03-15T10:09:03.820779Z",
            "url": "https://files.pythonhosted.org/packages/8f/32/1d0d43342b5e5d2347a41d15783859fbaeb1a4e13a51928a5d8cf9e4bf40/py3o.template-0.10.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "md5": "94594a7e84600592a1b544dfc8c64534",
                "sha256": "ea544e76ad519172fc49a621e999a1438fc8aa8869762db913fbc336518606d3"
            },
            "downloads": -1,
            "filename": "py3o.template-0.10.0.tar.gz",
            "has_sig": true,
            "md5_digest": "94594a7e84600592a1b544dfc8c64534",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 1046170,
            "upload_time": "2019-03-15T10:09:06",
            "upload_time_iso_8601": "2019-03-15T10:09:06.844099Z",
            "url": "https://files.pythonhosted.org/packages/96/f6/698c45e3cc74ce801126a1f91d628884867e3c9b20dcfca2402ea3c803a7/py3o.template-0.10.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2019-03-15 10:09:06",
    "github": false,
    "gitlab": false,
    "bitbucket": true,
    "bitbucket_user": "faide",
    "bitbucket_project": "py3o.template",
    "lcname": "py3o.template"
}
        
Elapsed time: 0.03576s