Source code for ads.jobs.builders.infrastructure.utils
#!/usr/bin/env python
# -*- coding: utf-8; -*-
# Copyright (c) 2021, 2022 Oracle and/or its affiliates.
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
import copy
ALIAS_MAP = {
"file_uri": "script_uri",
}
[docs]def normalize_config(config: dict) -> dict:
"""
Normalize property names in a configuration so that they work directly with ADS.
Parameters
----------
config: dict
input configuration, usually coming directly from an OCI response
Returns
-------
dict
output configuration
"""
normalized = {}
for k, v in config.items():
k = ALIAS_MAP[k] if k in ALIAS_MAP else k
if isinstance(v, dict):
normalized[k] = normalize_config(v)
else:
normalized[k] = v
return normalized
[docs]def get_value(obj, attr, default=None):
"""Gets a copy of the value from a nested dictionary of an object with nested attributes.
Parameters
----------
obj :
An object or a dictionary
attr :
Attributes as a string seprated by dot(.)
default :
Default value to be returned if attribute is not found.
Returns
-------
Any:
A copy of the attribute value. For dict or list, a deepcopy will be returned.
"""
keys = attr.split(".")
val = default
for key in keys:
if hasattr(obj, key):
val = getattr(obj, key)
elif hasattr(obj, "get"):
val = obj.get(key, default)
else:
return default
obj = val
return copy.deepcopy(val)