diff options
author | Tommy Carpenter <tommy@research.att.com> | 2017-08-23 11:21:44 -0400 |
---|---|---|
committer | Tommy Carpenter <tommy@research.att.com> | 2017-08-23 12:32:45 -0400 |
commit | 81b9ed7a3af1032caa86f316a21e9b2912bb1271 (patch) | |
tree | fe3bb349f501619d3b4df4d4dbb07b9d72adc824 /python-discovery-client/discovery_client/util.py | |
parent | 280af47e5342de6bb4657ad7b85adcc9395ace20 (diff) |
Intiial utils push to ONAP
Issue-Id: DCAEGEN2-80
Change-Id: I1dc8f2d384b0af346fccb86e6767b7e3ca484078
Signed-off-by: Tommy Carpenter <tommy@research.att.com>
Diffstat (limited to 'python-discovery-client/discovery_client/util.py')
-rw-r--r-- | python-discovery-client/discovery_client/util.py | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/python-discovery-client/discovery_client/util.py b/python-discovery-client/discovery_client/util.py new file mode 100644 index 0000000..b59647a --- /dev/null +++ b/python-discovery-client/discovery_client/util.py @@ -0,0 +1,78 @@ +# org.onap.dcae +# ================================================================================ +# Copyright (c) 2017 AT&T Intellectual Property. All rights reserved. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END========================================================= +# +# ECOMP is a trademark and service mark of AT&T Intellectual Property. + +import collections +import logging, sys +import six + +##### +# Module contains utility methods +##### + +def update_json(src, key, value): + """Updates a nested JSON value + + This method does a recursive lookup for a value given a compound key and then + replaces that value with the passed in new value. + + For example, given a src json { "a": [ { "aa": 1 }, "foo" ], "b": "2 } and a + key ("a", 0, "aa"), the value parameter would replace 1. + + :param src: json to update + :type src: dict or list + :param key: compound key used to lookup + :type key: tuple + :param value: new value used to replace + :type value: object + + :return: updated json + """ + if key: + src[key[0]] = update_json(src[key[0]], key[1:], value) + else: + # We've found the value we want to replace regardless of whether or not + # the object we are replacing is another copmlicated data structure. + src = value + return src + +def _has_handlers(logger): + """Check if logger has handlers""" + if six.PY3: + return logger.hasHandlers() + else: + # TODO: Not sure how to check if a handler has already been attached + # WATCH: Downside is lines get printed multiple times + return False + +def get_logger(name, level=logging.INFO): + """Get a logger with sensible defaults + + This method returns a logger from logging by name that has been set with sensible + defaults if the logger hasn't already been setup with any handlers. The + default handler is a stream handler to stdout. + """ + logger = logging.getLogger(name) + + if not _has_handlers(logger): + # No handlers attached which means logging hasn't been setup. Set + # "sensible" defaults which means stdout, INFO + logger.setLevel(level) + logger.addHandler(logging.StreamHandler(stream=sys.stdout)) + + return logger |