Skip to content

Commit 03c36c5

Browse files
committed
Merge pull request #106 from OpenDataServices/356-source-map
Add source maps
2 parents 9a1fd16 + 29b0445 commit 03c36c5

File tree

4 files changed

+1068
-38
lines changed

4 files changed

+1068
-38
lines changed

flattentool/__init__.py

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from flattentool.json_input import JSONParser
33
from flattentool.output import FORMATS as OUTPUT_FORMATS
44
from flattentool.output import FORMATS_SUFFIX
5-
from flattentool.input import FORMATS as INPUT_FORMATS
5+
from flattentool.input import FORMATS as INPUT_FORMATS, WITH_CELLS
66
import json
77
import codecs
88
from decimal import Decimal
@@ -104,7 +104,8 @@ def decimal_default(o):
104104

105105
def unflatten(input_name, base_json=None, input_format=None, output_name='releases.json',
106106
main_sheet_name='releases', encoding='utf8', timezone_name='UTC',
107-
root_id='ocid', schema='', convert_titles=False, **_):
107+
root_id='ocid', schema='', convert_titles=False, cell_source_map=None,
108+
heading_source_map=None, **_):
108109
"""
109110
Unflatten a flat structure (spreadsheet - csv or xlsx) into a nested structure (JSON).
110111
@@ -132,7 +133,20 @@ def unflatten(input_name, base_json=None, input_format=None, output_name='releas
132133
base = json.load(fp, object_pairs_hook=OrderedDict)
133134
else:
134135
base = OrderedDict()
135-
base[main_sheet_name] = list(spreadsheet_input.unflatten())
136-
with codecs.open(output_name, 'w', encoding='utf-8') as fp:
137-
json.dump(base, fp, indent=4, default=decimal_default, ensure_ascii=False)
136+
if WITH_CELLS:
137+
result, cell_source_map_data, heading_source_map_data = spreadsheet_input.fancy_unflatten()
138+
base[main_sheet_name] = list(result)
139+
with codecs.open(output_name, 'w', encoding='utf-8') as fp:
140+
json.dump(base, fp, indent=4, default=decimal_default, ensure_ascii=False)
141+
if cell_source_map:
142+
with codecs.open(cell_source_map, 'w', encoding='utf-8') as fp:
143+
json.dump(cell_source_map_data, fp, indent=4, default=decimal_default, ensure_ascii=False)
144+
if heading_source_map:
145+
with codecs.open(heading_source_map, 'w', encoding='utf-8') as fp:
146+
json.dump(heading_source_map_data, fp, indent=4, default=decimal_default, ensure_ascii=False)
147+
else:
148+
result = spreadsheet_input.unflatten()
149+
base[main_sheet_name] = list(result)
150+
with codecs.open(output_name, 'w', encoding='utf-8') as fp:
151+
json.dump(base, fp, indent=4, default=decimal_default, ensure_ascii=False)
138152

flattentool/cli.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,12 @@ def create_parser():
111111
parser_unflatten.add_argument(
112112
"-o", "--output-name",
113113
help="Name of the outputted file. Will have an extension appended as appropriate. Defaults to releases")
114+
parser_unflatten.add_argument(
115+
"-c", "--cell-source-map",
116+
help="Path to write a cell source map to. Will have an extension appended as appropriate.")
117+
parser_unflatten.add_argument(
118+
"-a", "--heading-source-map",
119+
help="Path to write a heading source map to. Will have an extension appended as appropriate.")
114120
parser_unflatten.add_argument(
115121
"--timezone-name",
116122
help="Name of the timezone, defaults to UTC. Should be in tzdata format, e.g. Europe/London")

0 commit comments

Comments
 (0)