From 1eada92986bed4b0bf3d9ce565c3df865ce6754e Mon Sep 17 00:00:00 2001 From: Davis Raymond Muro Date: Tue, 25 Feb 2020 10:19:00 +0300 Subject: [PATCH] Add MULTIPLE_SELECT_TYPE and SELECT_BIND_TYPE tags Add MULTI_SELECT_TYPE and SELECT_BIND_TYPE tags removing the previously used SELECT_ONE and SELECT_MULTIPLE variables. More info: https://github.com/XLSForm/pyxform/pull/410 --- onadata/apps/logger/models/xform.py | 7 ++++--- onadata/libs/utils/common_tags.py | 1 + onadata/libs/utils/csv_builder.py | 7 +++++-- onadata/libs/utils/export_builder.py | 15 +++++++-------- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/onadata/apps/logger/models/xform.py b/onadata/apps/logger/models/xform.py index c1a3021e71..e1797f9433 100644 --- a/onadata/apps/logger/models/xform.py +++ b/onadata/apps/logger/models/xform.py @@ -43,7 +43,8 @@ NOTES, SUBMISSION_TIME, SUBMITTED_BY, TAGS, TOTAL_MEDIA, UUID, VERSION, REVIEW_STATUS, - REVIEW_COMMENT) + REVIEW_COMMENT, + MULTIPLE_SELECT_TYPE) from onadata.libs.utils.model_tools import queryset_iterator from onadata.libs.utils.mongo import _encode_for_mongo @@ -437,7 +438,8 @@ def xpaths(self, # replace the single question column with a column for each # item in a select all that apply question. - if survey_element.bind.get(u'type') == u'select': + if survey_element.bind.get(u'type') == u'string' \ + and survey_element.type == MULTIPLE_SELECT_TYPE: result.pop() for child in survey_element.children: result.append('/'.join([path, child.name])) @@ -475,7 +477,6 @@ def get_headers(self, include_additional_headers=False): """ Return a list of headers for a csv file. """ - def shorten(xpath): xpath_list = xpath.split('/') return '/'.join(xpath_list[2:]) diff --git a/onadata/libs/utils/common_tags.py b/onadata/libs/utils/common_tags.py index b9928b4875..de7bbfa669 100644 --- a/onadata/libs/utils/common_tags.py +++ b/onadata/libs/utils/common_tags.py @@ -83,6 +83,7 @@ TEXTIT = 'textit' OSM = 'osm' +SELECT_BIND_TYPE = 'string' MULTIPLE_SELECT_TYPE = 'select all that apply' GROUPNAME_REMOVED_FLAG = 'group-name-removed' DATAVIEW_EXPORT = U'dataview' diff --git a/onadata/libs/utils/csv_builder.py b/onadata/libs/utils/csv_builder.py index b687fa40b5..0b5d6e7bed 100644 --- a/onadata/libs/utils/csv_builder.py +++ b/onadata/libs/utils/csv_builder.py @@ -24,7 +24,9 @@ SUBMISSION_TIME, SUBMITTED_BY, TAGS, TOTAL_MEDIA, UUID, VERSION, XFORM_ID_STRING, REVIEW_STATUS, - REVIEW_COMMENT) + REVIEW_COMMENT, + MULTIPLE_SELECT_TYPE, + SELECT_BIND_TYPE) from onadata.libs.utils.export_builder import (get_choice_label, get_value_or_attachment_uri, track_task_progress) @@ -222,7 +224,8 @@ def _collect_select_multiples(cls, dd, language=None): select_multiples = [] select_multiple_elements = [ e for e in dd.get_survey_elements_with_choices() - if e.bind.get('type') == 'select' + if e.bind.get('type') == SELECT_BIND_TYPE + and e.type == MULTIPLE_SELECT_TYPE ] for e in select_multiple_elements: xpath = e.get_abbreviated_xpath() diff --git a/onadata/libs/utils/export_builder.py b/onadata/libs/utils/export_builder.py index 360749ce92..529f29ab3e 100644 --- a/onadata/libs/utils/export_builder.py +++ b/onadata/libs/utils/export_builder.py @@ -29,15 +29,12 @@ from onadata.apps.viewer.models.data_dictionary import DataDictionary from onadata.libs.utils.common_tags import ( ATTACHMENTS, BAMBOO_DATASET_ID, DELETEDAT, DURATION, GEOLOCATION, - ID, INDEX, MULTIPLE_SELECT_TYPE, NOTES, PARENT_INDEX, + ID, INDEX, MULTIPLE_SELECT_TYPE, SELECT_ONE, NOTES, PARENT_INDEX, PARENT_TABLE_NAME, REPEAT_INDEX_TAGS, SAV_255_BYTES_TYPE, SAV_NUMERIC_TYPE, STATUS, SUBMISSION_TIME, SUBMITTED_BY, TAGS, UUID, - VERSION, XFORM_ID_STRING, REVIEW_STATUS, REVIEW_COMMENT) + VERSION, XFORM_ID_STRING, REVIEW_STATUS, REVIEW_COMMENT, SELECT_BIND_TYPE) from onadata.libs.utils.mongo import _decode_from_mongo, _is_invalid_for_mongo - # the bind type of select multiples that we use to compare -MULTIPLE_SELECT_BIND_TYPE = 'select' -SELECT_ONE_BIND_TYPE = 'select1' GEOPOINT_BIND_TYPE = 'geopoint' OSM_BIND_TYPE = 'osm' DEFAULT_UPDATE_BATCH = 100 @@ -475,7 +472,8 @@ def build_sections( {child_xpath: _encode_for_mongo(child_xpath)}) # if its a select multiple, make columns out of its choices - if child.bind.get('type') == MULTIPLE_SELECT_BIND_TYPE: + if child.bind.get('type') == SELECT_BIND_TYPE \ + and child.type == MULTIPLE_SELECT_TYPE: choices = [] if self.SPLIT_SELECT_MULTIPLES: choices = self._get_select_mulitples_choices( @@ -527,7 +525,8 @@ def build_sections( _append_xpaths_to_section( current_section_name, osm_fields, child.get_abbreviated_xpath(), xpaths) - if child.bind.get(u"type") == SELECT_ONE_BIND_TYPE: + if child.bind.get(u"type") == SELECT_BIND_TYPE \ + and child.type == SELECT_ONE: _append_xpaths_to_section( current_section_name, select_ones, child.get_abbreviated_xpath(), []) @@ -1062,7 +1061,7 @@ def _is_numeric(xpath, element_type, data_dictionary): parent_xpath = '/'.join(xpath.split('/')[:-1]) parent = data_dictionary.get_element(parent_xpath) return (parent and parent.type == MULTIPLE_SELECT_TYPE) - elif element_type != SELECT_ONE_BIND_TYPE: + elif element_type != 'select1': return False if var_name not in all_value_labels: