def test_proxy_get(self): from __pypy__ import tproxy, get_tproxy_controller l = [1,2,3] def f(name, *args, **kwargs): return getattr(l, name)(*args, **kwargs) lst = tproxy(list, f) assert get_tproxy_controller(lst) is f
def test_proxy_get(self): from __pypy__ import tproxy, get_tproxy_controller class A(object): pass def f(name, *args, **kwargs): pass lst = tproxy(A, f) assert get_tproxy_controller(lst) is f
def wrap(self, obj): """ Wrap an object as sth prepared for sending """ def is_element(x, iterable): try: return x in iterable except (TypeError, ValueError): return False tp = type(obj) ctrl = get_tproxy_controller(obj) if ctrl: return "tp", self.keeper.get_remote_object(ctrl) elif obj is None: return self.type_letters[tp] elif tp in self.immutable_primitives: # simple, immutable object, just copy return (self.type_letters[tp], obj) elif hasattr(obj, '__class__') and obj.__class__ in self.exc_dir: return (self.type_letters[Exception], (self.exc_dir[obj.__class__], \ self.wrap(obj.args))) elif is_element(obj, self.exc_dir): # weird hashing problems return (self.type_letters[exceptions], self.exc_dir[obj]) elif tp is tuple: # we just pack all of the items return ('t', tuple([self.wrap(elem) for elem in obj])) elif tp in self.mutable_primitives: id = self.keeper.register_object(obj) return (self.type_letters[tp], id) elif tp is type: try: return "reg", self.keeper.reverse_remote_types[obj] except KeyError: pass try: return self.type_letters[tp], self.type_letters[obj] except KeyError: id = self.register_type(obj) return (self.type_letters[tp], id) elif tp is types.MethodType: w_class = self.wrap(obj.im_class) w_func = self.wrap(obj.im_func) w_self = self.wrap(obj.im_self) return (self.type_letters[tp], (w_class, \ self.wrap(obj.im_func.func_name), w_func, w_self)) else: id = self.keeper.register_object(obj) w_tp = self.wrap(tp) return ("cus", (w_tp, id))