119 lines
2.9 KiB
Python
119 lines
2.9 KiB
Python
import logging
|
|
from pprint import pprint
|
|
|
|
# from .config import ResourceKind
|
|
from . import exceptions as error
|
|
from .framework import DictCtrl, DictItem, KeyValue, KeyValueExtra
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
# pprint (logger.__dict__)
|
|
|
|
|
|
class Provider(DictItem):
|
|
default_attrs = {
|
|
"resources_def": {},
|
|
"resources": {},
|
|
"services": {},
|
|
}
|
|
|
|
def init(self):
|
|
payload = self._payload
|
|
|
|
# Create resources Defs
|
|
# res_def = payload.get("resources_def", {}) # {}
|
|
|
|
# for key, val in payload.get("resources_def", {}).items():
|
|
# res_def[key] = ResourceKind(key, val)
|
|
|
|
# self.resources_def = res_def
|
|
self.resources_kind = payload.get("resources_def", {})
|
|
|
|
# Create resources instances
|
|
res_inst_configs = {}
|
|
for key, val in payload.get("resources", {}).items():
|
|
res_inst_configs[key] = val
|
|
|
|
self.resources_inst = res_inst_configs
|
|
self.resources_conf = res_inst_configs
|
|
|
|
self.services_confs = payload.get("services", {})
|
|
|
|
|
|
class Providers(DictCtrl):
|
|
items_class = Provider
|
|
|
|
def get_resource_kinds(self):
|
|
"Returns resources kinds for all providers"
|
|
|
|
ret = {}
|
|
for provider in self.values():
|
|
res = provider.resources_kind
|
|
for name, config in res.items():
|
|
ret[name] = config or {}
|
|
|
|
return ret
|
|
|
|
def get_resource_configs(self):
|
|
"Returns resources configurations for all providers"
|
|
|
|
ret = {}
|
|
for provider in self.values():
|
|
res = provider.resources_conf
|
|
for name, config in res.items():
|
|
ret[name] = config or {}
|
|
|
|
return ret
|
|
|
|
def get_services_configs(self):
|
|
ret = {}
|
|
for prov_name, provider in self.items():
|
|
ret.update(provider.services_confs)
|
|
return ret
|
|
|
|
# def get_catalog_resources_inst(self):
|
|
|
|
# ret = {}
|
|
# for provider in self.providers.values():
|
|
# # res = provider.resources_def
|
|
# for name, config in provider.resources_inst.items():
|
|
# ret[name] = config
|
|
|
|
# return ret
|
|
|
|
|
|
######## BETA
|
|
|
|
|
|
def expand_inputs(payload):
|
|
"Expand dict for each of its list value"
|
|
|
|
ret = []
|
|
expanded_keys = [key for key, val in payload.items() if isinstance(val, list)]
|
|
return
|
|
|
|
for exp_key in expanded_keys:
|
|
items = len(payload[exp_key])
|
|
|
|
for idx in range(0, items):
|
|
tmp = copy(payload)
|
|
for subkey in expanded_keys:
|
|
tmp[subkey] = payload[subkey][idx]
|
|
ret.append(tmp)
|
|
|
|
# V1
|
|
# for idx, exp_key in enumerate(expanded_keys):
|
|
# tmp = copy(payload)
|
|
# tmp[exp_key] = payload[exp_key][idx]
|
|
# ret.append(tmp)
|
|
|
|
# for key, val in payload.items():
|
|
# if isinstance(val, list):
|
|
# # Expand
|
|
# pass
|
|
|
|
print("expanded_keys", expanded_keys)
|
|
# pprint (ret)
|
|
|
|
return ret
|