Skip to content
This repository has been archived by the owner on Jun 4, 2023. It is now read-only.

Releases: irmen/Pyro4

release 4.46

07 Jul 21:12
Compare
Choose a tag to compare

Compatibility issues:
The change mentioned below about @expose now being required by default requires a change in your (server-)code or configuration. Read on for details.

Using @expose(...) on a class to set the instance_mode or/and instance_creator for that
class, also exposes ALL methods of that class. That is an unintended side-effect that will be fixed
in the next Pyro version. You can already fix your code right now to prepare for this. Read on for details.

  • @Pyro4.behavior decorator added that should now be used to set instance_mode and instance_creator instead of
    using @Pyro4.expose. You can still use @expose in this release, but its arguments will be removed
    in the next Pyro version. So by then you have to have updated your code or it won't run anymore.
    The fix is simple: replace all occurences of @expose(...) where you set the instance_mode or/and instance_creator
    on your Pyro class, by @behavior(...) -- and add new @expose decorations to the class or the methods
    as required to properly expose them. Also read the next bullet.
  • Backwards incompatible behavior change: in the spirit of 'secure by default', it's now required to use @expose
    on things you want to expose via Pyro. This is because the REQUIRE_EXPOSE config item is now True by default.
    The "servers" chapter contains details about this and how you can best approach this upgrade issue.
  • blobtransfer example added.
  • improved the docs on binary data transfer a bit.
  • code now uses set literals instead of old fashioned set([...])
  • removed the way outdated 'upgrading from Pyro3' chapter from the documentation.
  • Pyro4.util.get_exposed_members now has a cache which speeds up determining object metadata enormously on subsequent connections.
  • added paragraph to server chapter in documentation about how to expose classes without changing the source code (such as 3rd party libraries)
  • added thirdpartylib example for the above

release 4.45

24 May 21:58
Compare
Choose a tag to compare
  • Dependency fix in setup/wheel/pip for selectors34 module.

release 4.44

23 May 18:59
Compare
Choose a tag to compare
  • Behavior change: when the threadpool server is used and it runs out of worker threads, clients attempting to connect
    now get a connection error telling them that the server threadpool has to be increased.
    On python 3.2 and newer a short timeout is used for the case that in the meantime a connection becomes available.
  • THREADPOOL_ALLOW_QUEUE config item added. Enables you to choose for the previous
    blocking behavior when the threadpool server can no longer accept new connections. Defaults to False.
    note: this is a temporary solution, in the next release a different threadpool implementation will be shipped
    for which this config item is no longer relevant. It will be removed again then.
  • Fixed 'malformed string' error when a Python 2 client talks to a Python 3 server;
    proxy metadata and nameserver metadata tags are no longer returned as a set but as a list.
    (This problem occurs in the serpent serializer because of a problem with the underlying ast.literal_eval function
    across different python versions)
  • improved multiplex server, now uses best available selector on your platform (kqueue, epoll, etc)
    This was done by using the 'selectors' module, on older pythons (<3.4)
    the backport 'selectors34' has been added as a new requirement.
  • added selector property on the daemon (to expose the multiplexing selector if that servertype is used).
  • Added Daemon.combine() which merges different daemons' request loops and lets you just run the 'master daemon' requestLoop
  • fixed import and test problems with IronPython (it doesn't like the dill serializer either, like pypy)
  • Improved security when comparing HMAC codes (against timing attacks)
  • added 'diffie-hellman' example to shows a way to approach server-client agreement on a shared secret key
  • a few IronPython releated changes regarding str/bytes to decrease the number of special cases

release 4.43

23 Apr 12:16
Compare
Choose a tag to compare
  • improved docs on instance modes and instance creation
  • improved cleanup of objects with instance_mode 'session', fixes possible memory leak
  • fixed float vs None bug in rare situation when connecting socket gets a retryable error

release 4.42

16 Apr 12:57
Compare
Choose a tag to compare
  • added dill serialization support (https://pypi.python.org/pypi/dill)
  • fixed dotted attribute client code in the attributes example
  • handles EINTR signal and will continue the server loop now in this case, on Python 3.4 and newer.
  • fixed async proxy calls not being done async, when metadata is used

release 4.41

22 Dec 14:57
Compare
Choose a tag to compare
  • fixed uri parsing bug in locateNS when trying to locate name server via unix domain socket
  • fixed IronPython crash with Pyro4.core.current_context
  • got rid of slots on the URI class
  • fixed output of nsc metadata string on Python 2.x
  • sock_reuse option is now default on
  • daemon now logs its pid when starting
  • poll-server error handling now reflects the select server (swallow error when shutting down)

release 4.40

08 Oct 20:40
Compare
Choose a tag to compare
  • added python 3.5 to supported versions and configs
  • support for metadata added to the name server (list of strings per registration).
    This provides a service like yellow-pages where you can query on category (for instance).
    You need to use memory or sqlite storage for this; the dbm storage doesn't support it.
  • name server also has a new method set_metadata(), to set new metadata for an existing registration
  • nsc tool has new commands to deal with metadata in the name server: setmeta, listmeta_all and listmeta_any
  • removed obsolete stdinstdout example, it depended on exposing private attributes and Pyro hasn't allowed this anymore for quite some time (4.27)
  • removed a problematic ipv6 unittest, and an often-failing workaround to determine the ipv6 address
  • added current_context.client_sock_addr containing the address of the client doing the call
  • current_context is now correct for oneway calls and async calls
  • fixed some copy methods to correctly deal with possible subclassing (Proxy)

release 4.39

21 Jul 20:13
Compare
Choose a tag to compare
  • dropped support for Python 2.6 and Python 3.2. Supported versions are now 2.7, 3.3, 3.4 and up.
  • better exception when message size exceeds 2 gigabyte limit
  • mentioned the 2 gigabyte message size limit in the docs
  • added auto retry mechanism, MAX_RETRIES config item, and autoretry example.
  • API CHANGE: the instance_creator function passed to @expose now get the class as a single parameter when invoked by Pyro
  • removed test suite dependencies on unittest2 (was used for Python 2.6)
  • greatly improved the messagebus example, it now contains a persistent storage as well
  • can now deserialize sqlite3 exceptions as well (without the need of registering custom class serializers)
  • serialized proxies now gets the timeout and retries properties from the active config settings rather than from the serialized data
  • new MessageTooLargeError when the max message size is exceeded (subclesses ProtocolError, which was the old error thrown in this case)

release 4.38

27 Jun 13:09
Compare
Choose a tag to compare

NOTE The below mentioned wire protocol change is backwards-incompatible. You have to update all your pyro libraries on clients and servers. (And Pyrolite libraries if you use them too)

  • wire protocol version changed to 48 (new connection logic).
  • changed the initial connection handshake protocol. Proxy and daemon now perform a handshake by exchanging data.
    You can set your own data on the proxy attribute _pyroHandshake. You can override a proxy method _pyroValidateHandshake
    and a daemon method validateHandshake to customize/validate the connection setup.
  • drastically reduced the overhead of creating a new proxy connection by piggybacking the metadata on the
    connection response (this avoids a separate remote call to get_metadata). New proxy connections are ~50% faster.
  • added Daemon.clientDisconnect() as a hook for when clients disconnect (Daemon.validateHandshake can
    be used as the hook to handle new connections)
  • you can now register a class on the Daemon instead of an object, and define instancing strategy: singleton, session, percall
  • you can provide an optional factory method to create instances of your pyro server class when needed according to the instancing_strategy
  • added handshake, instancemode and usersession examples
  • added distributed-computing2 example
  • added messagebus example
  • fixed callcontext example daemon to actually return a custom annotation
  • fixed benchmark/connections example
  • httpgateway recognises X-Pyro-Correlation-Id http header on requests
  • new mailing list address ([email protected]). Bye bye Sourceforge.

release 4.37

08 Jun 20:15
Compare
Choose a tag to compare
  • added Pyro4.current_context global (thread-local) that contains various information
    about the client and the request
  • added correlation id via the current_context so you can track what
    requests/responses belong together
  • fixed hmac calculation on messages with more than one annotation
  • proxy and daemon can now add custom annotations to messages
  • httpgateway also sets correlation id and returns it to the browser via
    X-Pyro-Correlation-Id http header
  • added callcontext example
  • fixed error response seq nr and serializer id in case of error during the parsing of
    a message, previously they were bogus values