Source code for jmb.core.utils.appypod_utils

# -*- coding: utf-8 -*-
"""
.. _appypod:

OpenOffice Utils via ``appy.pod``
=================================

.. note:: Nuovo

   Questo modulo rimpiazza :ref:`ooutils`

Il modulo utilizza la librearia appy-pod, da ricordarsi che:

* /tmp/ scrivibile (openoffice stersso utente microuwsgi)
* ciao

.. _appy-pod: http://www.google.com

Esempio d'uso::

    from django.http import HttpResponse

    from jmb.core.utils.appypod_utils import JmbAppyPodTemplate

    def example_view_pdf(request):
        context = dict(first_name="<name>", last_name="<last_name>")
        template_file = "<path_to_template_file>"
        appy_pod_template = JmbAppyPodTemplate(template_file, context)
        rendered_template = template.render()
        return HttpResponse(rendered_template, mimetype="application/pdf")

    def example_view_odt(request):
        context = dict(first_name="<name>", last_name="<last_name>")
        template_file = "<path_to_template_file>"
        appy_pod_template = JmbAppyPodTemplate(template_file, context)
        rendered_template = template.render(file_type="odt")
        return HttpResponse(rendered_template, mimetype="application/vnd.oasis.opendocument.text")

.. autoclass:: JmbAppyPodTemplate
    :members:

"""
import os
from tempfile import NamedTemporaryFile

from appy.pod.renderer import Renderer


[docs]class JmbAppyPodTemplate(): """ Classe semplice che serve per ottenere un file di estensione desiderata (pdf di default). .. """ def __init__(self, template, context): """ Object init function. :param template: absolute path to template file to render (must be a string) :param context: context to be used on template rendering """ self.template = template self.context = context
[docs] def update_template(self, template): """ Function for change instance template attribute. :param template: absolute path to template file to render (must be a string) """ self.template = template
[docs] def update_context(self, context): """ Function for change instance context attribute. :param template: absolute path to template file to render (must be a string) """ self.context = context
[docs] def render(self, file_type="pdf"): """ Instance render function. :param file_type: output file extension :return: generated file stream if created, else None """ context_dict = {} for k, v in self.context.iteritems(): context_dict[k] = v result = None output = None try: with NamedTemporaryFile('rwb', suffix='.%s' % file_type, delete=False) as f: output = f.name renderer = Renderer(self.template, context_dict, output, ooPort=8100, overwriteExisting=True) renderer.run() result = open(output, 'rb').read() except Exception, e: print e finally: if output and os.path.exists(output): os.unlink(output) return result