Commit 04c7719b authored by Spiros Koulouzis's avatar Spiros Koulouzis

match capabilities with requirements

parent 1fa55427
...@@ -123,20 +123,34 @@ class WineryPlanner: ...@@ -123,20 +123,34 @@ class WineryPlanner:
def get_condiate_nodes(self,unmet_requirements): def get_condiate_nodes(self,unmet_requirements):
for node_name in unmet_requirements: for node_name in unmet_requirements:
node_types = self.get_node_types_with_capability(unmet_requirements[node_name]) node_types = self.get_node_types_with_capability(unmet_requirements[node_name])
print(unmet_requirements[node_name]) # print(unmet_requirements[node_name])
def get_node_types_with_capability(self,capability): def get_node_types_with_capability(self,requirement_qname):
regex = r"\{(.*?)\}"
matches = re.finditer(regex, requirement_qname, re.MULTILINE | re.DOTALL)
namespace = next(matches).group(1)
req_id = requirement_qname.replace("{" + namespace + "}", "")
if not self.all_node_types: if not self.all_node_types:
servicetemplate_url = self.tosca_reposetory_api_base_url + "/nodetypes/" servicetemplate_url = self.tosca_reposetory_api_base_url + "/nodetypes/"
header = {'accept': 'application/json'} header = {'accept': 'application/json'}
req = urllib.request.Request(url=servicetemplate_url, headers=header, method='GET') req = urllib.request.Request(url=servicetemplate_url, headers=header, method='GET')
res = urllib.request.urlopen(req, timeout=5) res = urllib.request.urlopen(req, timeout=5)
res_body = res.read() res_body = res.read()
self.all_node_types = json.loads(res_body.decode("utf-8")) self.all_node_types = json.loads(res_body.decode("utf-8"))
for node in self.all_node_types: for node in self.all_node_types:
self.all_node_types(node['id']) # print(node['qName'])
print(node['id']) supertypes = self.get_super_types(node['qName'],None)
for node in supertypes:
if 'capabilityDefinitions' in node:
for cap in node['capabilityDefinitions']['capabilityDefinition']:
cap_qname = cap['capabilityType']
cap_matches = re.finditer(regex, cap_qname, re.MULTILINE | re.DOTALL)
namespace = next(cap_matches).group(1)
cap_id = cap_qname.replace("{" + namespace + "}", "")
if cap_id == req_id:
print(cap_id+ " matches "+ req_id)
def get_all_relationships(self, dict_tpl): def get_all_relationships(self, dict_tpl):
...@@ -149,13 +163,13 @@ class WineryPlanner: ...@@ -149,13 +163,13 @@ class WineryPlanner:
all_relationships.append(rel) all_relationships.append(rel)
return all_relationships return all_relationships
def get_super_types(self, component_type, supertypes): def get_super_types(self, type_qName, supertypes):
if (supertypes == None): if (supertypes == None):
supertypes = [] supertypes = []
regex = r"\{(.*?)\}" regex = r"\{(.*?)\}"
matches = re.finditer(regex, component_type, re.MULTILINE | re.DOTALL) matches = re.finditer(regex, type_qName, re.MULTILINE | re.DOTALL)
namespace = next(matches).group(1) namespace = next(matches).group(1)
id = component_type.replace("{" + namespace + "}", "") id = type_qName.replace("{" + namespace + "}", "")
header = {'accept': 'application/json'} header = {'accept': 'application/json'}
#winery needs it double percent-encoded #winery needs it double percent-encoded
encoded_namespace = urllib.parse.quote(namespace, safe='') encoded_namespace = urllib.parse.quote(namespace, safe='')
...@@ -175,13 +189,13 @@ class WineryPlanner: ...@@ -175,13 +189,13 @@ class WineryPlanner:
return supertypes return supertypes
def get_super_types_requirements(self, component_type, requirements): def get_super_types_requirements(self, type_qName, requirements):
if (requirements == None): if (requirements == None):
requirements = [] requirements = []
regex = r"\{(.*?)\}" regex = r"\{(.*?)\}"
matches = re.finditer(regex, component_type, re.MULTILINE | re.DOTALL) matches = re.finditer(regex, type_qName, re.MULTILINE | re.DOTALL)
namespace = next(matches).group(1) namespace = next(matches).group(1)
id = component_type.replace("{" + namespace + "}", "") id = type_qName.replace("{" + namespace + "}", "")
header = {'accept': 'application/json'} header = {'accept': 'application/json'}
#winery needs it double percent-encoded #winery needs it double percent-encoded
encoded_namespace = urllib.parse.quote(namespace, safe='') encoded_namespace = urllib.parse.quote(namespace, safe='')
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment