40 lines
965 B
Python
40 lines
965 B
Python
#
|
|
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
|
|
#
|
|
|
|
from typing import Any, Mapping
|
|
|
|
|
|
def deep_map(function, collection):
|
|
if isinstance(collection, list):
|
|
return list(map(lambda val: deep_map(function, val), collection))
|
|
|
|
collection = function(collection)
|
|
for key, val in collection.items():
|
|
if isinstance(val, dict):
|
|
collection[key] = deep_map(function, val)
|
|
elif isinstance(val, list):
|
|
collection[key] = deep_map(function, val)
|
|
else:
|
|
collection[key] = val
|
|
return collection
|
|
|
|
|
|
def normalize(collection):
|
|
return deep_map(_normalizer, collection)
|
|
|
|
|
|
def _normalizer(dictionary):
|
|
out = {}
|
|
for key, val in dictionary.items():
|
|
if not key == "_links":
|
|
out[key] = val
|
|
return out
|
|
|
|
|
|
def deep_get(mapping: Mapping[str, Any], key: str) -> Any:
|
|
key = key.split(".")
|
|
while len(key):
|
|
mapping = mapping[key.pop(0)]
|
|
return mapping
|