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:
Stan Lagun 2016-03-15 02:02:52 +03:00
parent 17622c8f33
commit c709286176
1 changed files with 6 additions and 7 deletions

View File

@ -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)