The policytype's parent_type definition is error 11/15511/3
authorshangxdy <shang.xiaodong@zte.com.cn>
Tue, 14 Jun 2016 09:31:14 +0000 (17:31 +0800)
committershangxdy <shang.xiaodong@zte.com.cn>
Tue, 14 Jun 2016 16:41:56 +0000 (00:41 +0800)
1. policy type define parent_type, but it shall be statefulentity, not string,
so the method of is_derived_from in policy entity may be error
when it's called.
2. The bug will submit to openstack community.

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

index 04cbab5..8fbb0f0 100644 (file)
@@ -28,6 +28,7 @@ class PolicyType(StatefulEntityType):
         super(PolicyType, self).__init__(ptype, self.POLICY_PREFIX,
                                          custom_def)
         self.type = ptype
+        self.custom_def = custom_def
         self._validate_keys()
 
         self.meta_data = None
@@ -55,7 +56,7 @@ class PolicyType(StatefulEntityType):
 
     def _get_parent_policies(self):
         policies = {}
-        parent_policy = self.parent_type
+        parent_policy = self.parent_type.type if self.parent_type else None
         if parent_policy:
             while parent_policy != 'tosca.policies.Root':
                 policies[parent_policy] = self.TOSCA_DEF[parent_policy]
@@ -64,8 +65,12 @@ class PolicyType(StatefulEntityType):
 
     @property
     def parent_type(self):
-        '''Return a policy this policy is derived from.'''
-        return self.derived_from(self.defs)
+        '''Return a policy statefulentity of this node is derived from.'''
+        if not hasattr(self, 'defs'):
+            return None
+        ppolicy_entity = self.derived_from(self.defs)
+        if ppolicy_entity:
+            return PolicyType(ppolicy_entity, self.custom_def)
 
     def get_policy(self, name):
         '''Return the definition of a policy field by name.'''
index f0a87ac..104fab3 100644 (file)
@@ -282,8 +282,9 @@ class ToscaDefTest(TestCase):
                                 key=lambda x: str(x)))
 
     def test_policies(self):
+        self.assertEqual(policy_root_type.parent_type, None)
         self.assertEqual('tosca.policies.Root',
-                         policy_placement_type.parent_type)
+                         policy_placement_type.parent_type.type)
         self.assertEqual({}, policy_placement_type.parent_policies)
         self.assertEqual(sorted(['tosca.policies.Root',
                                  'The TOSCA Policy Type definition that is '
@@ -295,7 +296,7 @@ class ToscaDefTest(TestCase):
                                 key=lambda x: str(x)))
 
         self.assertEqual('tosca.policies.Root',
-                         policy_scaling_type.parent_type)
+                         policy_scaling_type.parent_type.type)
         self.assertEqual({}, policy_scaling_type.parent_policies)
         self.assertEqual(sorted(['tosca.policies.Root',
                                  'The TOSCA Policy Type definition that is '
@@ -307,7 +308,7 @@ class ToscaDefTest(TestCase):
                                 key=lambda x: str(x)))
 
         self.assertEqual('tosca.policies.Root',
-                         policy_update_type.parent_type)
+                         policy_update_type.parent_type.type)
         self.assertEqual({}, policy_update_type.parent_policies)
         self.assertEqual(sorted(['tosca.policies.Root',
                                  'The TOSCA Policy Type definition that is '
@@ -319,7 +320,7 @@ class ToscaDefTest(TestCase):
                                 key=lambda x: str(x)))
 
         self.assertEqual('tosca.policies.Root',
-                         policy_performance_type.parent_type)
+                         policy_performance_type.parent_type.type)
         self.assertEqual({}, policy_performance_type.parent_policies)
         self.assertEqual(sorted(['tosca.policies.Root',
                                  'The TOSCA Policy Type definition that is '