Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
# This is misleading as it specifies the row number as the distance vertically
# and the horizontal 'letter' as a number.
# https://github.com/OpenDataServices/flatten-tool/issues/153
cells[header] = Cell(
line[header], (sheet_name, str(k + 1), j + 2, heading)
)
else:
cells[header] = Cell(
line[header],
(sheet_name, _get_column_letter(k + 1), j + 2, heading),
)
unflattened = unflatten_main_with_parser(
self.parser, cells, self.timezone, self.xml, self.id_name
)
if root_id_or_none not in main_sheet_by_ocid:
main_sheet_by_ocid[root_id_or_none] = TemporaryDict(
self.id_name, xml=self.xml
)
def inthere(unflattened, id_name):
if self.xml:
return unflattened[id_name]["text()"].cell_value
else:
return unflattened[id_name].cell_value
if (
self.id_name in unflattened
and inthere(unflattened, self.id_name)
in main_sheet_by_ocid[root_id_or_none]
):
if self.xml:
unflattened_id = unflattened.get(self.id_name)[
def list_as_dicts_to_temporary_dicts(unflattened, id_name, xml):
for key, value in list(unflattened.items()):
if isinstance(value, Cell):
continue
if hasattr(value, "items"):
if not value:
unflattened.pop(key)
list_as_dicts_to_temporary_dicts(value, id_name, xml)
if isinstance(value, ListAsDict):
temporarydict = TemporaryDict(id_name, xml=xml)
for index in sorted(value.keys()):
temporarydict.append(value[index])
unflattened[key] = temporarydict
return unflattened
def path_search(
nested_dict, path_list, id_fields=None, path=None, top=False, top_sheet=False
):
if not path_list:
return nested_dict
id_fields = id_fields or {}
parent_field = path_list[0]
path = parent_field if path is None else path + "/" + parent_field
if parent_field.endswith("[]") or top:
if parent_field.endswith("[]"):
parent_field = parent_field[:-2]
if parent_field not in nested_dict:
nested_dict[parent_field] = TemporaryDict(
keyfield=id_name, top_sheet=top_sheet, xml=xml # noqa
)
sub_sheet_id = id_fields.get(path + "/id")
if sub_sheet_id not in nested_dict[parent_field]:
nested_dict[parent_field][sub_sheet_id] = {}
return path_search(
nested_dict[parent_field][sub_sheet_id],
path_list[1:],
id_fields=id_fields,
path=path,
top_sheet=top_sheet,
)
else:
if parent_field not in nested_dict:
nested_dict[parent_field] = OrderedDict()
return path_search(
def merge(base, mergee, debug_info=None):
if not debug_info:
debug_info = {}
for key, v in mergee.items():
if isinstance(v, Cell):
value = v.cell_value
else:
value = v
if key in base:
if isinstance(value, TemporaryDict):
if not isinstance(base[key], TemporaryDict):
warnings_for_ignored_columns(
v,
"because it treats {} as an array, but another column does not".format(
key
),
)
continue
for temporarydict_key, temporarydict_value in value.items():
if temporarydict_key in base[key]:
merge(
base[key][temporarydict_key],
temporarydict_value,
debug_info,
)
else: