def test_resolve_with_return_reference_true(self): mock_value = mock.Mock(spec=dsl_types.MuranoTypeReference) mock_scope_type = mock.Mock(spec=dsl_types.MuranoTypeReference) result = helpers.resolve_type(mock_value, mock_scope_type, True) self.assertEqual(mock_value, result) mock_value = mock.Mock() mock_value.get_reference.return_value = mock.sentinel.foo_reference mock_scope_type = mock.Mock() mock_scope_type.package.find_class.return_value = mock_value result = helpers.resolve_type(mock_value, mock_scope_type, True) self.assertEqual(mock.sentinel.foo_reference, result)
def __init__(self, definition, target, scope_type): scope_type = weakref.ref(scope_type) definition = helpers.list_value(definition) factories = [] used_types = set() for d in definition: if isinstance(d, dict): if len(d) != 1: raise ValueError('Invalid Meta format') name = next(iter(d.keys())) props = d[name] or {} else: name = d props = {} type_obj = helpers.resolve_type(name, scope_type()) if type_obj.usage != dsl_types.ClassUsages.Meta: raise ValueError('Only Meta classes can be attached') if target not in type_obj.targets: raise ValueError( u'Meta class {} is not applicable here'.format( type_obj.name)) if type_obj in used_types and ( type_obj.cardinality != dsl_types.MetaCardinality.Many): raise ValueError('Cannot attach several Meta instances ' 'with cardinality One') used_types.add(type_obj) factory_maker = lambda template: \ lambda context: helpers.get_object_store().load( template, owner=None, context=context, scope_type=scope_type()) factories.append(factory_maker({type_obj: props})) self._meta_factories = factories self._meta = None
def __init__(self, definition, target, scope_type): scope_type = weakref.ref(scope_type) definition = helpers.list_value(definition) factories = [] used_types = set() for d in definition: if isinstance(d, dict): if len(d) != 1: raise ValueError('Invalid Meta format') name = next(iter(d.keys())) props = d[name] or {} else: name = d props = {} type_obj = helpers.resolve_type(name, scope_type()) if type_obj.usage != dsl_types.ClassUsages.Meta: raise ValueError('Only Meta classes can be attached') if target not in type_obj.targets: raise ValueError( u'Meta class {} is not applicable here'.format( type_obj.name)) if type_obj in used_types and ( type_obj.cardinality != dsl_types.MetaCardinality.Many): raise ValueError('Cannot attach several Meta instances ' 'with cardinality One') used_types.add(type_obj) factory_maker = lambda template: \ lambda context, store: helpers.instantiate( template, owner=None, object_store=store, context=context, scope_type=scope_type()) factories.append(factory_maker({type_obj: props})) self._meta_factories = factories self._meta = None
def _resolve_imports(self, imports): seen = {self.name} for imp in helpers.list_value(imports): if imp in seen: continue type = helpers.resolve_type(imp, self) if type in seen: continue seen.add(imp) seen.add(type) yield type
def test_resolve_type_with_null_value(self): self.assertIsNone(helpers.resolve_type(None, None))