Changeset 1529

Show
Ignore:
Timestamp:
07/14/08 14:19:26 (5 months ago)
Author:
nick
Message:

Merged source:pyamf/branches/class-init-args-322

Fixes: #322
Author: mvtellingen
Reviewer: nick

Location:
pyamf/trunk
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • pyamf/trunk

    • Property svn:mergeinfo
      •  

        old new  
        1 /pyamf/branches/remote-object-async-message-292:1512-1521 
         1/pyamf/branches/class-init-args-322:1527-1528 
         2/pyamf/trunk:1525-1526 
  • pyamf/trunk/pyamf/__init__.py

    r1508 r1529  
    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 
     
    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) 
  • pyamf/trunk/pyamf/tests/test_basic.py

    r1416 r1529  
    427427 
    428428        self.assertEquals(pyamf.has_alias(Spam), True) 
     429 
     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 
    429446 
    430447class UnregisterClassTestCase(ClassCacheClearingTestCase):