Improve status tracking for upgrades; add package version diff

This commit is contained in:
Lance Edgar 2017-08-07 22:23:07 -05:00
parent 430a1416c6
commit e14b5a89c3
7 changed files with 209 additions and 11 deletions
tailbone/forms2

View file

@ -175,7 +175,7 @@ class Form(object):
"""
def __init__(self, fields=None, schema=None, request=None, readonly=False, readonly_fields=[],
model_instance=None, model_class=None, labels={}, renderers={}, widgets={},
model_instance=None, model_class=None, enums={}, labels={}, renderers={}, widgets={},
action_url=None, cancel_url=None):
self.fields = list(fields) if fields is not None else None
@ -189,6 +189,7 @@ class Form(object):
self.model_class = type(self.model_instance)
if self.model_class and self.fields is None:
self.fields = self.make_fields()
self.enums = enums or {}
self.labels = labels or {}
self.renderers = renderers or {}
self.widgets = widgets or {}
@ -280,12 +281,21 @@ class Form(object):
self.set_renderer(key, self.render_datetime)
elif type_ == 'boolean':
self.set_renderer(key, self.render_boolean)
elif type_ == 'enum':
self.set_renderer(key, self.render_enum)
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_enum(self, key, enum):
if enum:
self.enums[key] = enum
self.set_type(key, 'enum')
else:
self.enums.pop(key, None)
def set_renderer(self, key, renderer):
self.renderers[key] = renderer
@ -372,6 +382,15 @@ class Form(object):
value = self.obtain_value(record, field_name)
return pretty_boolean(value)
def render_enum(self, record, field_name):
value = self.obtain_value(record, field_name)
if value is None:
return ""
enum = self.enums.get(field_name)
if enum and value in enum:
return six.text_type(enum[value])
return six.text_type(value)
def render_codeblock(self, record, field_name):
value = self.obtain_value(record, field_name)
if value is None: