11. Pyro Change Log
(most recent entries at the end)
Pyro versions before 2.0 can be found in the archive.
Pyro 2.0
- NEW MAJOR VERSION. Because of all new features mentioned below.
- True mobile agent support! Pyro can now automatically push Python code
across the network to make mobile agents possible. See the "agent2" example.
- Persistent Naming Service. See relevant documentation! (the new name server chapter)
- Added
rns
script; this script restarts the NS automatically after a shutdown or crash.
- Documentation updates (examples + new name server chapter + feature chapter contains much more info).
- Changed old persistence code in
core.py
.
- Added
PersistentNameServer
class in naming.py
, which implements a NameServer that uses the hierarchical file system on your disk to store its database in a persistent way.
- NameServer now always returns
PyroURI
instances from resolve
. In the past it could also return URIs as strings.
- It's no longer possible to delete the root group from the NS.
- Removed Python 1.5.1 workarounds ('extra' dir with socketserver module, abspath workaround in config module). Please upgrade to at least Python 1.5.2.
- Socket code no longer throws
socket.error
but Pyro.errors.SocketClosedError
exceptions.
PYROAdapter
has new rebindURI
method to support the new auto reconnect/rebind feature when a network problem occurs.
PYROAdapter
now raises a ProtocolError
when it receives a request for an unknown object ID.
ServerFullError
exception has been removed!!! You must change your code that used it. It has been replaced by a more general ConnectionDeniedError
exception.
- Generalized new connections check: the daemon now has a new connections validator, which can be replaced by a custom version. The default version implements the old behaviour; checking if the number of connections is less than the maximum amount configured in PYRO_MAXCONNECTIONS. See relevant documentation about the validator.
- Added "denyhosts" example to show custom connection validator feature.
- Added "autoreconnect" example to show auto reconnect feature.
- Name Server now has security plugins; one for validating broadcast requests, and one new connection validator as described above. See relevant docs.
- Added "NS_sec_plugins" example to show the NS security plugin feature.
- Added "agent2" example with true mobile agent code.
- Added
PYRO_MOBILE_CODE
config item to enable mobile code.
- Added
PYRO_DNS_URI
config item to use symbolic DNS hostnames
in URIs instead of fixed IP addresses
- Added support for mobile code in
Pyro.core.ObjBase
.
- Performance tuning in
core.py
; PROTOCOL IS INCOMPATIBLE with previous version.
- Slight addition to
Pyro.core.Daemon
: extra publishhost
argument to use in case of firewall situation. See Features chapter.
Pyro 2.1
- Pyro is now under the GNU LGPL. See "LICENSE".
- Fixed spelling errors in the documentation.
- Removed some config items to make things less complex. You have to
remove them from your Pyro.conf files too:
- Removed config item
PYRO_NS_NAME
; it is now hardcoded and available (if needed) as Pyro.naming.NS_NAME
.
- Removed config item
PYRO_NS_GROUPSEP
; it's now hardcoded as '.'.
- Removed config item
PYRO_NS_ROOTCHAR
; it's now hardcoded as ':'.
- Added the Event Service (
Pyro.EventService.*
). See the chapter on Pyro Services. There is an example too: "stockquotes".
- Fixed the "naming" example.
- Translated the TODO list from Dutch to English, so everybody can read it now.
- Enhanced
DynamicProxy
; it can now be used as a key in a dictionary. This was needed for the Event Servive.
Pyro 2.2
- GUIDs are now constructed using the Python process ID (PID) too. This gives extra safety
against double GUIDs possibly generated by multiple python processes on the same machine.
- Renamed
SocketClosedException
to ConnectionClosedException
. The new name
is more independent of the actual implementation.
- Removed some references to the
socket
module and socket.error
.
This makes the rest of the code more independent of the actual protocol implementation.
A future Pyro release may contain even more changes to fully support multiple protocol implementations (not only sockets).
- Documented the
pickle
trojan vulnerability in the 'Features and Guidelines' chapter.
- Included setup script by Alexandre Fayolle.
Pyro 2.3
- Pyro now requires at least Python 2.0.1, but Python 2.1.1 or later is recommended. Anything older than Python 2.0.1 is no longer supported.
- Added
PYRO_NS_HOSTNAME
config item, for direct hostname lookup when the NS can't be found using broadcast.
- Documentation and examples changed to reflect the above enhancement.
- Grand renaming: Naming Service is now called Name Server everywhere. Event Service stays.
- Logger now uses YYYY-MM-DD hh:mm:ss date/time format.
- Event Service improved, but it now requires threads to work. Major problems
have been fixed regarding re-subscribing and unsubscribing while processing events.
- Improved rich comparison and hashing of proxies. They can now be a key in a dictionary,
and proxies that refer to the same object GUID, compare the same.
Sadly, this largely breaks the hashing and rich comparison possibility of the remote Pyro objects. You're not
comparing those objects, you're comparing the proxies... The hashing and rich comparison didn't work for remote objects in
Pyro 2.2 too (same reasons) so this is not too bad.
- Dramatically improved the speed when sending large messages: the sock_recv code now uses
a list of chunks and joins them at the end, instead of string concatenation.
You will see the difference in the hugetransfer example: the message size has been
increased tenfold, but the time it takes is almost unchanged :-)
Pyro 2.4
- Preliminary Jython support, workarounds/hacks to fill in for missing features such as
select
, errno
and getpid
.
Only PYRO clients in Jython currently, because servers need select
!
- Fixed docs about removed config items in Pyro 2.1
- Fixed time format string in logger, now the loggings includes the time again on Windows
- Fixed indentation errors in quickstart example's
remote.py
and it
should work again on Windows (signals).
- Fixed the log file configuration options, they now work as documented. When changing
PYRO_LOGFILE
or PYRO_USER_LOGFILE
, all following log messages
are written to the new location. If the filename isn't an absolute path, it will be made
relative to the current PYRO_STORAGE
location.
- Slightly clearified the docs on the
PYRO_STORAGE
config item.
- Updated the example chapter to use Pyro 2.4.
- One additional small change to the proxy code:
__nonzero__
has been defined in the proxy.
- Pyroc now also generates proxy code with the various comparison and hashing functions.
- Oneway invocations support added. See the chapter on features and guidelines.
- New event service example "countingcars" that shows a client that changes its topic subscriptions.
- New "callback" example that shows callback invocations to clients and the new Oneway call.
- Event service now sets correct (publish) timestamps on events, also with slow clients.
- Event service uses oneway invocations to publish the events and to decouple from slow or buggy clients.
They no longer stall the publication thread in the ES.
- Documentation updates on the new features.
Pyro 2.5
- Slight change in names in the example chapter to avoid ambiguity between 'test' object and 'test' module.
- Rewrote PYRO_STORAGE directory checking to something much simpler. Should work on all platforms now.
- Navbar also at bottom of documentation pages for easier navigation.
- New config option
PYRO_CHECKSUM
to enable a quick Adler32 checksum on the messages.
(Why Adler32 and not CRC32? Adler is faster, and we need speed).
- Now using regular expression to parse Pyro URI strings.
- New URI
PYRONAME://nshostname:port/objectname
for
very easy automatic object lookup. nshostname and port are optional.
- New URI
PYROLOC://hostname:port/objectname
for
very easy object binding without using a Name Server. port is optional.
- The Pyro Daemon itself is now a Pyro object too. This was needed for the PYROLOC: resolving, but
it might prove valuable too in a later version when you might want to access it to get information
on server objects, for instance. The Daemon has a fixed builtin GUID,
Pyro.core.INTERNAL_DAEMON_GUID
. I'm not sure if this feature stays,
because it might also be a huge security/stability hole. (please advise?)
- Improved documentation here and there.
- The setup.py script no longer overwrites system tools blindly, it warns you of this issue and
it asks you to specify the path were the Pyro scripts have to be installed.
Pyro 2.6
- Fixed mobile code (agents). Internal exception caused socket to shutdown, causing connection lost error.
- Minor changes to the docs, documented the mobile code module restriction, a bit more details on auto rebind.
- Fixes to some small and a few nasty bugs that had crept in. Some bugs detected by pychecker, yay
- Moved constants to new module
Pyro.constants
to avoid import conflicts.
- Renamed and moved the internal Pyro names:
Pyro.constants.NAMESERVER_NAME
and Pyro.constants.EVENTSERVER_NAME
.
(previously NS_NAME
and EVENTSERVICE_NAME
)
- Fixed
StringTypes
that was a Python 2.2 dependency.
- Event Server clients will now correctly terminate (the request loop no longer hangs)
Pyro 2.7
- Pyro is close to a major new release (3.0). It appears that 2.x has no more big issues.
- Mobile code improved: can now transmit modules from packages! Agent2 example changed to reflect this.
- Added two more examples: chatbox with and without using the Event Server.
- Finally documented the Name Server Pyro object methods.
- Minor other changes and additions to the docs.
- Fixed some leaks when handling exception tracebacks.
- Added logic to transfer remote exception tracebacks to clients and to print them on the client.
See
Pyro.util.getPyroTraceback
.
- The
NameServerLocator
no longer performs a broadcast lookup
if the hostname is specified in the getNS
call,
or if the PYRO_NS_HOSTNAME
config item is specified.
- Added host and port options to Event Server start script.
- Event Server now has nice error handling and cleanup, like the Name Server.
- No longer does SO_REUSEADDR on sockets when running under Windows, because
Windows has a quirk with this that allows multiple processes to listen on the same socket.
- Fixed import Pyro.protocol error by moving RIF_* flags to constants module.
- Completed chapter 6 - implementation. Not as much info as I would like, but
it's enough to get a quick idea of how Pyro's implemented.
- Compressed the example chapter to make it easier to understand.
- Changed preferred way of dealing with the daemon's request loop to
requestLoop
,
instead of handleRequests
(Don't worry, the latter still exists!).
Updated most examples.
- Fixed ^C handling of chatbox examples.
- Fixed bug when both compression and checksumming were enabled.
- Setup script should work again under Win98, also, entering no path for the location
for the script files takes the distutils default path.
- Fixed old bug in pyroc generated proxy code (method names for remote attribute access were wrong)
- Added agent docs on module dependencies: imports of other unknown modules don't work in agents.