diff --git a/otc_metadata/data/__init__.py b/otc_metadata/data/__init__.py index 60b51a1..cde23bc 100644 --- a/otc_metadata/data/__init__.py +++ b/otc_metadata/data/__init__.py @@ -30,12 +30,16 @@ def read_data(filename): data.setdefault("documents", list()) data.setdefault("services", list()) data.setdefault("service_categories", list()) + data.setdefault("repositories", list()) for item in pathlib.Path(DATA_DIR, "documents").glob("*.yaml"): with open(item, "r") as fp: data["documents"].append(yaml.safe_load(fp)) for item in pathlib.Path(DATA_DIR, "services").glob("*.yaml"): with open(item, "r") as fp: data["services"].append(yaml.safe_load(fp)) + for item in pathlib.Path(DATA_DIR, "repositories").glob("*.yaml"): + with open(item, "r") as fp: + data["repositories"].append(yaml.safe_load(fp)) for item in pathlib.Path(DATA_DIR, "service_categories").glob( "*.yaml" ): diff --git a/otc_metadata/data/services.yaml b/otc_metadata/data/services.yaml index ba5e83a..0b0ea8f 100644 --- a/otc_metadata/data/services.yaml +++ b/otc_metadata/data/services.yaml @@ -20,3 +20,4 @@ documents: [] service_categories: [] services: [] +repositories: [] diff --git a/otc_metadata/services.py b/otc_metadata/services.py index ced16fd..507a020 100644 --- a/otc_metadata/services.py +++ b/otc_metadata/services.py @@ -13,6 +13,7 @@ import copy import warnings +import json import otc_metadata.data @@ -48,6 +49,11 @@ class Services(object): self._service_data["services"], key=lambda x: f"{x.get('service_type')}{x.get('service_title')}", ) + # sort repositories by + self._service_data["repositories"] = sorted( + self._service_data["repositories"], + key=lambda x: f"{x.get('service_type')}", + ) # sort service categories by _ self._service_data["service_categories"] = sorted( self._service_data["service_categories"], @@ -70,6 +76,11 @@ class Services(object): def all_docs(self): "Service Docs data listing." return copy.deepcopy(self._service_data["documents"]) + + @property + def all_repositories(self): + "Service Repositories data listing." + return copy.deepcopy(self._service_data["repositories"]) @property def service_dict(self): @@ -178,10 +189,10 @@ class Services(object): return res def docs_by_service_category(self, category, environment=None): - """List services matching category + """List docs matching category :param str category: Category name - :param str env: Optional service environment. Influeces "repository" + :param str environment: Optional service environment. Influeces "repository" field """ res = [] @@ -193,13 +204,21 @@ class Services(object): warnings.warn("No Service defition of type %s" % (cat)) continue if service["service_category"] == category: - res_doc = copy.deepcopy(doc) - res_doc.update(**service) - if environment: - for srv_env in service["repositories"]: - if srv_env.get("environment") == environment: - res_doc["repository"] = srv_env["repo"] - res.append(res_doc) + for repositories in self.all_repositories: + if repositories["service_type"] == service["service_type"]: + res_doc = copy.deepcopy(doc) + res_doc["repositories"] = repositories["repositories"] + res_doc.update(**service) + + # Get the cloud environments from the document instead of service + res_doc["cloud_environments"] = doc["cloud_environments"] + if environment: + repo_env_filter = [] + for repo in repositories["repositories"]: + if repo["environment"] == environment: + repo_env_filter.append(repo) + res_doc["repositories"] = repo_env_filter + res.append(res_doc) return res def docs_by_service_type(self, service_type):