annotate odfcast/convert.py @ 22:0e40926735e1

Add a generic View to display a template for a get request
author Björn Ricks <bjoern.ricks@intevation.de>
date Mon, 29 Sep 2014 16:07:25 +0200
parents 2f627039d2b4
children 1dadc59c4b9a
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
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
3 import tempfile
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
4
16
f4920ab1d27c Add basic html interface for convert
Björn Ricks <bjoern.ricks@intevation.de>
parents: 4
diff changeset
5 from flask import request, Response, json, render_template
0
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
6 from flask.views import MethodView
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
7
4
46f31348fe01 Implement a TemplateConvertView to allow convert odt templates with variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3
diff changeset
8 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
9
19
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
10 from PyPDF2 import PdfFileMerger
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
11
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
12
0
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
13 ALLOWED_FORMATS = ["pdf", "doc", "docx", "odt"]
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
14
19
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
15 PDF_MIMETYPE = "application/pdf"
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
16
0
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
17 MIMETYPES = {
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
18 "odt": "application/vnd.oasis.opendocument.text",
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
19 "doc": "application/msword",
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
20 "docx": "application/vnd.openxmlformats-officedocument"
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
21 ".wordprocessingml.document",
19
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
22 "pdf": PDF_MIMETYPE,
0
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
23 }
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
24
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
25 DEFAULT_MIMETYPE = "application/octet-stream"
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
26
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
27
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
28 class ConvertView(MethodView):
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
29
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
30 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
31 driver_module = self._load_driver_module(pyuno_driver_name)
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
32 self.convertor = driver_module.Convertor(hostname, port)
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 def _load_driver_module(self, pyuno_driver_name):
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
35 return __import__(pyuno_driver_name, globals(), locals(),
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
36 ["Convertor"])
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
37
3
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
38 def is_format_supported(self, fformat):
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
39 return fformat and fformat.lower() in ALLOWED_FORMATS
0
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
40
3
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
41 def post(self):
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
42 ffile = request.files['file']
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
43 fformat = request.form['format']
0
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
44
3
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
45 if not self.is_format_supported(fformat):
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
46 return "Format %s not allowed" % fformat, 401
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
47
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
48 infile = self.save_form_file(ffile)
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
49 outfile = self.convert(infile, fformat)
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
50 mimetype = self.get_mimetype_for_format(fformat)
0
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
51 return Response(outfile, mimetype=mimetype)
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
52
16
f4920ab1d27c Add basic html interface for convert
Björn Ricks <bjoern.ricks@intevation.de>
parents: 4
diff changeset
53 def get(self):
f4920ab1d27c Add basic html interface for convert
Björn Ricks <bjoern.ricks@intevation.de>
parents: 4
diff changeset
54 return render_template("convert.html")
f4920ab1d27c Add basic html interface for convert
Björn Ricks <bjoern.ricks@intevation.de>
parents: 4
diff changeset
55
3
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
56 def save_form_file(self, infile):
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
57 outfile = tempfile.NamedTemporaryFile()
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
58 infile.save(outfile.name)
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
59 return outfile
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
60
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
61 def convert(self, infile, fformat):
0
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
62 outfile = tempfile.NamedTemporaryFile()
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
63
3
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
64 self.convertor.convert(infile.name, outfile.name, fformat)
0
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
65
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
66 infile.close()
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
67 return outfile
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
68
3
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
69 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
70 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
71
46f31348fe01 Implement a TemplateConvertView to allow convert odt templates with variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3
diff changeset
72
46f31348fe01 Implement a TemplateConvertView to allow convert odt templates with variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3
diff changeset
73 class TemplateConvertView(ConvertView):
46f31348fe01 Implement a TemplateConvertView to allow convert odt templates with variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3
diff changeset
74
46f31348fe01 Implement a TemplateConvertView to allow convert odt templates with variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3
diff changeset
75 def post(self):
46f31348fe01 Implement a TemplateConvertView to allow convert odt templates with variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3
diff changeset
76 ffile = request.files['file']
46f31348fe01 Implement a TemplateConvertView to allow convert odt templates with variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3
diff changeset
77 fformat = request.form['format']
46f31348fe01 Implement a TemplateConvertView to allow convert odt templates with variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3
diff changeset
78 datadict = self.get_datadict()
46f31348fe01 Implement a TemplateConvertView to allow convert odt templates with variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3
diff changeset
79
46f31348fe01 Implement a TemplateConvertView to allow convert odt templates with variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3
diff changeset
80 if not self.is_format_supported(fformat):
46f31348fe01 Implement a TemplateConvertView to allow convert odt templates with variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3
diff changeset
81 return "Format %s not allowed" % fformat, 401
46f31348fe01 Implement a TemplateConvertView to allow convert odt templates with variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3
diff changeset
82
46f31348fe01 Implement a TemplateConvertView to allow convert odt templates with variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3
diff changeset
83 tfile = self.save_form_file(ffile)
46f31348fe01 Implement a TemplateConvertView to allow convert odt templates with variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3
diff changeset
84 outfile = tempfile.NamedTemporaryFile()
46f31348fe01 Implement a TemplateConvertView to allow convert odt templates with variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3
diff changeset
85 t = Template(tfile, outfile.name)
46f31348fe01 Implement a TemplateConvertView to allow convert odt templates with variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3
diff changeset
86 t.render(datadict)
46f31348fe01 Implement a TemplateConvertView to allow convert odt templates with variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3
diff changeset
87
46f31348fe01 Implement a TemplateConvertView to allow convert odt templates with variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3
diff changeset
88 if fformat != "odt":
46f31348fe01 Implement a TemplateConvertView to allow convert odt templates with variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3
diff changeset
89 outfile = self.convert(outfile, fformat)
46f31348fe01 Implement a TemplateConvertView to allow convert odt templates with variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3
diff changeset
90
46f31348fe01 Implement a TemplateConvertView to allow convert odt templates with variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3
diff changeset
91 mimetype = self.get_mimetype_for_format(fformat)
46f31348fe01 Implement a TemplateConvertView to allow convert odt templates with variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3
diff changeset
92 return Response(outfile, mimetype=mimetype)
46f31348fe01 Implement a TemplateConvertView to allow convert odt templates with variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3
diff changeset
93
46f31348fe01 Implement a TemplateConvertView to allow convert odt templates with variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3
diff changeset
94 def get_datadict(self):
46f31348fe01 Implement a TemplateConvertView to allow convert odt templates with variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3
diff changeset
95 vars = request.form['datadict']
46f31348fe01 Implement a TemplateConvertView to allow convert odt templates with variable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3
diff changeset
96 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
97
585904e7411a Add html for converting a odf with a template
Björn Ricks <bjoern.ricks@intevation.de>
parents: 16
diff changeset
98 def get(self):
585904e7411a Add html for converting a odf with a template
Björn Ricks <bjoern.ricks@intevation.de>
parents: 16
diff changeset
99 return render_template("template_convert.html")
19
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
100
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
101
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
102 class MergeView(MethodView):
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
103
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
104 def get(self):
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
105 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
106
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
107 def post(self):
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
108 merger = PdfFileMerger()
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
109 ffiles = request.files.getlist('files')
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
110
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
111 for ffile in ffiles:
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
112 merger.append(ffile)
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
113
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
114 outfile = tempfile.NamedTemporaryFile()
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
115
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
116 merger.write(outfile.name)
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
117
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
118 merger.close()
2f627039d2b4 Add a MergeView to merge pdfs based on PyPDF2
Björn Ricks <bjoern.ricks@intevation.de>
parents: 18
diff changeset
119 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
120
0e40926735e1 Add a generic View to display a template for a get request
Björn Ricks <bjoern.ricks@intevation.de>
parents: 19
diff changeset
121
0e40926735e1 Add a generic View to display a template for a get request
Björn Ricks <bjoern.ricks@intevation.de>
parents: 19
diff changeset
122 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
123
0e40926735e1 Add a generic View to display a template for a get request
Björn Ricks <bjoern.ricks@intevation.de>
parents: 19
diff changeset
124 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
125
0e40926735e1 Add a generic View to display a template for a get request
Björn Ricks <bjoern.ricks@intevation.de>
parents: 19
diff changeset
126 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
127 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
128 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
129
0e40926735e1 Add a generic View to display a template for a get request
Björn Ricks <bjoern.ricks@intevation.de>
parents: 19
diff changeset
130 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
131 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
132
0e40926735e1 Add a generic View to display a template for a get request
Björn Ricks <bjoern.ricks@intevation.de>
parents: 19
diff changeset
133 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
134 return render_template(self.get_template_name())
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)