The artifacttype's parent_type definition is error 47/15547/6
authorshangxdy <shang.xiaodong@zte.com.cn>
Tue, 14 Jun 2016 15:37:36 +0000 (23:37 +0800)
committershangxdy <shang.xiaodong@zte.com.cn>
Thu, 16 Jun 2016 12:19:59 +0000 (20:19 +0800)
1. Artifact type  define parent_type, but it shall be statuefulentity,
not string, so the method of is_derived_from in artifact entity may
be error when it's called.
2. The bug will submit to openstack community.

Change-Id: I8e64a28da0287ff5653da69a0cf15016c8ed937f
JIRA: PARSER-53
Signed-off-by: shangxdy <shang.xiaodong@zte.com.cn>
tosca2heat/tosca-parser/toscaparser/elements/artifacttype.py
tosca2heat/tosca-parser/toscaparser/tests/test_toscadef.py

index 3bfd7d0..887e99a 100644 (file)
@@ -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.'''
index f0a87ac..7783b0c 100644 (file)
@@ -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':