diff options
author | Charlie Denton <charleswdenton@gmail.com> | 2012-05-21 13:55:43 -0700 |
---|---|---|
committer | Charlie Denton <charleswdenton@gmail.com> | 2012-05-21 13:55:43 -0700 |
commit | a76af4820ce71e1b0fd0052f0cf39690a34b680c (patch) | |
tree | 32510453a5122cff28c43a7f5d9982dfeec70f47 | |
parent | 4867d6bd6484c6bc1a263e49c3b08f3cfa30ff1d (diff) | |
parent | 9fe90235c8fc41b2450fc585bbe57cfe92f69f7b (diff) | |
download | django-wkhtmltopdf-a76af4820ce71e1b0fd0052f0cf39690a34b680c.tar.gz django-wkhtmltopdf-a76af4820ce71e1b0fd0052f0cf39690a34b680c.tar.bz2 django-wkhtmltopdf-a76af4820ce71e1b0fd0052f0cf39690a34b680c.zip |
Merge pull request #6 from incuna/develop
Fix tmp_files & tidy up response object
-rw-r--r-- | CHANGELOG.md | 23 | ||||
-rw-r--r-- | Makefile | 5 | ||||
-rw-r--r-- | README.rst | 2 | ||||
-rw-r--r-- | setup.py | 23 | ||||
-rw-r--r-- | wkhtmltopdf/__init__.py | 6 | ||||
-rw-r--r-- | wkhtmltopdf/views.py | 27 |
6 files changed, 60 insertions, 26 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 560916b..5c94cb9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,29 @@ Changelog for django-wkhtmltopdf ================================ +0.3 +--- + +* Fix a bug where temporary files were removed before the PDF was generated + when using the header & footer options. +* Only set the `Content-Disposition` header in the response if `filename` is set. +* Added a Makefile for deployments. +* Added 2.6 requirement to the README. + + +0.2.2 +----- + +* Create a request context if one hasn't been passed into the view. + + +0.2.1 +----- + +* Use `get_template_names()` for extra extensibility. +* Be clear with `template_to_temp_file`'s arguments. + + 0.2 --- diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..c5f9321 --- /dev/null +++ b/Makefile @@ -0,0 +1,5 @@ +SHELL := /bin/bash + +release: + python setup.py register sdist upload + @@ -16,6 +16,8 @@ This requires libfontconfig (on Ububtu: ``sudo aptitude install libfontconfig``) .. _wkhtmltopdf: http://code.google.com/p/wkhtmltopdf/downloads/list +Python 2.6 + Installation ------------ @@ -1,22 +1,17 @@ -from os.path import dirname, join from setuptools import setup, find_packages -from wkhtmltopdf import get_version +import wkhtmltopdf -def fread(fn): - with open(join(dirname(__file__), fn), 'r') as f: - return f.read() - setup( - name = "django-wkhtmltopdf", - packages = find_packages(), + name='django-wkhtmltopdf', + packages=find_packages(), include_package_data=True, - version = get_version(), - description = "Converts html to PDF using http://code.google.com/p/wkhtmltopdf/.", - long_description = fread('README.rst'), - author = "Incuna Ltd", - author_email = "admin@incuna.com", - url = "http://incuna.com/", + version=wkhtmltopdf.__version__, + description='Converts html to PDF using http://code.google.com/p/wkhtmltopdf/.', + long_description=open('README.rst').read(), + author=wkhtmltopdf.__author__, + author_email='admin@incuna.com', + url='http://incuna.com/', ) diff --git a/wkhtmltopdf/__init__.py b/wkhtmltopdf/__init__.py index 6738053..39b1413 100644 --- a/wkhtmltopdf/__init__.py +++ b/wkhtmltopdf/__init__.py @@ -2,6 +2,6 @@ import os if 'DJANGO_SETTINGS_MODULE' in os.environ: from .utils import * -__version__ = (0, 2, 2) -def get_version(): - return '.'.join(map(str, __version__)) +__author__ = 'Incuna Ltd' +__version__ = '0.3' + diff --git a/wkhtmltopdf/views.py b/wkhtmltopdf/views.py index b15d7be..164f94f 100644 --- a/wkhtmltopdf/views.py +++ b/wkhtmltopdf/views.py @@ -1,4 +1,4 @@ -from os import remove +import os from re import compile from django.conf import settings @@ -11,9 +11,12 @@ from wkhtmltopdf.utils import template_to_temp_file, wkhtmltopdf class PDFResponse(HttpResponse): - def __init__(self, content, filename): - super(PDFResponse, self).__init__(content, 'application/pdf') - self.__setitem__('Content-Disposition', 'attachment; filename=%s' % filename) + def __init__(self, content, *args, **kwargs): + filename = kwargs.pop('filename', None) + super(PDFResponse, self).__init__(content, 'application/pdf', *args, **kwargs) + if filename: + header_content = 'attachment; filename={0}'.format(filename) + self.__setitem__('Content-Disposition', header_content) class PdfResponse(PDFResponse): @@ -33,6 +36,11 @@ class PDFTemplateView(TemplateView): margin_right = 0 margin_top = 0 response = PDFResponse + _tmp_files = None + + def __init__(self, *args, **kwargs): + self._tmp_files = [] + super(PDFTemplateView, self).__init__(*args, **kwargs) def get(self, request, context_instance=None, *args, **kwargs): if request.GET.get('as', '') == 'html': @@ -45,7 +53,10 @@ class PDFTemplateView(TemplateView): page_path = template_to_temp_file(self.get_template_names(), self.get_context_data(), self.context_instance) pdf_kwargs = self.get_pdf_kwargs() - return self.response(wkhtmltopdf(page_path, **pdf_kwargs), self.get_filename()) + output = wkhtmltopdf(page_path, **pdf_kwargs) + if self._tmp_files: + map(os.remove, self._tmp_files) + return self.response(output, filename=self.get_filename()) def get_filename(self): return self.filename @@ -58,14 +69,12 @@ class PDFTemplateView(TemplateView): 'margin_top': self.margin_top, 'orientation': self.orientation, } - tmp_files = [] if self.header_template: kwargs['header_html'] = template_to_temp_file(self.header_template, self.get_context_data(), self.context_instance) - tmp_files.append(kwargs['header_html']) + self._tmp_files.append(kwargs['header_html']) if self.footer_template: kwargs['footer_html'] = template_to_temp_file(self.footer_template, self.get_context_data(), self.context_instance) - tmp_files.append(kwargs['footer_html']) - map(remove, tmp_files) + self._tmp_files.append(kwargs['footer_html']) return kwargs def get_context_data(self, **kwargs): |