From 6076264cd487f159a4c22af86543bbd43145a23c Mon Sep 17 00:00:00 2001 From: Al Date: Tue, 26 Apr 2016 18:27:12 -0400 Subject: [PATCH] [addresses] Generalizing the functions used for address configs so they can be reused for per-country OSM configs, etc. --- scripts/geodata/configs/__init__.py | 0 scripts/geodata/configs/utils.py | 31 +++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 scripts/geodata/configs/__init__.py create mode 100644 scripts/geodata/configs/utils.py diff --git a/scripts/geodata/configs/__init__.py b/scripts/geodata/configs/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/geodata/configs/utils.py b/scripts/geodata/configs/utils.py new file mode 100644 index 00000000..0d760851 --- /dev/null +++ b/scripts/geodata/configs/utils.py @@ -0,0 +1,31 @@ +import six +from collections import Mapping + + +def recursive_merge(a, b): + for k, v in six.iteritems(b): + if isinstance(v, Mapping): + existing = a.get(k, v) + merged = recursive_merge(existing, v) + a[k] = merged + else: + a[k] = b[k] + return a + + +class DoesNotExist: + pass + + +def nested_get(obj, keys): + if len(keys) == 0: + return obj + try: + for key in keys[:-1]: + obj = obj.get(key, {}) + if not hasattr(obj, 'items'): + return DoesNotExist + key = keys[-1] + return obj.get(key, DoesNotExist) + except AttributeError: + return DoesNotExist