PyCon 2012 Sprints
Sprinting on Pyramid
Really my conference review should be taken worth a grain of salt, because I never go for the talks, it's all about the sprints. Having so thoroughly enjoyed sprinting since I came out of my shell and joined the Plone community in earnest, it's always the only thing I'm really focused on. What can I say? In this wonderful age where, through open-source communities and the recognition of the ambiguous stuff that helps them thrive, we all recognize that things like docs and diversity are as important as the quality of code or the power of features, I'm still a code monkey at heart.
Since there were no Plone sprints that I heard of or saw on the boards, I took the chance to sprint on Pyramid, part of the Pylons project and love child of repoze. I've been wanting to learn Pyramid for quite some time now since I noticed how many of my favorite Zope people have moved to Pyramid. So I went to the Pyramid room, sat down and asked what someone with plenty of zope experience could do.
The Pyramid sprinters were a great group, very welcoming and friendly. They remind me a lot of the things I most love about the Plone community. It also gave me the chance to work closely with Chris McDonough. Chris is very smart, builds great software, and is just very kind-hearted.
Here's some of the stuff I worked on:
I used this simple feature task to cut my teeth on the Pyramid development environment and tool-chain. It was the first time in a long time I worked outside a buildout environment and it made for some interesting comparisons. They keep things really simple relying only on distribute's setuptools and virtualenv.
I have to say, I still prefer working with buildout. Buildout's caching is much better than easy_install's and virtualenv so updating the environment after changes is smoother and faster. For testing against multiple Python versions and implementations, such as Jython and PyPy, Pyramid uses tox which is pretty slick and very useful. I'd love to see something like this for deploying the same buildout with different versions of Python.
This was my first time tackling Python 2 and 3 compatibility issues. I have to say it's just not as hard as I feared.
The one place where there was a lot of Python 2 and 3 compatibility pain was in the encoding of email messages. In this case, as in others I suspect, the problem was that encoding was being done all over the place in a not-very-well-architected way and the real solution was to clean things up and put in more clearly defined boundaries and interfaces.
That task would have been impossible without R. David Murray. I pestered him endlessly and he helped me learn all the deep, dark corners of the email protocols and the Python email package, both of which have considerable quirks which some would call bugs. At the end of it, I had a clear sense of all the quirks of encoding emails and all the things that the email package doesn't already do. I baked those into repoze.sendmail.encoding and added that support as a part sending mail through repoze.sendmail.
Once that was in place, finishing Python 2 and 3 compatibility was a snap.
Again, once repoze.sendmail.encoding was in-place, I just ripped all the email encoding support out of pyramid_mailer and Python 2 and 3 compatibility was a cinch.
While I had my hands in pyramid_mailer, I fixed a bug reported by Michael Merickel.
I'm not even sure what this stuff does, but Pyramid has such great test coverage, I was able to get started. I'm still waiting for feeback to see what I'm not yet understanding.
Just a simple test fixture update to cleanup output.