Source code for webodt.shortcuts

# -*- coding: utf8 -*-
import os
import mimetypes

from django.http import HttpResponse
from django.template import Context
from webodt.cache import CacheManager
from webodt.converters import converter

import webodt

[docs]def render_to(format, template_name, dictionary=None, context_instance=None, delete_on_close=True, cache=CacheManager): """ Convert the template given by `template_name` and `dictionary` to a document in given `format`. The document (file-like object) will be returned. `format` is the filename extension. It's possible to use "odt", "pdf", "doc", "html" or "rtf" and probably more. `context_instance` is the optional parameter which should contain instance of the subclass of `django.template.Context`. `delete_on_close` defines whether the returned document should be deleted automatically when closed. If the `template_name` ends with `.html`, template is considered as HTML template, otherwise as ODF based template. """ template = _Template(template_name) dictionary = dictionary or {} if context_instance: context_instance.update(dictionary) else: context_instance = Context(dictionary) document = template.render(context_instance, delete_on_close=delete_on_close) if format == 'odt': return document formatted_document = None if cache: cache_mgr = cache() formatted_document = cache_mgr.get(document, format) if not formatted_document: formatted_document = converter().convert(document, format, delete_on_close=delete_on_close) cache_mgr.set(document, format, formatted_document) document.close() return formatted_document
[docs]def render_to_response(template_name, dictionary=None, context_instance=None, filename=None, format='odt', cache=CacheManager): """ Using same options as `render_to`, return `django.http.HttpResponse` object. The document is automatically removed when the last byte of the response is read. """ mimetype = _get_mimetype(format) content_fd = render_to(format, template_name, dictionary, context_instance, delete_on_close=True, cache=cache) response = HttpResponse(_ifile(content_fd), mimetype=mimetype) if not filename: filename = os.path.basename(template_name) filename += '.%s' % format response['Content-Disposition'] = 'attachment; filename="%s"' % filename return response
def _Template(template_name): if template_name.endswith('.html'): return webodt.HTMLTemplate(template_name) return webodt.ODFTemplate(template_name) def _ifile(fd, chunk_size=1024, close_on_exit=True): while True: data = fd.read(chunk_size) if not data: if close_on_exit: fd.close() break else: yield data def _get_mimetype(format): ext = '.%s' % format map = mimetypes.types_map.copy() map['.odt'] = 'application/vnd.oasis.opendocument.text' map['.rtf'] = 'text/richtext' mimetype = map[ext] return mimetype