Refactor "exports" views to use master3

This commit is contained in:
Lance Edgar 2017-12-06 13:40:00 -06:00
parent 86cfc59d33
commit 09ba419ee3

View file

@ -28,13 +28,15 @@ from __future__ import unicode_literals, absolute_import
import os import os
import six
from rattail.db import model from rattail.db import model
import formalchemy as fa
from pyramid.response import FileResponse from pyramid.response import FileResponse
from webhelpers2.html import HTML, tags
from tailbone import forms from tailbone import forms2 as forms
from tailbone.views import MasterView2 as MasterView from tailbone.views import MasterView3 as MasterView
class ExportMasterView(MasterView): class ExportMasterView(MasterView):
@ -52,10 +54,16 @@ class ExportMasterView(MasterView):
'record_count', 'record_count',
] ]
form_fields = [
'id',
'created',
'created_by',
'record_count',
]
def get_export_key(self): def get_export_key(self):
if hasattr(self, 'export_key'): if hasattr(self, 'export_key'):
return self.export_key return self.export_key
return
def get_file_path(self, export, makedirs=False): def get_file_path(self, export, makedirs=False):
return self.rattail_config.export_filepath(self.export_key, return self.rattail_config.export_filepath(self.export_key,
@ -78,29 +86,51 @@ class ExportMasterView(MasterView):
g.set_link('id') g.set_link('id')
def render_id(self, export, column): def render_id(self, export, field):
return export.id_str return export.id_str
def _preconfigure_fieldset(self, fs): def configure_form(self, f):
fs.id.set(label="ID", renderer=forms.renderers.BatchIDFieldRenderer) super(ExportMasterView, self).configure_form(f)
fs.created_by.set(label="Created by", renderer=forms.renderers.UserFieldRenderer,
attrs={'hyperlink': True})
if self.export_has_file and self.viewing:
download = forms.renderers.FileFieldRenderer.new(
self, storage_path=self.rattail_config.export_filedir(self.export_key),
file_path=self.get_file_path(fs.model), download_url=self.get_download_url)
fs.append(fa.Field('download', renderer=download))
def configure_fieldset(self, fs): # id
fields = [ f.set_readonly('id')
fs.id, f.set_renderer('id', self.render_id)
fs.created, f.set_label('id', "ID")
fs.created_by,
fs.record_count, # created
] f.set_readonly('created')
# created_by
f.set_readonly('created_by')
f.set_renderer('created_by', self.render_created_by)
f.set_label('created_by', "Created by")
# record_count
f.set_readonly('record_count')
# download
if self.export_has_file and self.viewing: if self.export_has_file and self.viewing:
fields.append(fs.download) # download = forms.renderers.FileFieldRenderer.new(
fs.configure(include=fields) # self, storage_path=self.rattail_config.export_filedir(self.export_key),
# file_path=self.get_file_path(fs.model), download_url=self.get_download_url)
f.append('download')
f.set_renderer('download', self.render_download)
def render_download(self, export, field):
path = self.get_file_path(export)
text = "{} ({})".format(export.filename, self.readable_size(path))
url = self.request.route_url('{}.download'.format(self.get_route_prefix()), uuid=export.uuid)
return tags.link_to(text, url)
def render_created_by(self, export, field):
user = export.created_by
if not user:
return ""
text = six.text_type(user)
if self.request.has_perm('users.view'):
url = self.request.route_url('users.view', uuid=user.uuid)
return tags.link_to(text, url)
return text
def get_download_url(self, filename): def get_download_url(self, filename):
uuid = self.request.matchdict['uuid'] uuid = self.request.matchdict['uuid']