Refactor the batch file field renderer somewhat
try to leverage the "common" file field renderer some more...
This commit is contained in:
parent
581a21bd9d
commit
43022c3205
|
@ -31,10 +31,10 @@ import stat
|
||||||
import random
|
import random
|
||||||
|
|
||||||
import formalchemy as fa
|
import formalchemy as fa
|
||||||
from formalchemy.ext import fsblob
|
|
||||||
from formalchemy.fields import FileFieldRenderer as Base
|
|
||||||
from webhelpers.html import tags
|
from webhelpers.html import tags
|
||||||
|
|
||||||
|
from tailbone.forms.renderers import FileFieldRenderer as BaseFileFieldRenderer
|
||||||
|
|
||||||
|
|
||||||
class BatchIDFieldRenderer(fa.FieldRenderer):
|
class BatchIDFieldRenderer(fa.FieldRenderer):
|
||||||
"""
|
"""
|
||||||
|
@ -53,23 +53,13 @@ class BatchIDFieldRenderer(fa.FieldRenderer):
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
|
|
||||||
# TODO: make this inherit from `tailbone.forms.renderers.files.FileFieldRenderer`
|
class FileFieldRenderer(BaseFileFieldRenderer):
|
||||||
class FileFieldRenderer(fsblob.FileFieldRenderer):
|
|
||||||
"""
|
"""
|
||||||
Custom file field renderer for batches based on a single source data file.
|
Custom file field renderer for batches based on a single source data file.
|
||||||
In edit mode, shows a file upload field. In readonly mode, shows the
|
In edit mode, shows a file upload field. In readonly mode, shows the
|
||||||
filename and its size.
|
filename and its size.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def new(cls, view):
|
|
||||||
name = 'Configured%s_%s' % (cls.__name__, str(random.random())[2:])
|
|
||||||
return type(str(name), (cls,), dict(view=view))
|
|
||||||
|
|
||||||
@property
|
|
||||||
def storage_path(self):
|
|
||||||
return self.view.upload_dir
|
|
||||||
|
|
||||||
def get_size(self):
|
def get_size(self):
|
||||||
size = super(FileFieldRenderer, self).get_size()
|
size = super(FileFieldRenderer, self).get_size()
|
||||||
if size:
|
if size:
|
||||||
|
@ -80,13 +70,8 @@ class FileFieldRenderer(fsblob.FileFieldRenderer):
|
||||||
return os.stat(path)[stat.ST_SIZE]
|
return os.stat(path)[stat.ST_SIZE]
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
def get_url(self, filename):
|
|
||||||
batch = self.field.parent.model
|
|
||||||
return self.view.request.route_url('{}.download'.format(self.view.get_route_prefix()),
|
|
||||||
uuid=batch.uuid)
|
|
||||||
|
|
||||||
def render(self, **kwargs):
|
def render(self, **kwargs):
|
||||||
return Base.render(self, **kwargs)
|
return BaseFileFieldRenderer.render(self, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class HandheldBatchFieldRenderer(fa.FieldRenderer):
|
class HandheldBatchFieldRenderer(fa.FieldRenderer):
|
||||||
|
|
|
@ -71,11 +71,15 @@ class FileFieldRenderer(fsblob.FileFieldRenderer):
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
def get_url(self, filename):
|
def get_url(self, filename):
|
||||||
|
"""
|
||||||
|
Must return a URL suitable for downloading the file
|
||||||
|
"""
|
||||||
url = self.get_download_url()
|
url = self.get_download_url()
|
||||||
if url:
|
if url:
|
||||||
if callable(url):
|
if callable(url):
|
||||||
return url(filename)
|
return url(filename)
|
||||||
return url
|
return url
|
||||||
|
return self.view.get_action_url('download', self.field.parent.model)
|
||||||
|
|
||||||
def get_download_url(self):
|
def get_download_url(self):
|
||||||
if hasattr(self, 'download_url'):
|
if hasattr(self, 'download_url'):
|
||||||
|
|
Loading…
Reference in a new issue