From 946db0113eaee24be38f11635ea7b6d9a5d7d70f Mon Sep 17 00:00:00 2001 From: Russell Hay Date: Thu, 21 Jul 2016 11:36:39 -0700 Subject: [PATCH 1/2] refactoring for better readability --- tableaudocumentapi/datasource.py | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/tableaudocumentapi/datasource.py b/tableaudocumentapi/datasource.py index 0fdc3fb..1b41576 100644 --- a/tableaudocumentapi/datasource.py +++ b/tableaudocumentapi/datasource.py @@ -4,6 +4,7 @@ # ############################################################################### import collections +import itertools import xml.etree.ElementTree as ET import xml.sax.saxutils as sax import zipfile @@ -178,16 +179,17 @@ def fields(self): return self._fields def _get_all_fields(self): - column_objects = [_column_object_from_column_xml(self._datasourceTree, xml) - for xml in self._datasourceTree.findall('.//column')] - existing_fields = [x.id for x in column_objects] - metadata_fields = (x.text - for x in self._datasourceTree.findall(".//metadata-record[@class='column']/local-name")) - - missing_fields = (x for x in metadata_fields if x not in existing_fields) - column_objects.extend(( - _column_object_from_metadata_xml(_get_metadata_xml_for_field(self._datasourceTree, field_name)) - for field_name in missing_fields - )) - - return FieldDictionary({k: v for k, v in column_objects}) + column_field_objects = self._get_column_objects() + existing_column_fields = [x.id for x in column_field_objects] + metadata_field_objects = (x for x in self._get_metadata_objects() if x.id not in existing_column_fields) + field_objects = itertools.chain(column_field_objects, metadata_field_objects) + + return FieldDictionary({k: v for k, v in field_objects}) + + def _get_metadata_objects(self): + return (_column_object_from_metadata_xml(x) + for x in self._datasourceTree.findall(".//metadata-record[@class='column']")) + + def _get_column_objects(self): + return [_column_object_from_column_xml(self._datasourceTree, xml) + for xml in self._datasourceTree.findall('.//column')] From 9ad63f211df3d2c07230989170bf9b22409892ed Mon Sep 17 00:00:00 2001 From: Russell Hay Date: Thu, 21 Jul 2016 13:26:44 -0700 Subject: [PATCH 2/2] rename metadata_field_objects to metadata_only_field_objects --- tableaudocumentapi/datasource.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tableaudocumentapi/datasource.py b/tableaudocumentapi/datasource.py index 1b41576..7e3c2af 100644 --- a/tableaudocumentapi/datasource.py +++ b/tableaudocumentapi/datasource.py @@ -181,8 +181,8 @@ def fields(self): def _get_all_fields(self): column_field_objects = self._get_column_objects() existing_column_fields = [x.id for x in column_field_objects] - metadata_field_objects = (x for x in self._get_metadata_objects() if x.id not in existing_column_fields) - field_objects = itertools.chain(column_field_objects, metadata_field_objects) + metadata_only_field_objects = (x for x in self._get_metadata_objects() if x.id not in existing_column_fields) + field_objects = itertools.chain(column_field_objects, metadata_only_field_objects) return FieldDictionary({k: v for k, v in field_objects})