CORD-1568: Support sharing policies by letting one policy invoke another
Change-Id: I87fdb80a65d86b61364abd3ec35961668924c8f5
diff --git a/lib/xos-genx/xosgenx/xos2jinja.py b/lib/xos-genx/xosgenx/xos2jinja.py
index edd80ef..efcb995 100644
--- a/lib/xos-genx/xosgenx/xos2jinja.py
+++ b/lib/xos-genx/xosgenx/xos2jinja.py
@@ -7,7 +7,23 @@
import jinja2
import os
import copy
+import pdb
+class MissingPolicyException(Exception):
+ pass
+
+def find_missing_policy_calls(name, policies, policy):
+ if isinstance(policy, dict):
+ (k, lst), = policy.items()
+ if k=='policy':
+ policy_name = lst[0]
+ if policy_name not in policies: raise MissingPolicyException("Policy %s invoked missing policy %s"%(name, policy_name))
+ else:
+ for p in lst:
+ find_missing_policy_calls(name, policies, p)
+ elif isinstance(policy, list):
+ for p in lst:
+ find_missing_policy_calls(name, policies, p)
def dotname_to_fqn(dotname):
b_names = [part.pval for part in dotname]
@@ -121,16 +137,7 @@
pname = obj.name.value.pval
self.policies[pname] = obj.body
-
- return True
-
- def visit_PolicyDefinition(self, obj):
- if self.package:
- pname = '.'.join([self.package, obj.name.value.pval])
- else:
- pname = obj.name.value.pval
-
- self.policies[pname] = obj.body
+ find_missing_policy_calls(pname, self.policies, obj.body)
return True