Skip to content

Commit 75bb5aa

Browse files
committed
[#50] Re-add titles support for multi-sheet spreadsheets
1 parent 49e685b commit 75bb5aa

File tree

2 files changed

+12
-7
lines changed

2 files changed

+12
-7
lines changed

flattentool/input.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,17 @@ class SpreadsheetInput(object):
3636
or csv).
3737
3838
"""
39-
def convert_dict_titles(self, dicts):
39+
def convert_dict_titles(self, dicts, title_lookup=None):
4040
"""
4141
Replace titles with field names in the given list of dictionaries
4242
(``dicts``) using the titles lookup in the schema parser.
4343
4444
"""
45+
if self.parser:
46+
title_lookup = title_lookup or self.parser.title_lookup
4547
for d in dicts:
46-
if self.parser:
47-
yield { self.parser.title_lookup.lookup_header(k):v for k,v in d.items() }
48+
if title_lookup:
49+
yield { title_lookup.lookup_header(k):v for k,v in d.items() }
4850
else:
4951
yield d
5052

@@ -66,10 +68,8 @@ def get_main_sheet_lines(self):
6668
def get_sub_sheets_lines(self):
6769
for sub_sheet_name in self.sub_sheet_names:
6870
if self.convert_titles:
69-
# TODO: This won't work properly any more (breaks roundtrip
70-
# tests, but we should also have something more like unit
71-
# tests!)
72-
yield sub_sheet_name, self.convert_dict_titles(self.get_sheet_lines(sub_sheet_name))
71+
yield sub_sheet_name, self.convert_dict_titles(self.get_sheet_lines(sub_sheet_name),
72+
self.parser.sub_sheets[sub_sheet_name].title_lookup if sub_sheet_name in self.parser.sub_sheets else None)
7373
else:
7474
yield sub_sheet_name, self.get_sheet_lines(sub_sheet_name)
7575

flattentool/schema.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ class TitleLookup(UserDict):
2121
property_name = None
2222

2323
def lookup_header(self, title_header):
24+
# Ignore titles with a / in, as they may contain types
25+
# https://github.com/OpenDataServices/flatten-tool/issues/56
26+
if '/' in title_header:
27+
return title_header
2428
return self.lookup_header_list(title_header.split(':'))
2529

2630
def lookup_header_list(self, title_header_list):
@@ -143,6 +147,7 @@ def parse_schema_dict(self, parent_name, schema_dict, parent_id_fields=None, tit
143147
if sub_sheet_name not in self.sub_sheets:
144148
self.sub_sheets[sub_sheet_name] = Sheet(root_id=self.root_id, name=sub_sheet_name)
145149
sub_sheet = self.sub_sheets[sub_sheet_name]
150+
sub_sheet.title_lookup = title_lookup.get(title)
146151

147152
for field in id_fields:
148153
sub_sheet.add_field(field+':'+property_name, id_field=True)

0 commit comments

Comments
 (0)