Add "most of" support for truck dump receiving
still not complete, but conceptually it sort of is...
This commit is contained in:
parent
805a1afa3f
commit
cd7922f204
8 changed files with 368 additions and 76 deletions
|
@ -27,6 +27,7 @@ Model Master View
|
|||
from __future__ import unicode_literals, absolute_import
|
||||
|
||||
import os
|
||||
import tempfile
|
||||
import logging
|
||||
|
||||
import six
|
||||
|
@ -633,14 +634,39 @@ class MasterView(View):
|
|||
return self.render_to_response('create', {'form': form}, mobile=True)
|
||||
|
||||
def save_create_form(self, form):
|
||||
uploads = self.normalize_uploads(form)
|
||||
self.before_create(form)
|
||||
with self.Session().no_autoflush:
|
||||
obj = self.objectify(form, self.form_deserialized)
|
||||
self.before_create_flush(obj, form)
|
||||
self.Session.add(obj)
|
||||
self.Session.flush()
|
||||
self.process_uploads(obj, form, uploads)
|
||||
return obj
|
||||
|
||||
def normalize_uploads(self, form, skip=None):
|
||||
uploads = {}
|
||||
for node in form.schema:
|
||||
if isinstance(node.typ, deform.FileData):
|
||||
if skip and node.name in skip:
|
||||
continue
|
||||
filedict = self.form_deserialized.get(node.name)
|
||||
if filedict:
|
||||
tempdir = tempfile.mkdtemp()
|
||||
filepath = os.path.join(tempdir, filedict['filename'])
|
||||
tmpinfo = form.deform_form[node.name].widget.tmpstore.get(filedict['uid'])
|
||||
tmpdata = tmpinfo['fp'].read()
|
||||
with open(filepath, 'wb') as f:
|
||||
f.write(tmpdata)
|
||||
uploads[node.name] = {
|
||||
'tempdir': tempdir,
|
||||
'temp_path': filepath,
|
||||
}
|
||||
return uploads
|
||||
|
||||
def process_uploads(self, obj, form, uploads):
|
||||
pass
|
||||
|
||||
def before_create_flush(self, obj, form):
|
||||
pass
|
||||
|
||||
|
@ -1230,6 +1256,8 @@ class MasterView(View):
|
|||
"""
|
||||
obj = self.get_instance()
|
||||
filename = self.request.GET.get('filename', None)
|
||||
if not filename:
|
||||
raise self.notfound()
|
||||
path = self.download_path(obj, filename)
|
||||
response = FileResponse(path, request=self.request)
|
||||
response.content_length = os.path.getsize(path)
|
||||
|
@ -2124,6 +2152,14 @@ class MasterView(View):
|
|||
"""
|
||||
return getattr(cls, 'mobile_row_form_factory', forms.Form)
|
||||
|
||||
def render_downloadable_file(self, obj, field):
|
||||
filename = getattr(obj, field)
|
||||
if not filename:
|
||||
return ""
|
||||
path = self.download_path(obj, filename)
|
||||
url = self.get_action_url('download', obj, _query={'filename': filename})
|
||||
return self.render_file_field(path, url)
|
||||
|
||||
def render_file_field(self, path, url=None, filename=None):
|
||||
"""
|
||||
Convenience for rendering a file with optional download link
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue