Migrate function docs_by_service_category

This commit is contained in:
Gode, Sebastian 2025-04-09 13:55:03 +00:00
parent e87a2c2b57
commit f18cf1ee35
3 changed files with 33 additions and 9 deletions

View File

@ -30,12 +30,16 @@ def read_data(filename):
data.setdefault("documents", list()) data.setdefault("documents", list())
data.setdefault("services", list()) data.setdefault("services", list())
data.setdefault("service_categories", list()) data.setdefault("service_categories", list())
data.setdefault("repositories", list())
for item in pathlib.Path(DATA_DIR, "documents").glob("*.yaml"): for item in pathlib.Path(DATA_DIR, "documents").glob("*.yaml"):
with open(item, "r") as fp: with open(item, "r") as fp:
data["documents"].append(yaml.safe_load(fp)) data["documents"].append(yaml.safe_load(fp))
for item in pathlib.Path(DATA_DIR, "services").glob("*.yaml"): for item in pathlib.Path(DATA_DIR, "services").glob("*.yaml"):
with open(item, "r") as fp: with open(item, "r") as fp:
data["services"].append(yaml.safe_load(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( for item in pathlib.Path(DATA_DIR, "service_categories").glob(
"*.yaml" "*.yaml"
): ):

View File

@ -20,3 +20,4 @@
documents: [] documents: []
service_categories: [] service_categories: []
services: [] services: []
repositories: []

View File

@ -13,6 +13,7 @@
import copy import copy
import warnings import warnings
import json
import otc_metadata.data import otc_metadata.data
@ -48,6 +49,11 @@ class Services(object):
self._service_data["services"], self._service_data["services"],
key=lambda x: f"{x.get('service_type')}{x.get('service_title')}", key=lambda x: f"{x.get('service_type')}{x.get('service_title')}",
) )
# sort repositories by <service_type>
self._service_data["repositories"] = sorted(
self._service_data["repositories"],
key=lambda x: f"{x.get('service_type')}",
)
# sort service categories by <name>_<title> # sort service categories by <name>_<title>
self._service_data["service_categories"] = sorted( self._service_data["service_categories"] = sorted(
self._service_data["service_categories"], self._service_data["service_categories"],
@ -71,6 +77,11 @@ class Services(object):
"Service Docs data listing." "Service Docs data listing."
return copy.deepcopy(self._service_data["documents"]) return copy.deepcopy(self._service_data["documents"])
@property
def all_repositories(self):
"Service Repositories data listing."
return copy.deepcopy(self._service_data["repositories"])
@property @property
def service_dict(self): def service_dict(self):
"Service Docs data listing." "Service Docs data listing."
@ -178,10 +189,10 @@ class Services(object):
return res return res
def docs_by_service_category(self, category, environment=None): def docs_by_service_category(self, category, environment=None):
"""List services matching category """List docs matching category
:param str category: Category name :param str category: Category name
:param str env: Optional service environment. Influeces "repository" :param str environment: Optional service environment. Influeces "repository"
field field
""" """
res = [] res = []
@ -193,12 +204,20 @@ class Services(object):
warnings.warn("No Service defition of type %s" % (cat)) warnings.warn("No Service defition of type %s" % (cat))
continue continue
if service["service_category"] == category: if service["service_category"] == category:
for repositories in self.all_repositories:
if repositories["service_type"] == service["service_type"]:
res_doc = copy.deepcopy(doc) res_doc = copy.deepcopy(doc)
res_doc["repositories"] = repositories["repositories"]
res_doc.update(**service) res_doc.update(**service)
# Get the cloud environments from the document instead of service
res_doc["cloud_environments"] = doc["cloud_environments"]
if environment: if environment:
for srv_env in service["repositories"]: repo_env_filter = []
if srv_env.get("environment") == environment: for repo in repositories["repositories"]:
res_doc["repository"] = srv_env["repo"] if repo["environment"] == environment:
repo_env_filter.append(repo)
res_doc["repositories"] = repo_env_filter
res.append(res_doc) res.append(res_doc)
return res return res