aboutsummaryrefslogtreecommitdiff
path: root/bh20simplewebuploader
diff options
context:
space:
mode:
Diffstat (limited to 'bh20simplewebuploader')
-rw-r--r--bh20simplewebuploader/main.py33
-rw-r--r--bh20simplewebuploader/templates/form.html2
2 files changed, 27 insertions, 8 deletions
diff --git a/bh20simplewebuploader/main.py b/bh20simplewebuploader/main.py
index 8c5c18c..ceab8a6 100644
--- a/bh20simplewebuploader/main.py
+++ b/bh20simplewebuploader/main.py
@@ -46,8 +46,11 @@ def name_to_label(field_name):
"""
Turn a filed name like "host_health_status" from the metadata schema into a human-readable label.
"""
-
- return string.capwords(field_name.replace('_', ' '))
+
+ # May end in a number, which should be set off by a space
+ set_off_number = re.sub('([0-9]+)$', r' \1', field_name)
+
+ return string.capwords(set_off_number.replace('_', ' '))
def is_iri(string):
"""
@@ -66,10 +69,16 @@ def generate_form(schema, options):
Each dict either has a 'heading' (in which case we put a heading for a
form section in the template) or an 'id', 'label', 'type', and 'required'
- (in which case we make a form field in the template). Non-heading dicts
- with type 'select' will have an 'options' field, with a list of (name,
- value) tuples, and represent a form dropdown element. Non-heading dicts may
- have a human-readable 'docstring' field describing them.
+ (in which case we make a form field in the template).
+
+ Non-heading dicts with type 'select' will have an 'options' field, with a
+ list of (name, value) tuples, and represent a form dropdown element.
+
+ Non-heading dicts with type 'number' may have a 'step', which, if <1 or
+ 'any', allows the number to be a float.
+
+ Non-heading dicts may have a human-readable 'docstring' field describing
+ them.
Takes the deserialized metadata schema YAML, and also a deserialized YAML
of option values. The option values are keyed on (unscoped) field name in
@@ -174,9 +183,19 @@ def generate_form(schema, options):
# Make a tuple for each one
record['options'].append((name, value))
elif field_type == 'string':
- record['type'] = 'text' # HTML input type
+ if field_name.endswith('date'):
+ # Use a date picker to generate a good string.
+ # Comes back YYYY-MM-DD.
+ record['type'] = 'date'
+ else:
+ # Normal text string
+ record['type'] = 'text'
elif field_type == 'int':
record['type'] = 'number'
+ elif field_type == 'float':
+ record['type'] = 'number'
+ # Choose a reasonable precision for the control
+ record['step'] = '0.0001'
else:
raise NotImplementedError('Unimplemented field type {} in {} in metadata schema'.format(field_type, type_name))
yield record
diff --git a/bh20simplewebuploader/templates/form.html b/bh20simplewebuploader/templates/form.html
index 6993cf5..02ae84d 100644
--- a/bh20simplewebuploader/templates/form.html
+++ b/bh20simplewebuploader/templates/form.html
@@ -238,7 +238,7 @@
{% endfor %}
</select>
{% else %}
- <input type="{{ record['type'] }}" id="{{ record['id'] }}" name="{{ record['id'] }}" {{ "required" if record['required'] else "" }}>
+ <input type="{{ record['type'] }}" id="{{ record['id'] }}" name="{{ record['id'] }}" {{ "required" if record['required'] else "" }} {{ ("step=" + record['step']) if 'step' in record else ""}}>
{% endif %}
{% endif %}
{% if loop.index == loop.length %}