annotate odfcast/convert.py @ 3:15807d87930c

Refactor ConvertView to be easier reusable
author Björn Ricks <bjoern.ricks@intevation.de>
date Fri, 26 Sep 2014 15:34:46 +0200
parents 4a34f72f036b
children 46f31348fe01
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
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
5 from flask import request, Response
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
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
8 ALLOWED_FORMATS = ["pdf", "doc", "docx", "odt"]
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
9
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
10 MIMETYPES = {
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
11 "odt": "application/vnd.oasis.opendocument.text",
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
12 "doc": "application/msword",
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
13 "docx": "application/vnd.openxmlformats-officedocument"
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
14 ".wordprocessingml.document",
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
15 "pdf": "application/pdf",
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
16 }
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
17
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
18 DEFAULT_MIMETYPE = "application/octet-stream"
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
19
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
20
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
21 class ConvertView(MethodView):
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
22
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
23 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
24 driver_module = self._load_driver_module(pyuno_driver_name)
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
25 self.convertor = driver_module.Convertor(hostname, port)
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 def _load_driver_module(self, pyuno_driver_name):
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
28 return __import__(pyuno_driver_name, globals(), locals(),
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
29 ["Convertor"])
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
30
3
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
31 def is_format_supported(self, fformat):
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
32 return fformat and fformat.lower() in ALLOWED_FORMATS
0
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
33
3
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
34 def post(self):
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
35 ffile = request.files['file']
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
36 fformat = request.form['format']
0
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 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
39 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
40
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
41 infile = self.save_form_file(ffile)
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
42 outfile = self.convert(infile, fformat)
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
43 mimetype = self.get_mimetype_for_format(fformat)
0
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
44 return Response(outfile, mimetype=mimetype)
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
45
3
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
46 def save_form_file(self, infile):
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
47 outfile = tempfile.NamedTemporaryFile()
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
48 infile.save(outfile.name)
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
49 return outfile
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
50
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
51 def convert(self, infile, fformat):
0
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
52 outfile = tempfile.NamedTemporaryFile()
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
53
3
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
54 self.convertor.convert(infile.name, outfile.name, fformat)
0
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
55
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
56 infile.close()
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
57 return outfile
4a34f72f036b Add initial conversion service
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
58
3
15807d87930c Refactor ConvertView to be easier reusable
Björn Ricks <bjoern.ricks@intevation.de>
parents: 0
diff changeset
59 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
60 return MIMETYPES.get(fformat, DEFAULT_MIMETYPE)
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)