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