Add basic support for performing / tracking app upgrades

also add `MasterView.executable` and friends
This commit is contained in:
Lance Edgar 2017-08-05 22:07:49 -05:00
parent f476c696fd
commit f5688f1f90
11 changed files with 386 additions and 26 deletions

View file

@ -33,7 +33,7 @@ import sqlalchemy as sa
from sqlalchemy import orm
from sqlalchemy.ext.associationproxy import AssociationProxy, ASSOCIATION_PROXY
from rattail.util import prettify
from rattail.util import prettify, pretty_boolean
import colander
from colanderalchemy import SQLAlchemySchemaNode
@ -42,6 +42,8 @@ from deform import widget as dfwidget
from pyramid.renderers import render
from webhelpers2.html import tags, HTML
from tailbone.util import raw_datetime
log = logging.getLogger(__name__)
@ -176,7 +178,7 @@ class Form(object):
model_instance=None, model_class=None, labels={}, renderers={}, widgets={},
action_url=None, cancel_url=None):
self.fields = fields
self.fields = list(fields) if fields is not None else None
self.schema = schema
self.request = request
self.readonly = readonly
@ -274,9 +276,15 @@ class Form(object):
self.readonly_fields.remove(key)
def set_type(self, key, type_):
if type_ == 'codeblock':
if type_ == 'datetime':
self.set_renderer(key, self.render_datetime)
elif type_ == 'boolean':
self.set_renderer(key, self.render_boolean)
elif type_ == 'codeblock':
self.set_renderer(key, self.render_codeblock)
self.set_widget(key, dfwidget.TextAreaWidget(cols=80, rows=8))
else:
raise ValueError("unknown type for '{}' field: {}".format(key, type_))
def set_renderer(self, key, renderer):
self.renderers[key] = renderer
@ -354,6 +362,16 @@ class Form(object):
return ""
return six.text_type(value)
def render_datetime(self, record, field_name):
value = self.obtain_value(record, field_name)
if value is None:
return ""
return raw_datetime(self.request.rattail_config, value)
def render_boolean(self, record, field_name):
value = self.obtain_value(record, field_name)
return pretty_boolean(value)
def render_codeblock(self, record, field_name):
value = self.obtain_value(record, field_name)
if value is None: