Ticket #322: pyamf_classalias.diff

File pyamf_classalias.diff, 2.1 KB (added by mvtellingen, 4 months ago)
  • pyamf/tests/test_basic.py

     
    427427 
    428428        self.assertEquals(pyamf.has_alias(Spam), True) 
    429429 
     430    def test_required_arguments(self): 
     431        class Foo(object): 
     432            def __init__(self, bar, valid=1): 
     433                pass 
     434        self.assertRaises(TypeError, pyamf.register_class, Foo) 
     435 
     436        class Foo(object): 
     437            def __init__(self, bar, valid): 
     438                pass 
     439        self.assertRaises(TypeError, pyamf.register_class, Foo) 
     440 
     441        class Foo(object): 
     442            def __init__(self, bar=1, valid=1): 
     443                pass 
     444        pyamf.register_class(Foo) 
     445 
     446 
    430447class UnregisterClassTestCase(ClassCacheClearingTestCase): 
    431448    def test_klass(self): 
    432449        alias = pyamf.register_class(Spam, 'spam.eggs') 
  • pyamf/__init__.py

     
    361361                return self.klass.__new__(self.klass) 
    362362            elif type(self.klass) is types.ClassType: # classic class 
    363363                return util.make_classic_instance(self.klass) 
    364  
    365364            raise TypeError, 'invalid class type %r' % self.klass 
    366  
     365         
    367366        return self.klass(*args, **kwargs) 
    368367 
    369368    def __str__(self): 
     
    634633    if alias is not None and alias in CLASS_CACHE.keys(): 
    635634        raise ValueError, "alias '%s' already registered" % alias 
    636635 
     636    # Check that the constructor of the class doesn't require any additonal 
     637    # arguments. 
     638    if hasattr(klass, '__init__') and hasattr(klass.__init__, 'im_func'): 
     639        klass_func = klass.__init__.im_func 
     640        # Number of arguments - number of default values 
     641        if klass_func.func_code.co_argcount - len(klass_func.func_defaults or []) > 1: 
     642            raise TypeError("pyamf doesn't support required init arguments") 
     643 
    637644    x = ClassAlias(klass, alias, attr_func=attr_func, attrs=attrs, 
    638645        metadata=metadata) 
    639646