def getClassAlias(self, klass): """ Gets a class alias based on the supplied C{klass}. If one is not found in the global context, one is created locally. If you supply a string alias and the class is not registered, L{miniamf.UnknownClassAlias} will be raised. @param klass: A class object or string alias. @return: The L{miniamf.ClassAlias} instance that describes C{klass} """ try: return self._class_aliases[klass] except KeyError: pass try: alias = self._class_aliases[klass] = miniamf.get_class_alias(klass) except miniamf.UnknownClassAlias: if isinstance(klass, six.string_types): raise # no alias has been found yet .. check subclasses alias = util.get_class_alias(klass) or miniamf.ClassAlias meta = util.get_class_meta(klass) alias = alias(klass, defer=True, **meta) self._class_aliases[klass] = alias return alias
def test_simple(self): class A(object): pass miniamf.register_alias_type(DummyAlias, A) self.assertEqual(get_class_alias(A), DummyAlias)
def test_multiple(self): class A(object): pass class B(object): pass class C(object): pass miniamf.register_alias_type(DummyAlias, A) miniamf.register_alias_type(AnotherDummyAlias, B) miniamf.register_alias_type(YADummyAlias, C) self.assertEqual(get_class_alias(B), AnotherDummyAlias) self.assertEqual(get_class_alias(C), YADummyAlias) self.assertEqual(get_class_alias(A), DummyAlias)
def test_nested(self): class A(object): pass class B(object): pass class C(object): pass miniamf.register_alias_type(DummyAlias, A, B, C) self.assertEqual(get_class_alias(B), DummyAlias)
def test_none_existant(self): self.assertEqual(get_class_alias(self.__class__), None)