Improve status tracking for upgrades; add package version diff
This commit is contained in:
parent
430a1416c6
commit
e14b5a89c3
7 changed files with 209 additions and 11 deletions
tailbone/forms2
|
@ -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:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue