Pyro 3.10 is the current release
All users of 3.9 please upgrade, but beware that:
- if you use SSL, you will have to change your code to adapt for the SSL changes in 3.10 (should be minor)
- 3.10 cannot talk to older versions because the wire protocol has been changed.
Find it on Pyro's SF project page if you don't pull the release from CVS, or via PyPI / easy_install.
The changes since the previous release can be found in the 'changes' chapter in the manual.
CHANGES IN 3.11-cvs
- uses java5 UUID instead of rmi vmid, if available, in Jython
- fixed java import for Jython standalone
- formatTraceback() prints locals again on recent Python versions
- scripts are now python scripts instead of shell scripts (not on Windows). This should be helpful for virtualenv users. The pyro-rns script is gone.
- added a connections test to the benchmark example
TO DO FOR 3.11
- Once 3.11 is ready for release: update PyPI using 'python setup.py register'
Pyro's old idea list
This is my list of old ideas to add/change to Pyro. I've removed a load of stuff that will never get into Pyro v3, or that has already been realized in Pyro v4.
- check: why did the joke example freeze when doing python -c "import server" instead of python server.py (the old version, where everything was in the main scope instead of a function)
- Jython server is not really stable, it crashes on MacOS X (connection aborted). Maybe the following item will fix it (poll loop):
- change select calls to poll if available (and test on jython/ipy!) - see Pyro v4
Pyro-over-SSH (not SSL) using Paramiko
- NS should be able to run in SSL mode too
implement PYRONAMESSL protocol? (see PYROLOCSSL)
problems when PyroExceptionCapsule is made a new style class: it cannot be thrown as an exception if it doesn't inherit from object. The callback example fails now. It still fails to rethrow the exception properly if we add a new capsule that does inherit from Exception. Odd. Can be fixed with inheriting from Exception and adding reduce() in it for proper pickling?
- initTLS needs to change to be more useful than just a init function. Pass an object with a callback method so that you can associate
- data with it as well, and make it customizable for every Pyro object instead of 1 global thing for the whole daemon.
move caller from TLS to someplace on the objBase class instead (but how can delegate get it then?) - then get rid of TLS usage in Pyro
- Event server producer/consumer don't need to copy the proxy all the time because nowadays proxies contain thread locking
- improve daemon's object implementation map, its getRegistered method, and !ResolvePYROLOC (this one loops through the map in O(N) complexity .... I want O(1)
Callbacks: when registering a callback object *once*, deadlock may occur if the objects enter a 'conversation'. For instance: if A calls B, and B calls back to A trough a callback object, and then A tries to call B again --> deadlock because B is still waiting for A to answer the callback invocation, not invoking a method again! When A does not call B again but just answers the callback invocation, things work out fine. See bounce2 code in the examples. Solution???: Pyro must detect that the connection is still in use (waiting for reply) and it should open a new connection for the new method call.
- clean way to have server hooks for client connects and disconnects (latter can be used for cleanups!)
- transient object cleanups; only clean when client disconnects?
Reaping transient objects doesn't close any socket connections that may still be active to these objects. They'll fail with ProtocolError 'unknown object ID' if they're accessed again. This is because sockets and threads on the server are not necessarily associated with a unique object, so they have to remain active. (Once the client closes the connection due to some error, the server side socket and thread will be released).
Still ongoing SSL/M2Crypto issues: (tested against M2Crypto 0.19.1 from http://chandlerproject.org/Projects/MeTooCrypto) These issues are in M2crypto itself, there's nothing I can do about it except writing workarounds if possible:
- ssl socket recv() doesn't support extra parameters such as MSG_WAITALL. So _recv_msg() in protocol.py has to specialcase this for ssl sockets
m2crypto ssl sockets return None on recv() when socket.setdefaulttimeout() has been set, this causes ConnectionClosedError. Also see this message.
select doesn't work on M2Crypto's SSL sockets if there are still bytes pending. (it doesn't return the socket)
