python-shctl-iam/iam/providers.py
2023-10-06 19:16:30 -04:00

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