summaryrefslogtreecommitdiffstats
path: root/tosca2heat/tosca-parser/toscaparser
diff options
context:
space:
mode:
Diffstat (limited to 'tosca2heat/tosca-parser/toscaparser')
-rw-r--r--tosca2heat/tosca-parser/toscaparser/elements/artifacttype.py14
-rw-r--r--tosca2heat/tosca-parser/toscaparser/entity_template.py9
-rw-r--r--tosca2heat/tosca-parser/toscaparser/tests/test_toscadef.py13
-rw-r--r--tosca2heat/tosca-parser/toscaparser/tests/test_toscatpl.py13
4 files changed, 40 insertions, 9 deletions
diff --git a/tosca2heat/tosca-parser/toscaparser/elements/artifacttype.py b/tosca2heat/tosca-parser/toscaparser/elements/artifacttype.py
index 3bfd7d0..887e99a 100644
--- a/tosca2heat/tosca-parser/toscaparser/elements/artifacttype.py
+++ b/tosca2heat/tosca-parser/toscaparser/elements/artifacttype.py
@@ -20,6 +20,7 @@ class ArtifactTypeDef(StatefulEntityType):
super(ArtifactTypeDef, self).__init__(atype, self.ARTIFACT_PREFIX,
custom_def)
self.type = atype
+ self.custom_def = custom_def
self.properties = None
if self.PROPERTIES in self.defs:
self.properties = self.defs[self.PROPERTIES]
@@ -27,17 +28,24 @@ class ArtifactTypeDef(StatefulEntityType):
def _get_parent_artifacts(self):
artifacts = {}
- parent_artif = self.parent_type
+ parent_artif = self.parent_type.type if self.parent_type else None
if parent_artif:
while parent_artif != 'tosca.artifacts.Root':
+ # only support normative artifact, shall be modified future
artifacts[parent_artif] = self.TOSCA_DEF[parent_artif]
parent_artif = artifacts[parent_artif]['derived_from']
return artifacts
@property
def parent_type(self):
- '''Return an artifact this artifact is derived from.'''
- return self.derived_from(self.defs)
+ '''Return a artifact entity from which this entity is derived.'''
+ if not hasattr(self, 'defs'):
+ return None
+ partifact_entity = self.derived_from(self.defs)
+ if partifact_entity:
+ return ArtifactTypeDef(partifact_entity, self.custom_def)
+ else:
+ return None
def get_artifact(self, name):
'''Return the definition of an artifact field by name.'''
diff --git a/tosca2heat/tosca-parser/toscaparser/entity_template.py b/tosca2heat/tosca-parser/toscaparser/entity_template.py
index 281012b..f416c99 100644
--- a/tosca2heat/tosca-parser/toscaparser/entity_template.py
+++ b/tosca2heat/tosca-parser/toscaparser/entity_template.py
@@ -81,6 +81,15 @@ class EntityTemplate(object):
def type(self):
if self.type_definition:
return self.type_definition.type
+ else:
+ return None
+
+ @property
+ def parent_type(self):
+ if self.type_definition:
+ return self.type_definition.parent_type
+ else:
+ return None
@property
def requirements(self):
diff --git a/tosca2heat/tosca-parser/toscaparser/tests/test_toscadef.py b/tosca2heat/tosca-parser/toscaparser/tests/test_toscadef.py
index 104fab3..7c29e67 100644
--- a/tosca2heat/tosca-parser/toscaparser/tests/test_toscadef.py
+++ b/tosca2heat/tosca-parser/toscaparser/tests/test_toscadef.py
@@ -188,8 +188,9 @@ class ToscaDefTest(TestCase):
self.assertIn(ifaces.LIFECYCLE_SHORTNAME, root_node.interfaces)
def test_artifacts(self):
+ self.assertEqual(artif_root_type.parent_type, None)
self.assertEqual('tosca.artifacts.Root',
- artif_file_type.parent_type)
+ artif_file_type.parent_type.type)
self.assertEqual({}, artif_file_type.parent_artifacts)
self.assertEqual(sorted(['tosca.artifacts.Root'],
key=lambda x: str(x)),
@@ -198,7 +199,7 @@ class ToscaDefTest(TestCase):
key=lambda x: str(x)))
self.assertEqual('tosca.artifacts.Implementation',
- artif_bash_type.parent_type)
+ artif_bash_type.parent_type.type)
self.assertEqual({'tosca.artifacts.Implementation':
{'derived_from': 'tosca.artifacts.Root',
'description':
@@ -212,7 +213,7 @@ class ToscaDefTest(TestCase):
key=lambda x: str(x)))
self.assertEqual('tosca.artifacts.Implementation',
- artif_python_type.parent_type)
+ artif_python_type.parent_type.type)
self.assertEqual({'tosca.artifacts.Implementation':
{'derived_from': 'tosca.artifacts.Root',
'description':
@@ -227,7 +228,7 @@ class ToscaDefTest(TestCase):
key=lambda x: str(x)))
self.assertEqual('tosca.artifacts.Deployment.Image',
- artif_container_docker_type.parent_type)
+ artif_container_docker_type.parent_type.type)
self.assertEqual({'tosca.artifacts.Deployment':
{'derived_from': 'tosca.artifacts.Root',
'description':
@@ -244,7 +245,7 @@ class ToscaDefTest(TestCase):
key=lambda x: str(x)))
self.assertEqual('tosca.artifacts.Deployment.Image',
- artif_vm_iso_type.parent_type)
+ artif_vm_iso_type.parent_type.type)
self.assertEqual({'tosca.artifacts.Deployment':
{'derived_from': 'tosca.artifacts.Root',
'description':
@@ -263,7 +264,7 @@ class ToscaDefTest(TestCase):
key=lambda x: str(x)))
self.assertEqual('tosca.artifacts.Deployment.Image',
- artif_vm_qcow2_type.parent_type)
+ artif_vm_qcow2_type.parent_type.type)
self.assertEqual({'tosca.artifacts.Deployment':
{'derived_from': 'tosca.artifacts.Root',
'description':
diff --git a/tosca2heat/tosca-parser/toscaparser/tests/test_toscatpl.py b/tosca2heat/tosca-parser/toscaparser/tests/test_toscatpl.py
index d1f634a..ac55059 100644
--- a/tosca2heat/tosca-parser/toscaparser/tests/test_toscatpl.py
+++ b/tosca2heat/tosca-parser/toscaparser/tests/test_toscatpl.py
@@ -134,6 +134,19 @@ class ToscaTemplateTest(TestCase):
self.assertEqual('Linux', os_props['type'].value)
self.assertEqual('Linux', os_type_prop)
+ def test_node_inheritance_type(self):
+ wordpress_node = [
+ node for node in self.tosca.nodetemplates
+ if node.name == 'wordpress'][0]
+ self.assertTrue(
+ wordpress_node.is_derived_from("tosca.nodes.WebApplication"))
+ self.assertTrue(
+ wordpress_node.is_derived_from("tosca.nodes.Root"))
+ self.assertFalse(
+ wordpress_node.is_derived_from("tosca.policies.Root"))
+ self.assertFalse(
+ wordpress_node.is_derived_from("tosca.groups.Root"))
+
def test_outputs(self):
self.assertEqual(
['website_url'],