diff options
-rw-r--r-- | bh20sequploader/bh20seq-options.yml | 1 | ||||
-rw-r--r-- | bh20simplewebuploader/main.py | 33 | ||||
-rw-r--r-- | bh20simplewebuploader/templates/form.html | 2 |
3 files changed, 28 insertions, 8 deletions
diff --git a/bh20sequploader/bh20seq-options.yml b/bh20sequploader/bh20seq-options.yml index 68f6e79..4c1d15c 100644 --- a/bh20sequploader/bh20seq-options.yml +++ b/bh20sequploader/bh20seq-options.yml @@ -13,6 +13,7 @@ host_age_unit: host_sex: Male: http://purl.obolibrary.org/obo/PATO_0000384 Female: http://purl.obolibrary.org/obo/PATO_0000383 + Intersex: http://purl.obolibrary.org/obo/PATO_0001340 host_health_status: healthy: http://purl.obolibrary.org/obo/NCIT_C115935 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 %} |