and another fixes

This commit is contained in:
Artem Goncharov 2022-08-23 12:56:56 +02:00
parent cd450aa4ac
commit 9a7a97abb8
2 changed files with 122 additions and 61 deletions

File diff suppressed because it is too large Load Diff

View File

@ -12,6 +12,7 @@
# limitations under the License. # limitations under the License.
import copy import copy
import warnings
import otc_metadata.data import otc_metadata.data
@ -32,13 +33,17 @@ class Services(object):
def __init__(self): def __init__(self):
self._service_data = BUILTIN_DATA self._service_data = BUILTIN_DATA
def _sorted_data(self): def _sort_data(self):
self._service_data['documents'] = sorted( self._service_data['documents'] = sorted(
self._service_data['documents'], self._service_data['documents'],
key=lambda x: f"{x.get('service_type')}{x.get('title')}"
)
self._service_data['documents'] = sorted(
self._service_data['documents'],
key=lambda x: f"{x.get('service_type')}{x.get('title')}" key=lambda x: f"{x.get('service_type')}{x.get('title')}"
) )
self._service_data['services'] = sorted( self._service_data['services'] = sorted(
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')}"
) )
@ -66,6 +71,15 @@ class Services(object):
res[srv["service_type"]] = copy.deepcopy(srv) res[srv["service_type"]] = copy.deepcopy(srv)
return res return res
@property
def service_categories(self):
"""List services categories
"""
res = []
for cat in self._service_data["service_categories"]:
res.append(copy.deepcopy(cat))
return res
def services_by_category(self, category): def services_by_category(self, category):
"""List services matching category """List services matching category
""" """
@ -75,6 +89,33 @@ class Services(object):
res.append(copy.deepcopy(srv)) res.append(copy.deepcopy(srv))
return res return res
def services_with_docs_by_category(self, category, environment=None):
"""Retrieve service category docs data
:param str category: Optional Category filter
:param str env: Optional service environment. Influeces "repository"
field
"""
res = dict()
services = self.service_dict
for doc in self.all_docs:
cat = doc["service_type"]
service = services.get(cat)
if not service:
warnings.warn("No Service defition of type %s" % (cat))
continue
if category and service["service_category"] != category:
continue
res.setdefault(cat, service)
res_doc = copy.deepcopy(doc)
res_doc.update(**service)
if environment:
if "environment" in doc and doc["environment"] != environment:
continue
res[cat].setdefault("docs", [])
res[cat]["docs"].append(res_doc)
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 services matching category
@ -85,11 +126,15 @@ class Services(object):
res = [] res = []
services = self.service_dict services = self.service_dict
for doc in self.all_docs: for doc in self.all_docs:
service = services[doc["service_type"]] cat = doc["service_type"]
service = services.get(cat)
if not service:
warnings.warn("No Service defition of type %s" % (cat))
continue
if service["service_category"] == category: if service["service_category"] == category:
res_doc = copy.deepcopy(doc) res_doc = copy.deepcopy(doc)
res_doc.update(**service) res_doc.update(**service)
if env: if environment:
for srv_env in service["repositories"]: for srv_env in service["repositories"]:
if srv_env.get("environment") == environment: if srv_env.get("environment") == environment:
res_doc["repository"] = srv_env["repo"] res_doc["repository"] = srv_env["repo"]