Delay load of package Meta
When MuranoPackage instance is created and it has Meta referring to classes in the same package there will be an exception because no classes were registered in the package yet. The solution is to have lazy metadata load upon first call to get_meta() Change-Id: I9a6cb96924e9d66fb79405763142bc78477940f1 Closes-Bug: #1557099
This commit is contained in:
parent
17622c8f33
commit
c709286176
|
@ -38,7 +38,6 @@ class MuranoPackage(dsl_types.MuranoPackage, dslmeta.MetaProvider):
|
|||
super(MuranoPackage, self).__init__()
|
||||
self._package_loader = weakref.proxy(package_loader)
|
||||
self._name = name
|
||||
self._meta = None
|
||||
self._version = helpers.parse_version(version)
|
||||
self._runtime_version = helpers.parse_version(runtime_version)
|
||||
self._requirements = {
|
||||
|
@ -57,7 +56,7 @@ class MuranoPackage(dsl_types.MuranoPackage, dslmeta.MetaProvider):
|
|||
if self.name == constants.CORE_LIBRARY:
|
||||
principal_objects.register(self)
|
||||
self._package_class = self._create_package_class()
|
||||
self._meta = dslmeta.MetaData(
|
||||
self._meta = lambda: dslmeta.MetaData(
|
||||
meta, dsl_types.MetaTargets.Package, self._package_class)
|
||||
|
||||
@property
|
||||
|
@ -206,11 +205,11 @@ class MuranoPackage(dsl_types.MuranoPackage, dslmeta.MetaProvider):
|
|||
ns_resolver, self.name, self, utils.NO_VALUE)
|
||||
|
||||
def get_meta(self, context):
|
||||
if not self._meta:
|
||||
return []
|
||||
executor = helpers.get_executor(context)
|
||||
context = executor.create_package_context(self)
|
||||
return self._meta.get_meta(context)
|
||||
if six.callable(self._meta):
|
||||
executor = helpers.get_executor(context)
|
||||
context = executor.create_package_context(self)
|
||||
self._meta = self._meta().get_meta(context)
|
||||
return self._meta
|
||||
|
||||
def __repr__(self):
|
||||
return 'MuranoPackage({name})'.format(name=self.name)
|
||||
|
|
Loading…
Reference in New Issue