Skip to content

Commit 7f57801

Browse files
committed
[#50][#75] Re-add case and space insensitivity of titles
1 parent 802adbb commit 7f57801

File tree

2 files changed

+37
-6
lines changed

2 files changed

+37
-6
lines changed

flattentool/schema.py

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,22 @@ def lookup_header_list(self, title_header_list):
3232
else:
3333
return self[first_title].property_name
3434
else:
35-
return '/'.join(title_header_list)
35+
# If we can't look up the title, treat it and any children as
36+
# field names directly.
37+
# Strip spaces off these.
38+
return '/'.join(x.strip(' ') for x in title_header_list)
39+
40+
def __setitem__(self, key, value):
41+
self.data[key.replace(' ', '').lower()] = value
42+
43+
def __getitem__(self, key):
44+
if key is None:
45+
raise KeyError
46+
else:
47+
return self.data[key.replace(' ', '').lower()]
48+
49+
def __contains__(self, key):
50+
return key.replace(' ', '').lower() in self.data
3651

3752

3853
class SchemaParser(object):
@@ -87,15 +102,16 @@ def parse_schema_dict(self, parent_name, schema_dict, parent_id_fields=None, tit
87102
property_type_set = get_property_type_set(property_schema_dict)
88103

89104
title = property_schema_dict.get('title')
90-
title_lookup[title] = TitleLookup()
91-
title_lookup[title].property_name = property_name
105+
if title:
106+
title_lookup[title] = TitleLookup()
107+
title_lookup[title].property_name = property_name
92108

93109
if 'object' in property_type_set:
94110
for field, child_title in self.parse_schema_dict(
95111
parent_name+'/'+property_name,
96112
property_schema_dict,
97113
parent_id_fields=id_fields,
98-
title_lookup=title_lookup[title]):
114+
title_lookup=title_lookup.get(title)):
99115
yield (
100116
property_name+'/'+field,
101117
# TODO ambiguous use of "title"
@@ -112,7 +128,8 @@ def parse_schema_dict(self, parent_name, schema_dict, parent_id_fields=None, tit
112128
else:
113129
raise ValueError
114130
elif 'object' in type_set:
115-
title_lookup[title].property_name = property_name+'[]'
131+
if title:
132+
title_lookup[title].property_name = property_name+'[]'
116133
if hasattr(property_schema_dict['items'], '__reference__'):
117134
sub_sheet_name = property_schema_dict['items'].__reference__['$ref'].split('/')[-1]
118135
else:
@@ -129,7 +146,7 @@ def parse_schema_dict(self, parent_name, schema_dict, parent_id_fields=None, tit
129146
fields = self.parse_schema_dict(parent_name+'/'+property_name+'[]',
130147
property_schema_dict['items'],
131148
parent_id_fields=id_fields,
132-
title_lookup=title_lookup[title])
149+
title_lookup=title_lookup.get(title))
133150

134151
rolledUp = set()
135152

flattentool/tests/test_input_SpreadsheetInput_unflatten.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,20 @@ def create_schema(root_id):
245245
'testB': {'testC': 3, 'Not in schema': 4}
246246
}]
247247
),
248+
# Should be space and case invariant
249+
(
250+
[{
251+
'ROOT_ID_TITLE': 1,
252+
'Identifier': 2,
253+
'B title : c title': 3,
254+
'btitle : Not in schema': 4,
255+
}],
256+
[{
257+
'ROOT_ID': 1,
258+
'id': 2,
259+
'testB': {'testC': 3, 'Not in schema': 4}
260+
}]
261+
),
248262
# Unicode
249263
(
250264
[{

0 commit comments

Comments
 (0)