[pypy-svn] r39737 - in pypy/dist/pypy/lib/distributed: . test
fijal at codespeak.net
fijal at codespeak.net
Fri Mar 2 18:30:40 CET 2007
Author: fijal
Date: Fri Mar 2 18:30:38 2007
New Revision: 39737
Modified:
pypy/dist/pypy/lib/distributed/objkeeper.py
pypy/dist/pypy/lib/distributed/protocol.py
pypy/dist/pypy/lib/distributed/test/test_distributed.py
Log:
Remote type instantiation works!
Modified: pypy/dist/pypy/lib/distributed/objkeeper.py
==============================================================================
--- pypy/dist/pypy/lib/distributed/objkeeper.py (original)
+++ pypy/dist/pypy/lib/distributed/objkeeper.py Fri Mar 2 18:30:38 2007
@@ -14,12 +14,15 @@
class RemoteBase(object):
pass
+from types import FunctionType
+
class ObjKeeper(object):
def __init__(self, exported_names = {}):
self.exported_objects = [] # list of object that we've exported outside
self.exported_names = exported_names # dictionary of visible objects
self.exported_types = {} # dict of exported types
self.remote_types = {}
+ self.reverse_remote_types = {}
self.remote_objects = {}
self.exported_types_id = 0 # unique id of exported types
self.exported_types_reverse = {} # reverse dict of exported types
@@ -62,12 +65,16 @@
if '__doc__' in _dict:
d['__doc__'] = protocol.unwrap(_dict['__doc__'])
tp = type(_name, (RemoteBase,), d)
- tp.__metaremote__ = type_id
# Make sure we cannot instantiate the remote type
self.remote_types[type_id] = tp
+ self.reverse_remote_types[tp] = type_id
for key, value in _dict.items():
if key != '__doc__':
- setattr(tp, key, protocol.unwrap(value))
+ v = protocol.unwrap(value)
+ if isinstance(v, FunctionType):
+ setattr(tp, key, staticmethod(v))
+ else:
+ setattr(tp, key, v)
#elif key == '__new__':
# import pdb
# pdb.set_trace()
Modified: pypy/dist/pypy/lib/distributed/protocol.py
==============================================================================
--- pypy/dist/pypy/lib/distributed/protocol.py (original)
+++ pypy/dist/pypy/lib/distributed/protocol.py Fri Mar 2 18:30:38 2007
@@ -132,10 +132,8 @@
id = self.keeper.register_object(obj)
return (self.type_letters[tp], id)
elif tp is type:
- if isinstance(obj, RemoteBase):
- import pdb
- pdb.set_trace()
- return "reg", obj.__metaremote__
+ if issubclass(obj, RemoteBase):
+ return "reg", self.keeper.reverse_remote_types[obj]
try:
return self.type_letters[tp], self.type_letters[obj]
except KeyError:
@@ -379,12 +377,12 @@
remote_protocol = RemoteProtocol(inp.send, out.receive, exported_names)
t = tasklet(remote_loop)(remote_protocol)
- def send_trace(data):
- print "Sending %s" % (data,)
- out.send(data)
+ #def send_trace(data):
+ # print "Sending %s" % (data,)
+ # out.send(data)
- def receive_trace():
- data = inp.receive()
- print "Received %s" % (data,)
- return data
- return RemoteProtocol(send_trace, receive_trace)
+ #def receive_trace():
+ # data = inp.receive()
+ # print "Received %s" % (data,)
+ # return data
+ return RemoteProtocol(out.send, inp.receive)
Modified: pypy/dist/pypy/lib/distributed/test/test_distributed.py
==============================================================================
--- pypy/dist/pypy/lib/distributed/test/test_distributed.py (original)
+++ pypy/dist/pypy/lib/distributed/test/test_distributed.py Fri Mar 2 18:30:38 2007
@@ -213,10 +213,16 @@
assert res == 8
def test_instantiate_remote_type(self):
- skip("Doesn't work yet")
+ #skip("Doesn't work yet")
class C:
- pass
+ def __init__(self, y):
+ self.y = y
+
+ def x(self):
+ return self.y
protocol = self.test_env({'C':C})
xC = protocol.get_remote('C')
- xC()
+ res = xC(3).x()
+ assert res == 3
+
More information about the Pypy-commit
mailing list