[zeromq-dev] CZMQ Python Bindings

Michel Pelletier pelletier.michel at gmail.com
Wed Oct 9 21:24:34 CEST 2013


Automation would be be great, and not just for Python, making the wrapper
was a bit tedious, although completely doable.  I'm surprised there isn't
something like SWIG but for libffi, where you can point a .h file and some
kind of specfile at a tool that dumps the correct bindings incantation for
various languages.  Maybe there is such a tool?  A quick google didn't
reveal much to me.

-Michel


On Wed, Oct 9, 2013 at 12:27 AM, Pieter Hintjens <ph at imatix.com> wrote:

> Hi Michel,
>
> This is great fun! I'm going to look at what you did since I'd like to
> try generating Python wrappers for our standardish C APIs (FileMQ,
> Zyre, for instance).
>
> -Pieter
>
> On Wed, Oct 9, 2013 at 4:28 AM, Michel Pelletier
> <pelletier.michel at gmail.com> wrote:
> > Wanting to know more about Python and CFFI, I decided to do a
> > straightforward wrap job for Python around the CZMQ C API.  I have it
> > reasonable complete enough to write some simple code and tests.  I've
> pushed
> > it up to github:
> >
> > https://github.com/michelp/pyczmq
> >
> > Most of the core functionality, zctx, zsocket, zsockopt, zpoller, zmsg,
> > zframe, zstr, zloop, zbeacon, zcert, zauth, are exposed as both straight
> > wrappers around the C interface as well as some namespaced functions that
> > provide a high level functional interface (eg, turning cdata char * into
> > python byte strings, etc).  For example:
> >
> >
> >     ctx = zctx.new()
> >     push = zsocket.new(ctx, zsocket.PUSH)
> >     pull = zsocket.new(ctx, zsocket.PULL)
> >     zsocket.bind(push, 'inproc://test')
> >     zsocket.connect(pull, 'inproc://test')
> >     zstr.send(push, 'foo')
> >     assert zstr.recv(pull) == 'foo'
> >     zstr.send(push, 'bar')
> >     zsocket.poll(pull, 1)
> >     assert zstr.recv_nowait(pull) == 'bar'
> >
> >
> >
> > There's also a first stab at providing an OO interface in the form of
> > Context, Socket, Beacon and Loop classes.  Here's a working example:
> >
> >     ctx = Context()
> >     pub = ctx.socket('PUB')
> >     sub = ctx.socket('SUB')
> >     sub.set_subscribe('')
> >     pub.bind('inproc://zoop')
> >     sub.connect('inproc://zoop')
> >     pub.send('foo')
> >     sub.poll(1)
> >     assert sub.recv() == 'foo'
> >
> >
> > This is a work in progress, it's useful enough now to create socket and
> > messages and send and receive data.  I'd certainly love any form of help,
> > just send me a pull request.  Featured desired are way more tests!  And
> of
> > course any missing functions that need wrapping, or new functionality.
> >
> > Thanks and enjoy,
> >
> > -Michel
> >
> > _______________________________________________
> > zeromq-dev mailing list
> > zeromq-dev at lists.zeromq.org
> > http://lists.zeromq.org/mailman/listinfo/zeromq-dev
> >
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20131009/1ab2d1f9/attachment.htm>


More information about the zeromq-dev mailing list