Skip to content

Commit

Permalink
Merge pull request #2316 from onaio/fix-remove-group-prefix-bug
Browse files Browse the repository at this point in the history
Remove group name prefix for grouped gps fields
  • Loading branch information
KipSigei authored Sep 22, 2022
2 parents 1f566aa + 00d5ceb commit c433fbb
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 3 deletions.
4 changes: 2 additions & 2 deletions onadata/apps/logger/models/xform.py
Original file line number Diff line number Diff line change
Expand Up @@ -530,7 +530,7 @@ def xpaths(self, prefix="", survey_element=None, result=None, repeat_iterations=
return result

@classmethod
def get_additional_geopoint_xpaths(cls, xpath):
def get_additional_geopoint_xpaths(cls, xpath, remove_group_name=False):
"""
This will return a list of the additional fields that are
added per geopoint. For example, given a field 'group/gps' it will
Expand All @@ -541,7 +541,7 @@ def get_additional_geopoint_xpaths(cls, xpath):
prefix = ""
name = xpath
if match:
prefix = match.groupdict()["prefix"]
prefix = "" if remove_group_name else match.groupdict()["prefix"]
name = match.groupdict()["name"]

return ["_".join([prefix, name, suffix]) for suffix in cls.GEODATA_SUFFIXES]
Expand Down
Binary file modified onadata/apps/logger/tests/fixtures/spss/childrens_survey.sav
Binary file not shown.
57 changes: 57 additions & 0 deletions onadata/libs/tests/utils/test_csv_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -593,6 +593,63 @@ def test_csv_export_remove_group_name(self):
csv_file.close()
os.unlink(temp_file.name)

def test_remove_group_name_for_gps_within_groups(self):
"""
Test gps CSV export with remove_group_name option.
"""
self._publish_grouped_gps_form()
self._submit_fixture_instance("grouped_gps", "01")
csv_df_builder = CSVDataFrameBuilder(
self.user.username,
self.xform.id_string,
remove_group_name=True,
include_images=False,
include_reviews=True)
# pylint: disable=protected-access
record_count = csv_df_builder._query_data(count=True)
self.assertEqual(record_count, 1)
temp_file = NamedTemporaryFile(suffix=".csv", delete=False)
csv_df_builder.export_to(temp_file.name)
csv_file = open(temp_file.name, 'r')
csv_reader = csv.reader(csv_file)
header = next(csv_reader)
self.assertEqual(len(header), 10 + len(csv_df_builder.extra_columns))
expected_header = [
'gps',
'_gps_latitude',
'_gps_longitude',
'_gps_altitude',
'_gps_precision',
'web_browsers/firefox',
'web_browsers/chrome',
'web_browsers/ie',
'web_browsers/safari',
'instanceID',
'_id',
'_uuid',
'_submission_time',
'_date_modified',
'_tags',
'_notes',
'_version',
'_duration',
'_submitted_by',
'_total_media',
'_media_count',
'_media_all_received',
'_review_status',
'_review_comment',
'_review_date'
]
self.assertEqual(expected_header, header)
rows = []
for row in csv_reader:
rows.append(row)
self.assertEqual(len(rows), 1)
# close and delete file
csv_file.close()
os.unlink(temp_file.name)

def test_csv_export_with_labels(self):
"""
Test CSV export with labels.
Expand Down
4 changes: 3 additions & 1 deletion onadata/libs/utils/csv_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -771,7 +771,9 @@ def _update_ordered_columns_from_data(self, cursor):

# add ordered columns for gps fields
for key in self.gps_fields:
gps_xpaths = self.data_dictionary.get_additional_geopoint_xpaths(key)
gps_xpaths = self.data_dictionary.get_additional_geopoint_xpaths(
key, self.remove_group_name
)
self.ordered_columns[key] = [key] + gps_xpaths

# add ordered columns for nested repeat data
Expand Down

0 comments on commit c433fbb

Please sign in to comment.