Skip to content

connect/listen and publish/subscribe/unsubscribe with deferred#14

Open
oubiwann wants to merge 17 commits intosmira:masterfrom
oubiwann-unsupported:connect-with-deferred
Open

connect/listen and publish/subscribe/unsubscribe with deferred#14
oubiwann wants to merge 17 commits intosmira:masterfrom
oubiwann-unsupported:connect-with-deferred

Conversation

@oubiwann
Copy link
Copy Markdown
Collaborator

This is the beginning of some work that I'll be doing to bring the APIs in txZMQ more inline with the APIs in twisted.internet.endpoints (see http://twistedmatrix.com/documents/current/core/howto/endpoints.html); as of Twisted 10, this is the recommended mechanism for connected resources in Twisted.

I've got a blueprint up on Launchpad that lists the related work items:
https://blueprints.launchpad.net/txzmq/+spec/twisted-api-symmetry

All this being said, if any of these changes make folks uncomfortable, feel free to reject them. No pressure :-)

Also, if folks want me to implement backwards compatibility for this change, I can do that (or put it in a separate branch, if you prefer).

Without further ado, here is what has changed in this branch:

  • connection no longer happens with object instantiation
  • instead, one has to call "connect" (for clients) or "listen" (for servers)
  • ZmqConection.connect and .listen return deferreds which can now be used for running callbacks
  • these methods are what now receives the ZmqFactory instance (like Twisted Endpoints)
  • ZmqPubConnection.publish and ZmqSubConnection.subscribe, .unsubscribe now return deferreds
  • socket creation logic now happens in its own (private) method
  • factory set-up now happens in _connectOrBind (since this is where the meat of the connection logic actually happens)

There's a caveat here, though: as indicated in the docstrings, the use of deferreds here is an artifice; they're providing API compatibility with Twisted-proper (the real async work is happening in ZMQ).

Duncan McGreggor added 17 commits January 10, 2012 14:42
 * removed the implicit connect or bind in the constructor
 * added a listen method (to be called by servers)
 * added a connect method (to be called by clients)

There are new private methods as well; these were created to make the code
easier to test and easier to read.

This change also updates the example (and moves it to a new home) as well as
the unit tests.
* Cleaned up example a little more.
…ses.

* Added new pubsub examples that make use of the new deferred-using methods.
* Did a little more cleanup on the old pubsub example.
* Added a base module for pubsub examples (for shared code that was distracting
from the essesnce of the examples).
…ts and

servers.
* Cleaned up pyflakes in the examples.
* Tweaked the phrasing in the README.
* Added docstrings explaining the use of deferreds.
* Added try/except/else blocks around connect and listen code.
* Added success and fail unit tests for connect and listen.
…il if an

exception is raised.
* Added unit tests (passing and failing) for the all the methods that have been
updated (or created) to return deferreds.
* Added more custom txZMQ exceptions.
…ome errors

that cropped up when running the tests in a virtual environment..
* Refactored code out of error checking into a new utils module.
* Added the examples directory to the "check" target.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant