comparison odfcast/convert.py @ 30:9d65de2ebe22

Merge TemplateConvertView into ConvertView Also improve temporary file handling.
author Björn Ricks <bjoern.ricks@intevation.de>
date Thu, 16 Oct 2014 10:34:43 +0200
parents 1dadc59c4b9a
children 83bca7dc9bfe
comparison
equal deleted inserted replaced
29:1dadc59c4b9a 30:9d65de2ebe22
47 47
48 fformat = request.form['format'] 48 fformat = request.form['format']
49 if not self.is_format_supported(fformat): 49 if not self.is_format_supported(fformat):
50 return "Format %s not allowed" % fformat, 401 50 return "Format %s not allowed" % fformat, 401
51 51
52 datadict = self.get_datadict()
53
52 mimetype = self.get_mimetype_for_format(fformat) 54 mimetype = self.get_mimetype_for_format(fformat)
53 55
54 infile = self.save_form_file(ffile) 56 outfile = self.save_form_file(ffile)
55 try: 57
56 outfile = self.convert(infile, fformat) 58 if datadict:
57 except: 59 tfile = tempfile.NamedTemporaryFile()
58 log.exception("Conversion error") 60 t = Template(outfile, tfile)
59 return "Conversion error", 500 61 t.render(datadict)
62 outfile.close()
63 outfile = tfile
64
65 if format != "odt":
66 try:
67 outfile = self.convert(outfile, fformat)
68 except:
69 log.exception("Conversion error")
70 return "Conversion error", 500
60 71
61 return Response(outfile, mimetype=mimetype) 72 return Response(outfile, mimetype=mimetype)
62 73
63 def get(self): 74 def get(self):
64 return render_template("convert.html") 75 return render_template("convert.html")
65 76
66 def save_form_file(self, infile): 77 def save_form_file(self, infile):
67 outfile = tempfile.NamedTemporaryFile() 78 outfile = tempfile.TemporaryFile()
68 infile.save(outfile.name) 79 infile.save(outfile)
80 infile.close()
69 return outfile 81 return outfile
70 82
71 def convert(self, infile, fformat): 83 def convert(self, infile, fformat):
72 outfile = tempfile.NamedTemporaryFile() 84 outfile = tempfile.NamedTemporaryFile()
73 85
77 return outfile 89 return outfile
78 90
79 def get_mimetype_for_format(self, fformat): 91 def get_mimetype_for_format(self, fformat):
80 return MIMETYPES.get(fformat, DEFAULT_MIMETYPE) 92 return MIMETYPES.get(fformat, DEFAULT_MIMETYPE)
81 93
82
83 class TemplateConvertView(ConvertView):
84
85 def post(self):
86 ffile = request.files['file']
87 fformat = request.form['format']
88 datadict = self.get_datadict()
89
90 if not self.is_format_supported(fformat):
91 return "Format %s not allowed" % fformat, 401
92
93 tfile = self.save_form_file(ffile)
94 outfile = tempfile.NamedTemporaryFile()
95 t = Template(tfile, outfile.name)
96 t.render(datadict)
97
98 if fformat != "odt":
99 outfile = self.convert(outfile, fformat)
100
101 mimetype = self.get_mimetype_for_format(fformat)
102 return Response(outfile, mimetype=mimetype)
103
104 def get_datadict(self): 94 def get_datadict(self):
105 vars = request.form['datadict'] 95 vars = request.form['datadict']
96 if not vars:
97 return None
106 return json.loads(vars) 98 return json.loads(vars)
107
108 def get(self):
109 return render_template("template_convert.html")
110 99
111 100
112 class MergeView(MethodView): 101 class MergeView(MethodView):
113 102
114 def get(self): 103 def get(self):
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)