Changeset 1669

Show
Ignore:
Timestamp:
09/13/08 22:15:23 (3 months ago)
Author:
nick
Message:

Merged: source:pyamf/branches/adapter-helper-350

Fixes: #350
Author: nick
Reviewer: thijs

Location:
pyamf/trunk
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • pyamf/trunk

    • Property svn:mergeinfo
      •  

        old new  
         1/pyamf/branches/adapter-helper-350:1638-1668 
        12/pyamf/branches/class-def-ref-341:1594-1597 
        23/pyamf/branches/class-init-args-322:1527-1528,1530-1532 
  • pyamf/trunk/pyamf/adapters/__init__.py

    r1416 r1669  
    4949 
    5050    adapters_registered = True 
     51 
     52def register_adapter(mod, func): 
     53    """ 
     54    Registers a callable to be executed when a module is imported. If the 
     55    module already exists then the callable will be executed immediately. 
     56    You can register the same module multiple times, the callables will be 
     57    executed in the order they were registered. The root module must exist 
     58    (i.e. be importable) otherwise an C{ImportError} will be thrown 
     59 
     60    @param mod: The fully qualified module string, as used in the imports 
     61        statement. E.g. 'foo.bar.baz'. The string must map to a module 
     62        otherwise the callable will not fire. 
     63    @type mod: L{string} 
     64    @param func: The function to call when C{mod} is imported. This function 
     65        must take one arg, the newly imported C{module} object. 
     66    @param callable. 
     67    """ 
     68    if not callable(func): 
     69        raise TypeError('func must be callable') 
     70 
     71    imports.whenImported(str(mod), func) 
  • pyamf/trunk/pyamf/amf0.py

    r1662 r1669  
    543543                raise 
    544544            except: 
    545                 raise pyamf.EncodeError("Unable to encode '%r'" % (data,)) 
     545                #raise pyamf.EncodeError("Unable to encode '%r'" % (data,)) 
     546                raise 
    546547 
    547548    def writeNull(self, n): 
  • pyamf/trunk/pyamf/amf3.py

    r1662 r1669  
    12521252                raise 
    12531253            except: 
     1254                raise 
    12541255                raise pyamf.EncodeError("Unable to encode '%r'" % (data,)) 
    12551256 
  • pyamf/trunk/pyamf/tests/test_adapters.py

    r1416 r1669  
    88""" 
    99 
    10 import unittest 
     10import unittest, os, sys 
     11 
     12from pyamf import adapters 
     13from pyamf.tests import util 
     14from pyamf.tests.test_imports import PostLoadHookClearingTestCase 
     15 
     16class AdapterHelperTestCase(PostLoadHookClearingTestCase): 
     17    def setUp(self): 
     18        PostLoadHookClearingTestCase.setUp(self) 
     19 
     20        self.old_env = os.environ.copy() 
     21        self.mods = sys.modules.copy() 
     22 
     23        self.path = os.path.join(os.path.dirname(__file__), 'imports') 
     24        sys.path.append(self.path) 
     25 
     26    def tearDown(self): 
     27        PostLoadHookClearingTestCase.tearDown(self) 
     28 
     29        util.replace_dict(os.environ, self.old_env) 
     30        util.replace_dict(sys.modules, self.mods) 
     31        sys.path.remove(self.path) 
     32 
     33    def test_basic(self): 
     34        class Foo(object): 
     35            def __call__(self, *args, **kwargs): 
     36                pass 
     37 
     38        def bar(*args, **kargs): 
     39            pass 
     40 
     41        self.assertRaises(TypeError, adapters.register_adapter, 'foo', 1) 
     42        self.assertRaises(TypeError, adapters.register_adapter, 'foo', 'asdf') 
     43        adapters.register_adapter('foo', Foo()) 
     44        adapters.register_adapter('foo', bar) 
     45        adapters.register_adapter('foo', lambda x: x) 
     46 
     47    def test_import(self): 
     48        self.imported = False 
     49 
     50        def x(mod): 
     51            self.imported = True 
     52            self.foo = mod 
     53 
     54        adapters.register_adapter('foo', x) 
     55 
     56        import foo 
     57 
     58        self.assertTrue(self.imported) 
     59        self.assertEquals(self.foo, foo) 
     60 
     61    def test_root_import_fail(self): 
     62        self.assertRaises(ImportError, adapters.register_adapter, '__xyz', lambda x: x) 
    1163 
    1264def suite(): 
     
    1567 
    1668    suite = unittest.TestSuite() 
     69 
     70    suite.addTest(unittest.makeSuite(AdapterHelperTestCase)) 
    1771 
    1872    for testcase in glob(os.path.join(os.path.dirname(__file__), 'adapters', 'test_*.py')):