diff options
author | stark, steven <steven.stark@att.com> | 2020-09-17 13:04:35 -0700 |
---|---|---|
committer | stark, steven <steven.stark@att.com> | 2020-09-17 13:04:35 -0700 |
commit | 35375724d9657de99adb8e530e1be21305555a40 (patch) | |
tree | 28806a1a1317426546ffdb9755d6f632ce088605 /onap-client/onap_client/client | |
parent | 591c548e569423dad8d106d4d2cd26bc5ce24b19 (diff) |
[VVP] Updating onap-client
Removing dependency on distutils
moving etc/ to package resource
Adding support for volume creation and delete
Removing module level imports
Adding delete capability to spec-engine
Adding kwarg to pass Client instance to functions
Issue-ID: VVP-469
Signed-off-by: stark, steven <steven.stark@att.com>
Change-Id: Ie00065f54411c8ff40ea20c35fe919ce15f65e6a
Diffstat (limited to 'onap-client/onap_client/client')
-rw-r--r-- | onap-client/onap_client/client/catalog.py | 70 | ||||
-rw-r--r-- | onap-client/onap_client/client/clients.py | 62 |
2 files changed, 68 insertions, 64 deletions
diff --git a/onap-client/onap_client/client/catalog.py b/onap-client/onap_client/client/catalog.py index a69c501..03f10ff 100644 --- a/onap-client/onap_client/client/catalog.py +++ b/onap-client/onap_client/client/catalog.py @@ -34,9 +34,25 @@ # limitations under the License. # # ============LICENSE_END============================================ +import onap_client +import pkgutil +import inspect +import sys +import os +import importlib from abc import ABC, abstractmethod from onap_client.lib import make_request +from onap_client import config + +CACHED_MODULES = {} + + +def get_modules(): + catalog = sys.modules[__name__] + if not catalog.CACHED_MODULES: + catalog.CACHED_MODULES = import_submodules(onap_client) + return catalog.CACHED_MODULES class Catalog(ABC): @@ -53,7 +69,7 @@ class Catalog(ABC): def __call__(self, **kwargs): return make_request(self.resource, **kwargs) - def __init__(self, **kwargs): + def __init__(self, config_file=None, **kwargs): """Iterates through all child classes and attaches them as attributes, named after the namespace property. @@ -61,10 +77,15 @@ class Catalog(ABC): catalog_resources property, they will be added as attributes to the child attribute as a CallHandle object. """ + if not config_file: + config_file = os.environ.get("OC_CONFIG") or "/etc/onap_client/config.yaml" + self.catalog_items = {} + self.modules = get_modules() + self._config_overrides = kwargs for cls in self.__class__.__subclasses__(): - subclass = cls(**kwargs) + subclass = cls(config_file=config_file, **kwargs) namespace = subclass.namespace catalog_resources = subclass.catalog_resources @@ -73,6 +94,8 @@ class Catalog(ABC): setattr(self, namespace, subclass) + self.set_config(config_file) + def load(self, item_name, resource_data): """Consume a catalog resource entry as an APICatalogResource, and set it as an attribute on this.class as a CallHandle object""" @@ -91,6 +114,33 @@ class Catalog(ABC): def catalog_resources(self): raise NotImplementedError + @property + def utility_functions(self): + utility_functions = {} + for module_name, module in self.modules.items(): + all_functions = inspect.getmembers(module, inspect.isfunction) + for func in all_functions: + function = func[1] + if hasattr(function, "utility_function"): + utility_functions[func[0]] = func[1] + return utility_functions + + def set_config(self, config_file): + self.config = config.load_config(config_file, "onap_client") + for attr_name, attr in self.__dict__.items(): + if isinstance(attr, Catalog): + attr.set_config(config_file) + for k, v in attr.catalog_resources.items(): + attr.load(k, v) + + def override(override_key): + def decorator(func): + def override_check(self): + o = self._config_overrides.get(override_key) + return o if o else func(self) + return override_check + return decorator + class APICatalogResource: """Class representation of a single catalog entry""" @@ -154,3 +204,19 @@ class APICatalogResource: @property def auth(self): return self.catalog_resource_data.get("auth", None) + + +def import_submodules(package, recursive=True): + """Import all the modules in onap-client, except for those starting + with tests*. This is needed so that the Client object can register child classes""" + if isinstance(package, str): + package = importlib.import_module(package) + results = {} + for loader, name, is_pkg in pkgutil.walk_packages(package.__path__): + full_name = package.__name__ + "." + name + if full_name.find("tests") == -1: + results[full_name] = importlib.import_module(full_name) + if recursive and is_pkg: + results.update(import_submodules(full_name)) + + return results diff --git a/onap-client/onap_client/client/clients.py b/onap-client/onap_client/client/clients.py index 86c069a..a8202e4 100644 --- a/onap-client/onap_client/client/clients.py +++ b/onap-client/onap_client/client/clients.py @@ -34,16 +34,9 @@ # limitations under the License. # # ============LICENSE_END============================================ - -import importlib -import logging -import onap_client -import pkgutil -import inspect import sys from onap_client.client.catalog import Catalog -from onap_client import config CACHED_CLIENT = None @@ -59,17 +52,6 @@ class Client(Catalog): """Base class for the ONAP client. Subclasses are dynamically loaded and added as attributes. Instantiate and use this class to interact with ONAP.""" - def __init__(self, config_file=None, **kwargs): - self.config = config.APP_CONFIG - self.modules = import_submodules(onap_client) - self._config_overrides = kwargs - - super().__init__(**kwargs) - - if config_file: - logging.debug("Overriding ONAP Client configuration: {}".format(config_file)) - self.set_config(config_file) - @property def namespace(self): return "onap" @@ -77,47 +59,3 @@ class Client(Catalog): @property def catalog_resources(self): return {} - - @property - def utility_functions(self): - utility_functions = {} - for module_name, module in self.modules.items(): - all_functions = inspect.getmembers(module, inspect.isfunction) - for func in all_functions: - function = func[1] - if hasattr(function, "utility_function"): - utility_functions[func[0]] = func[1] - return utility_functions - - def set_config(self, config_file): - self.config = config.load_config(config_file, "onap_client") - for attr_name, attr in self.__dict__.items(): - if isinstance(attr, Client): - logging.debug("Reloading {} {}".format(attr_name, attr)) - attr.set_config(config_file) - for k, v in attr.catalog_resources.items(): - attr.load(k, v) - - def override(override_key): - def decorator(func): - def override_check(self): - o = self._config_overrides.get(override_key) - return o if o else func(self) - return override_check - return decorator - - -def import_submodules(package, recursive=True): - """Import all the modules in onap-client, except for those starting - with tests*. This is needed so that the Client object can register child classes""" - if isinstance(package, str): - package = importlib.import_module(package) - results = {} - for loader, name, is_pkg in pkgutil.walk_packages(package.__path__): - full_name = package.__name__ + "." + name - if full_name.find("tests") == -1: - results[full_name] = importlib.import_module(full_name) - if recursive and is_pkg: - results.update(import_submodules(full_name)) - - return results |