python-fibers 1.0.0 released

Yeah, it must be 1.0.0 release week!

I’m happy to announce python-fibers 1.0.0! Fibers are cooperative microthreads for Python, a project I started about a couple of years ago. Head here for the initial project annoucement and rationale. (yes, I can hear you thinking “why didn’t he use greenlet?!”)

There are no API changes in this release, and since it has been stable so far I thought it it’s fair to call it a 1.0.

This release steps up the CI game by adding AppVeyor integration, and thanks to it we have binary Python wheels for Python 2.7, 3.3 and 3.4 on PyPI!

As usual, the code is available on GitHub and documentation on RTD.



pycares 1.0.0 released

Long time no blog!

Today I’m happy to announce pycares 1.0.0 was just released. pycares is a Python library which wrapps the c-ares C library, providing asynchronous DNS resolution capability to different applications.

The full changelog can be checked here, but these are the main highlights:

  • Return nametuple-like objects for all query types
  • Return TTL information
  • Dropped support for old Python versions
  • AppVeyor CI integration
  • Binary wheels available for 32 and 64 bit Windows (thanks AppVeyor!)

As usual, the code is available on GitHub and the documentation is here.

Happy querying!



Announcing the Open Household Router Contraption

It’s with great pleasure that today, the day when OpenBSD 5.7 was released, I can announce OpenHRC: Open Household Router Contraption.

OpenHRC is a project Iñigo and yours truly did in our spare time, in order to replace the (crappy) router our Internet provider gave us with something more robust and OpenBSD based.

We chose the PC Engines APU as our hardware platform, but any device with at least 2 network interfaces will do. OpenHRC uses Ansible to configure the basic OpenBSD installation and enable several services, configured with sane defaults:

  • Local NTP server
  • DHCP server
  • Firewall
  • Local caching DNS resolver

This is just the beginning, we will be adding more features shortly, but we couldn’t pass on making our first release the same day OpenBSD 5.7 (which we have been testing for some time) is released.

Check out the installation video below, and head over to GitHub for the source code. Happy routing!


FOSDEM: ready fuels!

Yes, it’s that time of the year again. The week which leads to one of my favorite conferences: FOSDEM. I’ve been attending for 4 or 5 years now and I love it. There is so much going on it even get overwhelming at times! It’s great to just hop into a random room and listen to a great talk, my brain becomes a sponge throughout the weekend 🙂

This year I’ll be giving a talk at the lightning talks track and another talk at the Python devroom. As usual, I’m super excited.


See you there?

pyuv on wheels!

If you are a Python user which happens to use Windows every now and then you probably also suffer when installing (or at least trying to) Python packages which need to be compiled. Python wheels really help here, as they ease the installation of binary packages, and even make the installation of non-binary packages faster.

Long time pyuv contributor Marc Schlaich has recently began to provide these wheels for both 32 and 64 Windows, for all supported Python versions: 2.7, 3.3 and 3.4. Wheels for pyuv 1.0.2 have already been uploaded to PyPI, you can check how to install Python wheels here.

Thanks a lot for your contributions Marc!


pyuv 1.0.0 released!

In case you missed the news, libuv 1.0.0 was released not long ago, so now it’s time for pyuv to hit 1.0.0.

Hitting 1.0.0 means the API will remain backwards compatible throughout the 1.x branch. But this came at a cost: pyuv 1.0.0 introduced several backwards incompatible API changes, some coming from changes in libuv itself, and some others to (hopefully) improve pyuv itself.

Here is the full changelog.

As usual, you can download pyuv from PyPI, and check the documentation here.

“So, what now?” I hear you say. Since pyuv is currently feature-complete with regards to libuv, adding CFFI bindings to pyuv will probably be the next thing I’ll tackle. You can follow the discussion here. A user already started, and I look forward to joining forces and integrating the work 🙂

New pyuv stable and pre releases

Took a while to get these together, mainly because I’m spending quite some time on libuv itself lately. In case you didn’t know libuv 1.0.0 is around the corner, yesterday libuv 1.0.0-rc2 was released, check it out!

Back to pyuv, I’m pleased to announce pyuv version 0.10.12, which a maintenance release for the v0.10 series. In addition, I’m releasing pyuv 1.0.0.dev1, the first development release in the v1.x series of pyuv (which bundles libuv 1.0.0-rc2).



Python, do you even async?

Tonight I had the opportunity of speaking at the DomCode meetup in Utrecht. I gave a presentation titled “Python, do you even async?” where I gave an overview on the different ways to do asynchronous I/O in Python, focusing on asyncio for the most part. Here are the slides for those interested:


I had a blast, the venue was great and I got to talk to some great people, I hope to be back!

Thanks a lot to the organizers and App Annie for hosting us and providing the pizza and drinks!


erequests 0.4.0 released!

A new version of ERequests, the library that makes it easy to use Requests and Eventlet has just been released!

The API has been overhauled in order to provide 2 different ways of doing things:

  • A synchronous API, which will spawn a green thread and wait for it for every request sent this way
  • An asynchronous API, which just prepares the requests, allowing the user to throttle them with map or imap

Another important improvement is that when sending requests with map/imap, if one of them fails with an error, the exception object is returned, instead of raising it and stopping the process in the middle.

Here is an example script showing both APIs:

Last but not least, I’d like to thank Juan Riaza for his help in designing the API and adapting the tests. 🙂

You can install erequests easily from PyPI: