annotate odfcast/convert.py @ 94:2ef34abbad8d 1.5

Use http error code 422 in CheckView when a merge is not possible. Previously the response used the code 500 in this case. This is not useful because it's not an internal server error when the check whether a PDF file can be merged fails because that's the point of the CheckView. The code used now means "Unprocessable Entity" and fits better. Part of mpuls/issue6009
author Bernhard Herzog <bh@intevation.de>
date Fri, 28 Apr 2017 20:56:22 +0200
parents 48dabf4bf680
children b2f96072b8d7
rev   line source
0
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
2
29
1dadc59c4b9a Make the conversion more error prone
Björn Ricks <bjoern.ricks@intevation.de>
parents: 22
diff changeset
3 import logging
0
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
4 import tempfile
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
5
16
f4920ab1d27c Add basic html interface for convert
Björn Ricks <bjoern.ricks@intevation.de>
parents: 4
diff changeset
6 from flask import request, Response, json, render_template
0
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
7 from flask.views import MethodView
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
8
4
46f31348fe01 Implement a TemplateConvertView to allow convert odt templates with variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3
diff changeset
9 from py3o.template import Template
46f31348fe01 Implement a TemplateConvertView to allow convert odt templates with variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3
diff changeset
10
19
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
11 from PyPDF2 import PdfFileMerger
61
d8fc52aceb9c Handle errors during merge of pdf documents
Björn Ricks <bjoern.ricks@intevation.de>
parents: 60
diff changeset
12 from PyPDF2.utils import PyPdfError
19
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
13
47
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
14 from werkzeug.utils import escape
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
15
29
1dadc59c4b9a Make the conversion more error prone
Björn Ricks <bjoern.ricks@intevation.de>
parents: 22
diff changeset
16 log = logging.getLogger(__name__)
19
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
17
0
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
18 ALLOWED_FORMATS = ["pdf", "doc", "docx", "odt"]
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
19
19
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
20 PDF_MIMETYPE = "application/pdf"
47
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
21 JSON_MIMETYPE = "application/json"
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
22 HTML_MIMETYPE = "text/html"
19
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
23
0
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
24 MIMETYPES = {
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
25 "odt": "application/vnd.oasis.opendocument.text",
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
26 "doc": "application/msword",
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
27 "docx": "application/vnd.openxmlformats-officedocument"
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
28 ".wordprocessingml.document",
19
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
29 "pdf": PDF_MIMETYPE,
0
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
30 }
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
31
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
32 DEFAULT_MIMETYPE = "application/octet-stream"
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
33
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
34
47
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
35 class ErrorResponse(Response):
42
6d511e93a331 Return requested format when an error has occured
Björn Ricks <bjoern.ricks@intevation.de>
parents: 41
diff changeset
36
47
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
37 BAD_REQUEST_ERROR_CODE = 400
42
6d511e93a331 Return requested format when an error has occured
Björn Ricks <bjoern.ricks@intevation.de>
parents: 41
diff changeset
38
47
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
39 def __init__(self, title, error_code, details,
92
2200ae1e7bdb Rename html_error_code to http_error_code
Bernhard Herzog <bh@intevation.de>
parents: 91
diff changeset
40 http_error_code=BAD_REQUEST_ERROR_CODE):
47
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
41 data, mime_type = self.get_response_data(title, error_code, details)
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
42 super(ErrorResponse, self).__init__(response=data, mimetype=mime_type,
92
2200ae1e7bdb Rename html_error_code to http_error_code
Bernhard Herzog <bh@intevation.de>
parents: 91
diff changeset
43 status=http_error_code)
47
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
44
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
45 def json(self, title, error_code, details):
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
46 return json.dumps({
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
47 "error": title,
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
48 "error_code": error_code,
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
49 "details": details,
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
50 }), JSON_MIMETYPE
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
51
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
52 def html(self, title, error_code, details):
59
2dacbe7fb7f9 Fix returning html formatted error response
Björn Ricks <bjoern.ricks@intevation.de>
parents: 58
diff changeset
53 data = (
47
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
54 u'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">\n'
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
55 u'<title>%(code)s %(name)s</title>\n'
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
56 u'<h1>%(name)s</h1>\n'
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
57 u'%(details)s\n'
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
58 ) % {
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
59 "code": error_code,
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
60 "name": escape(title),
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
61 "details": escape(details),
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
62 }
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
63 return data, HTML_MIMETYPE
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
64
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
65 def get_response_data(self, title, error_code, details):
42
6d511e93a331 Return requested format when an error has occured
Björn Ricks <bjoern.ricks@intevation.de>
parents: 41
diff changeset
66 if self.is_wants_json():
47
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
67 return self.json(title, error_code, details)
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
68 return self.html(title, error_code, details)
42
6d511e93a331 Return requested format when an error has occured
Björn Ricks <bjoern.ricks@intevation.de>
parents: 41
diff changeset
69
6d511e93a331 Return requested format when an error has occured
Björn Ricks <bjoern.ricks@intevation.de>
parents: 41
diff changeset
70 def is_wants_json(self):
47
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
71 best = request.accept_mimetypes.best_match([JSON_MIMETYPE,
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
72 HTML_MIMETYPE])
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
73 return best == JSON_MIMETYPE and \
42
6d511e93a331 Return requested format when an error has occured
Björn Ricks <bjoern.ricks@intevation.de>
parents: 41
diff changeset
74 request.accept_mimetypes[best] > \
47
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
75 request.accept_mimetypes[HTML_MIMETYPE]
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
76
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
77
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
78 class TemplateErrorResponse(ErrorResponse):
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
79
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
80 TEMPLATE_ERROR_CODE = 100
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
81
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
82 def __init__(self, details, error_code=TEMPLATE_ERROR_CODE):
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
83 super(TemplateErrorResponse, self).__init__(
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
84 title="TemplateError", error_code=error_code, details=details,
92
2200ae1e7bdb Rename html_error_code to http_error_code
Bernhard Herzog <bh@intevation.de>
parents: 91
diff changeset
85 http_error_code=500)
47
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
86
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
87
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
88 class ConversionErrorResponse(ErrorResponse):
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
89
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
90 CONVERSION_ERROR_CODE = 200
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
91
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
92 def __init__(self, details, error_code=CONVERSION_ERROR_CODE):
54
64f3e3a28bd4 Fix calling super in ConversionErrorResponse class
Björn Ricks <bjoern.ricks@intevation.de>
parents: 47
diff changeset
93 super(ConversionErrorResponse, self).__init__(
47
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
94 title="ConversionError", error_code=error_code, details=details,
92
2200ae1e7bdb Rename html_error_code to http_error_code
Bernhard Herzog <bh@intevation.de>
parents: 91
diff changeset
95 http_error_code=500)
42
6d511e93a331 Return requested format when an error has occured
Björn Ricks <bjoern.ricks@intevation.de>
parents: 41
diff changeset
96
6d511e93a331 Return requested format when an error has occured
Björn Ricks <bjoern.ricks@intevation.de>
parents: 41
diff changeset
97
60
ae377f7eed18 Add ErrorResponse class for resposes after an error has occured during the merge
Björn Ricks <bjoern.ricks@intevation.de>
parents: 59
diff changeset
98 class MergeErrorResponse(ErrorResponse):
ae377f7eed18 Add ErrorResponse class for resposes after an error has occured during the merge
Björn Ricks <bjoern.ricks@intevation.de>
parents: 59
diff changeset
99
ae377f7eed18 Add ErrorResponse class for resposes after an error has occured during the merge
Björn Ricks <bjoern.ricks@intevation.de>
parents: 59
diff changeset
100 MERGE_ERROR_CODE = 300
ae377f7eed18 Add ErrorResponse class for resposes after an error has occured during the merge
Björn Ricks <bjoern.ricks@intevation.de>
parents: 59
diff changeset
101
93
48dabf4bf680 Make http_error_code a parameter of the MergeErrorResponse constructor.
Bernhard Herzog <bh@intevation.de>
parents: 92
diff changeset
102 def __init__(self, details, error_code=MERGE_ERROR_CODE,
48dabf4bf680 Make http_error_code a parameter of the MergeErrorResponse constructor.
Bernhard Herzog <bh@intevation.de>
parents: 92
diff changeset
103 http_error_code=500):
60
ae377f7eed18 Add ErrorResponse class for resposes after an error has occured during the merge
Björn Ricks <bjoern.ricks@intevation.de>
parents: 59
diff changeset
104 super(MergeErrorResponse, self).__init__(
ae377f7eed18 Add ErrorResponse class for resposes after an error has occured during the merge
Björn Ricks <bjoern.ricks@intevation.de>
parents: 59
diff changeset
105 title="MergeError", error_code=error_code, details=details,
93
48dabf4bf680 Make http_error_code a parameter of the MergeErrorResponse constructor.
Bernhard Herzog <bh@intevation.de>
parents: 92
diff changeset
106 http_error_code=http_error_code)
60
ae377f7eed18 Add ErrorResponse class for resposes after an error has occured during the merge
Björn Ricks <bjoern.ricks@intevation.de>
parents: 59
diff changeset
107
ae377f7eed18 Add ErrorResponse class for resposes after an error has occured during the merge
Björn Ricks <bjoern.ricks@intevation.de>
parents: 59
diff changeset
108
0
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
109 class ConvertView(MethodView):
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
110
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
111 def __init__(self, pyuno_driver_name="", hostname="localhost", port=2001):
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
112 driver_module = self._load_driver_module(pyuno_driver_name)
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
113 self.convertor = driver_module.Convertor(hostname, port)
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
114
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
115 def _load_driver_module(self, pyuno_driver_name):
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
116 return __import__(pyuno_driver_name, globals(), locals(),
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
117 ["Convertor"])
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
118
3
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
119 def is_format_supported(self, fformat):
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
120 return fformat and fformat.lower() in ALLOWED_FORMATS
0
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
121
3
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
122 def post(self):
84
3492c79d83c8 Log convert activity.
Frank Koormann <frank.koormann@intevation.de>
parents: 73
diff changeset
123 log.debug("Converting document")
3
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
124 ffile = request.files['file']
29
1dadc59c4b9a Make the conversion more error prone
Björn Ricks <bjoern.ricks@intevation.de>
parents: 22
diff changeset
125 if not ffile.filename:
47
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
126 return ErrorResponse(
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
127 "Upload file missing", error_code=101,
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
128 details="Please upload a file for conversion",
92
2200ae1e7bdb Rename html_error_code to http_error_code
Bernhard Herzog <bh@intevation.de>
parents: 91
diff changeset
129 http_error_code=400)
29
1dadc59c4b9a Make the conversion more error prone
Björn Ricks <bjoern.ricks@intevation.de>
parents: 22
diff changeset
130
3
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
131 fformat = request.form['format']
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
132 if not self.is_format_supported(fformat):
47
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
133 return ErrorResponse(
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
134 "Invalid format", error_code=102,
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
135 details="Format %s not allowed" % fformat,
92
2200ae1e7bdb Rename html_error_code to http_error_code
Bernhard Herzog <bh@intevation.de>
parents: 91
diff changeset
136 http_error_code=400)
3
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
137
30
9d65de2ebe22 Merge TemplateConvertView into ConvertView
Björn Ricks <bjoern.ricks@intevation.de>
parents: 29
diff changeset
138 datadict = self.get_datadict()
9d65de2ebe22 Merge TemplateConvertView into ConvertView
Björn Ricks <bjoern.ricks@intevation.de>
parents: 29
diff changeset
139
84
3492c79d83c8 Log convert activity.
Frank Koormann <frank.koormann@intevation.de>
parents: 73
diff changeset
140 if datadict:
3492c79d83c8 Log convert activity.
Frank Koormann <frank.koormann@intevation.de>
parents: 73
diff changeset
141 log.debug(" with datadict")
3492c79d83c8 Log convert activity.
Frank Koormann <frank.koormann@intevation.de>
parents: 73
diff changeset
142
29
1dadc59c4b9a Make the conversion more error prone
Björn Ricks <bjoern.ricks@intevation.de>
parents: 22
diff changeset
143 mimetype = self.get_mimetype_for_format(fformat)
1dadc59c4b9a Make the conversion more error prone
Björn Ricks <bjoern.ricks@intevation.de>
parents: 22
diff changeset
144
84
3492c79d83c8 Log convert activity.
Frank Koormann <frank.koormann@intevation.de>
parents: 73
diff changeset
145 log.debug(" to %s" % fformat)
3492c79d83c8 Log convert activity.
Frank Koormann <frank.koormann@intevation.de>
parents: 73
diff changeset
146
30
9d65de2ebe22 Merge TemplateConvertView into ConvertView
Björn Ricks <bjoern.ricks@intevation.de>
parents: 29
diff changeset
147 outfile = self.save_form_file(ffile)
9d65de2ebe22 Merge TemplateConvertView into ConvertView
Björn Ricks <bjoern.ricks@intevation.de>
parents: 29
diff changeset
148
9d65de2ebe22 Merge TemplateConvertView into ConvertView
Björn Ricks <bjoern.ricks@intevation.de>
parents: 29
diff changeset
149 if datadict:
31
83bca7dc9bfe Return error response when a template couldn't be rendered
Björn Ricks <bjoern.ricks@intevation.de>
parents: 30
diff changeset
150 try:
83bca7dc9bfe Return error response when a template couldn't be rendered
Björn Ricks <bjoern.ricks@intevation.de>
parents: 30
diff changeset
151 tfile = tempfile.NamedTemporaryFile()
42
6d511e93a331 Return requested format when an error has occured
Björn Ricks <bjoern.ricks@intevation.de>
parents: 41
diff changeset
152 t = Template(outfile, tfile, ignore_undefined_variables=True)
31
83bca7dc9bfe Return error response when a template couldn't be rendered
Björn Ricks <bjoern.ricks@intevation.de>
parents: 30
diff changeset
153 t.render(datadict)
83bca7dc9bfe Return error response when a template couldn't be rendered
Björn Ricks <bjoern.ricks@intevation.de>
parents: 30
diff changeset
154 outfile.close()
83bca7dc9bfe Return error response when a template couldn't be rendered
Björn Ricks <bjoern.ricks@intevation.de>
parents: 30
diff changeset
155 outfile = tfile
42
6d511e93a331 Return requested format when an error has occured
Björn Ricks <bjoern.ricks@intevation.de>
parents: 41
diff changeset
156 except Exception, e:
41
a1100ec32be2 Log exception on rendering errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 34
diff changeset
157 log.exception("Template error")
47
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
158 return TemplateErrorResponse(details=str(e))
30
9d65de2ebe22 Merge TemplateConvertView into ConvertView
Björn Ricks <bjoern.ricks@intevation.de>
parents: 29
diff changeset
159
32
e6f2f1481de2 Fix we must check the fformat variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 31
diff changeset
160 if fformat != "odt":
30
9d65de2ebe22 Merge TemplateConvertView into ConvertView
Björn Ricks <bjoern.ricks@intevation.de>
parents: 29
diff changeset
161 try:
9d65de2ebe22 Merge TemplateConvertView into ConvertView
Björn Ricks <bjoern.ricks@intevation.de>
parents: 29
diff changeset
162 outfile = self.convert(outfile, fformat)
42
6d511e93a331 Return requested format when an error has occured
Björn Ricks <bjoern.ricks@intevation.de>
parents: 41
diff changeset
163 except Exception, e:
30
9d65de2ebe22 Merge TemplateConvertView into ConvertView
Björn Ricks <bjoern.ricks@intevation.de>
parents: 29
diff changeset
164 log.exception("Conversion error")
47
e99cbb47eafb Improve error handling by returning flask/werkzeug responses directly on errors
Björn Ricks <bjoern.ricks@intevation.de>
parents: 42
diff changeset
165 return ConversionErrorResponse(details=str(e))
29
1dadc59c4b9a Make the conversion more error prone
Björn Ricks <bjoern.ricks@intevation.de>
parents: 22
diff changeset
166
84
3492c79d83c8 Log convert activity.
Frank Koormann <frank.koormann@intevation.de>
parents: 73
diff changeset
167 log.debug("Document converted")
0
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
168 return Response(outfile, mimetype=mimetype)
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
169
16
f4920ab1d27c Add basic html interface for convert
Björn Ricks <bjoern.ricks@intevation.de>
parents: 4
diff changeset
170 def get(self):
f4920ab1d27c Add basic html interface for convert
Björn Ricks <bjoern.ricks@intevation.de>
parents: 4
diff changeset
171 return render_template("convert.html")
f4920ab1d27c Add basic html interface for convert
Björn Ricks <bjoern.ricks@intevation.de>
parents: 4
diff changeset
172
3
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
173 def save_form_file(self, infile):
33
00e12392f8d4 Fix saving uploaded form file to a temporary file
Björn Ricks <bjoern.ricks@intevation.de>
parents: 32
diff changeset
174 outfile = tempfile.NamedTemporaryFile()
30
9d65de2ebe22 Merge TemplateConvertView into ConvertView
Björn Ricks <bjoern.ricks@intevation.de>
parents: 29
diff changeset
175 infile.save(outfile)
9d65de2ebe22 Merge TemplateConvertView into ConvertView
Björn Ricks <bjoern.ricks@intevation.de>
parents: 29
diff changeset
176 infile.close()
33
00e12392f8d4 Fix saving uploaded form file to a temporary file
Björn Ricks <bjoern.ricks@intevation.de>
parents: 32
diff changeset
177 outfile.seek(0)
3
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
178 return outfile
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
179
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
180 def convert(self, infile, fformat):
0
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
181 outfile = tempfile.NamedTemporaryFile()
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
182
3
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
183 self.convertor.convert(infile.name, outfile.name, fformat)
0
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
184
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
185 infile.close()
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
186 return outfile
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
187
3
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
188 def get_mimetype_for_format(self, fformat):
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
189 return MIMETYPES.get(fformat, DEFAULT_MIMETYPE)
4
46f31348fe01 Implement a TemplateConvertView to allow convert odt templates with variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3
diff changeset
190
46f31348fe01 Implement a TemplateConvertView to allow convert odt templates with variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3
diff changeset
191 def get_datadict(self):
34
89ffa12bd48d Allow to not passing any datadict to the conversion form
Björn Ricks <bjoern.ricks@intevation.de>
parents: 33
diff changeset
192 vars = request.form.get('datadict')
30
9d65de2ebe22 Merge TemplateConvertView into ConvertView
Björn Ricks <bjoern.ricks@intevation.de>
parents: 29
diff changeset
193 if not vars:
9d65de2ebe22 Merge TemplateConvertView into ConvertView
Björn Ricks <bjoern.ricks@intevation.de>
parents: 29
diff changeset
194 return None
4
46f31348fe01 Implement a TemplateConvertView to allow convert odt templates with variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3
diff changeset
195 return json.loads(vars)
18
585904e7411a Add html for converting a odf with a template
Björn Ricks <bjoern.ricks@intevation.de>
parents: 16
diff changeset
196
19
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
197
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
198 class MergeView(MethodView):
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
199
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
200 def get(self):
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
201 return render_template("merge.html")
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
202
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
203 def post(self):
57
423f99732a80 Add some debug output for merging pdfs
Björn Ricks <bjoern.ricks@intevation.de>
parents: 54
diff changeset
204 log.debug("Merging PDF documents")
423f99732a80 Add some debug output for merging pdfs
Björn Ricks <bjoern.ricks@intevation.de>
parents: 54
diff changeset
205
87
4f45ebecb057 issue5210: non-strict operation to try to repair xref table etc
Frank Koormann <frank.koormann@intevation.de>
parents: 85
diff changeset
206 merger = PdfFileMerger(strict=False)
67
5d1e486140ae Support merging of pdf documents with different names in the uploaded data
Björn Ricks <bjoern.ricks@intevation.de>
parents: 62
diff changeset
207
5d1e486140ae Support merging of pdf documents with different names in the uploaded data
Björn Ricks <bjoern.ricks@intevation.de>
parents: 62
diff changeset
208 ffiles = []
5d1e486140ae Support merging of pdf documents with different names in the uploaded data
Björn Ricks <bjoern.ricks@intevation.de>
parents: 62
diff changeset
209
5d1e486140ae Support merging of pdf documents with different names in the uploaded data
Björn Ricks <bjoern.ricks@intevation.de>
parents: 62
diff changeset
210 # allow files to have arbitray form names
5d1e486140ae Support merging of pdf documents with different names in the uploaded data
Björn Ricks <bjoern.ricks@intevation.de>
parents: 62
diff changeset
211 # order files by their form names
5d1e486140ae Support merging of pdf documents with different names in the uploaded data
Björn Ricks <bjoern.ricks@intevation.de>
parents: 62
diff changeset
212 for key, value in sorted(request.files.iterlists(),
5d1e486140ae Support merging of pdf documents with different names in the uploaded data
Björn Ricks <bjoern.ricks@intevation.de>
parents: 62
diff changeset
213 key=lambda x: x[0].lower()):
5d1e486140ae Support merging of pdf documents with different names in the uploaded data
Björn Ricks <bjoern.ricks@intevation.de>
parents: 62
diff changeset
214 ffiles.extend(value)
19
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
215
62
16352bd395fa Allow to ignore merge errors on files
Björn Ricks <bjoern.ricks@intevation.de>
parents: 61
diff changeset
216 for ffile in ffiles:
16352bd395fa Allow to ignore merge errors on files
Björn Ricks <bjoern.ricks@intevation.de>
parents: 61
diff changeset
217 try:
85
c018570c1a2d Ignore existing Bookmarks when merging documemts
Frank Koormann <frank.koormann@intevation.de>
parents: 84
diff changeset
218 merger.append(ffile, import_bookmarks=False)
62
16352bd395fa Allow to ignore merge errors on files
Björn Ricks <bjoern.ricks@intevation.de>
parents: 61
diff changeset
219 except Exception, e:
16352bd395fa Allow to ignore merge errors on files
Björn Ricks <bjoern.ricks@intevation.de>
parents: 61
diff changeset
220 log.exception("Error merging file %s" % ffile)
16352bd395fa Allow to ignore merge errors on files
Björn Ricks <bjoern.ricks@intevation.de>
parents: 61
diff changeset
221 if self.is_ignore_file_errors():
16352bd395fa Allow to ignore merge errors on files
Björn Ricks <bjoern.ricks@intevation.de>
parents: 61
diff changeset
222 continue
16352bd395fa Allow to ignore merge errors on files
Björn Ricks <bjoern.ricks@intevation.de>
parents: 61
diff changeset
223 else:
16352bd395fa Allow to ignore merge errors on files
Björn Ricks <bjoern.ricks@intevation.de>
parents: 61
diff changeset
224 return MergeErrorResponse(details=str(e))
19
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
225
62
16352bd395fa Allow to ignore merge errors on files
Björn Ricks <bjoern.ricks@intevation.de>
parents: 61
diff changeset
226 outfile = tempfile.NamedTemporaryFile()
19
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
227
62
16352bd395fa Allow to ignore merge errors on files
Björn Ricks <bjoern.ricks@intevation.de>
parents: 61
diff changeset
228 try:
61
d8fc52aceb9c Handle errors during merge of pdf documents
Björn Ricks <bjoern.ricks@intevation.de>
parents: 60
diff changeset
229 merger.write(outfile)
d8fc52aceb9c Handle errors during merge of pdf documents
Björn Ricks <bjoern.ricks@intevation.de>
parents: 60
diff changeset
230 merger.close()
d8fc52aceb9c Handle errors during merge of pdf documents
Björn Ricks <bjoern.ricks@intevation.de>
parents: 60
diff changeset
231 outfile.seek(0)
d8fc52aceb9c Handle errors during merge of pdf documents
Björn Ricks <bjoern.ricks@intevation.de>
parents: 60
diff changeset
232 except PyPdfError, e:
d8fc52aceb9c Handle errors during merge of pdf documents
Björn Ricks <bjoern.ricks@intevation.de>
parents: 60
diff changeset
233 log.exception("Merge error")
d8fc52aceb9c Handle errors during merge of pdf documents
Björn Ricks <bjoern.ricks@intevation.de>
parents: 60
diff changeset
234 return MergeErrorResponse(details=str(e))
19
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
235
57
423f99732a80 Add some debug output for merging pdfs
Björn Ricks <bjoern.ricks@intevation.de>
parents: 54
diff changeset
236 log.debug("PDF documents merged")
19
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
237 return Response(outfile, mimetype=PDF_MIMETYPE)
22
0e40926735e1 Add a generic View to display a template for a get request
Björn Ricks <bjoern.ricks@intevation.de>
parents: 19
diff changeset
238
62
16352bd395fa Allow to ignore merge errors on files
Björn Ricks <bjoern.ricks@intevation.de>
parents: 61
diff changeset
239 def is_ignore_file_errors(self):
16352bd395fa Allow to ignore merge errors on files
Björn Ricks <bjoern.ricks@intevation.de>
parents: 61
diff changeset
240 return request.args.get("ignore_file_errors", False) or \
16352bd395fa Allow to ignore merge errors on files
Björn Ricks <bjoern.ricks@intevation.de>
parents: 61
diff changeset
241 request.form.get("ignore_file_errors", False)
16352bd395fa Allow to ignore merge errors on files
Björn Ricks <bjoern.ricks@intevation.de>
parents: 61
diff changeset
242
73
02efda1f6919 issue5117: service for checking a pdf for merging readiness added.
Bernhard Reiter <bernhard@intevation.de>
parents: 67
diff changeset
243 class CheckView(MethodView):
02efda1f6919 issue5117: service for checking a pdf for merging readiness added.
Bernhard Reiter <bernhard@intevation.de>
parents: 67
diff changeset
244
02efda1f6919 issue5117: service for checking a pdf for merging readiness added.
Bernhard Reiter <bernhard@intevation.de>
parents: 67
diff changeset
245 def get(self):
02efda1f6919 issue5117: service for checking a pdf for merging readiness added.
Bernhard Reiter <bernhard@intevation.de>
parents: 67
diff changeset
246 return render_template("check.html")
02efda1f6919 issue5117: service for checking a pdf for merging readiness added.
Bernhard Reiter <bernhard@intevation.de>
parents: 67
diff changeset
247
02efda1f6919 issue5117: service for checking a pdf for merging readiness added.
Bernhard Reiter <bernhard@intevation.de>
parents: 67
diff changeset
248 def post(self):
94
2ef34abbad8d Use http error code 422 in CheckView when a merge is not possible.
Bernhard Herzog <bh@intevation.de>
parents: 93
diff changeset
249 """Check that the attached PDF file is ready for merging.
2ef34abbad8d Use http error code 422 in CheckView when a merge is not possible.
Bernhard Herzog <bh@intevation.de>
parents: 93
diff changeset
250 If it is not ready a MergeErrorResponse is returned with
2ef34abbad8d Use http error code 422 in CheckView when a merge is not possible.
Bernhard Herzog <bh@intevation.de>
parents: 93
diff changeset
251 http_error_code=422. The default error code of 500 is not really
2ef34abbad8d Use http error code 422 in CheckView when a merge is not possible.
Bernhard Herzog <bh@intevation.de>
parents: 93
diff changeset
252 sensible because it is not an internal server error if the
2ef34abbad8d Use http error code 422 in CheckView when a merge is not possible.
Bernhard Herzog <bh@intevation.de>
parents: 93
diff changeset
253 attachment cannot be merged. The code 422 is used in WEB-DAV
2ef34abbad8d Use http error code 422 in CheckView when a merge is not possible.
Bernhard Herzog <bh@intevation.de>
parents: 93
diff changeset
254 with the meaning "Unprocessable Entity" which fits relatively
2ef34abbad8d Use http error code 422 in CheckView when a merge is not possible.
Bernhard Herzog <bh@intevation.de>
parents: 93
diff changeset
255 well.
2ef34abbad8d Use http error code 422 in CheckView when a merge is not possible.
Bernhard Herzog <bh@intevation.de>
parents: 93
diff changeset
256 """
73
02efda1f6919 issue5117: service for checking a pdf for merging readiness added.
Bernhard Reiter <bernhard@intevation.de>
parents: 67
diff changeset
257 log.debug("Checking a PDF document's readiness for merging")
02efda1f6919 issue5117: service for checking a pdf for merging readiness added.
Bernhard Reiter <bernhard@intevation.de>
parents: 67
diff changeset
258
02efda1f6919 issue5117: service for checking a pdf for merging readiness added.
Bernhard Reiter <bernhard@intevation.de>
parents: 67
diff changeset
259 ffile = request.files['file']
02efda1f6919 issue5117: service for checking a pdf for merging readiness added.
Bernhard Reiter <bernhard@intevation.de>
parents: 67
diff changeset
260 if not ffile.filename:
02efda1f6919 issue5117: service for checking a pdf for merging readiness added.
Bernhard Reiter <bernhard@intevation.de>
parents: 67
diff changeset
261 return ErrorResponse(
02efda1f6919 issue5117: service for checking a pdf for merging readiness added.
Bernhard Reiter <bernhard@intevation.de>
parents: 67
diff changeset
262 "Upload file missing", error_code=101,
02efda1f6919 issue5117: service for checking a pdf for merging readiness added.
Bernhard Reiter <bernhard@intevation.de>
parents: 67
diff changeset
263 details="Please upload a file for conversion",
92
2200ae1e7bdb Rename html_error_code to http_error_code
Bernhard Herzog <bh@intevation.de>
parents: 91
diff changeset
264 http_error_code=400)
73
02efda1f6919 issue5117: service for checking a pdf for merging readiness added.
Bernhard Reiter <bernhard@intevation.de>
parents: 67
diff changeset
265
91
607694092e2e Extend CheckView to behave more like the actual merge.
Bernhard Herzog <bh@intevation.de>
parents: 89
diff changeset
266 with tempfile.TemporaryFile() as outfile:
607694092e2e Extend CheckView to behave more like the actual merge.
Bernhard Herzog <bh@intevation.de>
parents: 89
diff changeset
267 merger = PdfFileMerger(strict=False)
607694092e2e Extend CheckView to behave more like the actual merge.
Bernhard Herzog <bh@intevation.de>
parents: 89
diff changeset
268 try:
607694092e2e Extend CheckView to behave more like the actual merge.
Bernhard Herzog <bh@intevation.de>
parents: 89
diff changeset
269 merger.append(ffile, import_bookmarks=False)
607694092e2e Extend CheckView to behave more like the actual merge.
Bernhard Herzog <bh@intevation.de>
parents: 89
diff changeset
270 except Exception, e:
607694092e2e Extend CheckView to behave more like the actual merge.
Bernhard Herzog <bh@intevation.de>
parents: 89
diff changeset
271 log.exception("Error testing merger.append of %s" % ffile)
94
2ef34abbad8d Use http error code 422 in CheckView when a merge is not possible.
Bernhard Herzog <bh@intevation.de>
parents: 93
diff changeset
272 return MergeErrorResponse(details=str(e), http_error_code=422)
73
02efda1f6919 issue5117: service for checking a pdf for merging readiness added.
Bernhard Reiter <bernhard@intevation.de>
parents: 67
diff changeset
273
91
607694092e2e Extend CheckView to behave more like the actual merge.
Bernhard Herzog <bh@intevation.de>
parents: 89
diff changeset
274 try:
607694092e2e Extend CheckView to behave more like the actual merge.
Bernhard Herzog <bh@intevation.de>
parents: 89
diff changeset
275 merger.write(outfile)
607694092e2e Extend CheckView to behave more like the actual merge.
Bernhard Herzog <bh@intevation.de>
parents: 89
diff changeset
276 except Exception, e:
607694092e2e Extend CheckView to behave more like the actual merge.
Bernhard Herzog <bh@intevation.de>
parents: 89
diff changeset
277 log.exception("Error testing merger.write of merged %s" % ffile)
94
2ef34abbad8d Use http error code 422 in CheckView when a merge is not possible.
Bernhard Herzog <bh@intevation.de>
parents: 93
diff changeset
278 return MergeErrorResponse(details=str(e), http_error_code=422)
91
607694092e2e Extend CheckView to behave more like the actual merge.
Bernhard Herzog <bh@intevation.de>
parents: 89
diff changeset
279
607694092e2e Extend CheckView to behave more like the actual merge.
Bernhard Herzog <bh@intevation.de>
parents: 89
diff changeset
280 merger.close()
73
02efda1f6919 issue5117: service for checking a pdf for merging readiness added.
Bernhard Reiter <bernhard@intevation.de>
parents: 67
diff changeset
281
02efda1f6919 issue5117: service for checking a pdf for merging readiness added.
Bernhard Reiter <bernhard@intevation.de>
parents: 67
diff changeset
282 log.debug("PDF document %s checked." % ffile)
02efda1f6919 issue5117: service for checking a pdf for merging readiness added.
Bernhard Reiter <bernhard@intevation.de>
parents: 67
diff changeset
283 return Response("Okay.")
02efda1f6919 issue5117: service for checking a pdf for merging readiness added.
Bernhard Reiter <bernhard@intevation.de>
parents: 67
diff changeset
284
22
0e40926735e1 Add a generic View to display a template for a get request
Björn Ricks <bjoern.ricks@intevation.de>
parents: 19
diff changeset
285
0e40926735e1 Add a generic View to display a template for a get request
Björn Ricks <bjoern.ricks@intevation.de>
parents: 19
diff changeset
286 class TemplateView(MethodView):
0e40926735e1 Add a generic View to display a template for a get request
Björn Ricks <bjoern.ricks@intevation.de>
parents: 19
diff changeset
287
0e40926735e1 Add a generic View to display a template for a get request
Björn Ricks <bjoern.ricks@intevation.de>
parents: 19
diff changeset
288 template_name = ""
0e40926735e1 Add a generic View to display a template for a get request
Björn Ricks <bjoern.ricks@intevation.de>
parents: 19
diff changeset
289
0e40926735e1 Add a generic View to display a template for a get request
Björn Ricks <bjoern.ricks@intevation.de>
parents: 19
diff changeset
290 def __init__(self, template_name=None):
0e40926735e1 Add a generic View to display a template for a get request
Björn Ricks <bjoern.ricks@intevation.de>
parents: 19
diff changeset
291 if template_name:
0e40926735e1 Add a generic View to display a template for a get request
Björn Ricks <bjoern.ricks@intevation.de>
parents: 19
diff changeset
292 self.template_name = template_name
0e40926735e1 Add a generic View to display a template for a get request
Björn Ricks <bjoern.ricks@intevation.de>
parents: 19
diff changeset
293
0e40926735e1 Add a generic View to display a template for a get request
Björn Ricks <bjoern.ricks@intevation.de>
parents: 19
diff changeset
294 def get_template_name(self):
0e40926735e1 Add a generic View to display a template for a get request
Björn Ricks <bjoern.ricks@intevation.de>
parents: 19
diff changeset
295 return self.template_name
0e40926735e1 Add a generic View to display a template for a get request
Björn Ricks <bjoern.ricks@intevation.de>
parents: 19
diff changeset
296
0e40926735e1 Add a generic View to display a template for a get request
Björn Ricks <bjoern.ricks@intevation.de>
parents: 19
diff changeset
297 def get(self):
0e40926735e1 Add a generic View to display a template for a get request
Björn Ricks <bjoern.ricks@intevation.de>
parents: 19
diff changeset
298 return render_template(self.get_template_name())
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)