<?xml version='1.0' encoding='UTF-8'?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://www.rpatterson.net/</id>
  <title>Ross Patterson's Blog - Posts tagged repoze</title>
  <updated>2025-07-14T00:00:49.565390+00:00</updated>
  <link href="https://www.rpatterson.net/"/>
  <link href="https://www.rpatterson.net/blog/tag/repoze/atom.xml" rel="self"/>
  <generator uri="https://ablog.readthedocs.io/" version="0.11.12">ABlog</generator>
  <entry>
    <id>https://www.rpatterson.net/blog/pycon-2012-sprints/</id>
    <title>PyCon 2012 Sprints</title>
    <updated>2012-03-16T00:00:00+00:00</updated>
    <author>
      <name>Ross Patterson</name>
    </author>
    <content type="html">&lt;section id="pycon-2012-sprints"&gt;

&lt;blockquote&gt;
&lt;div&gt;&lt;p&gt;Sprinting after PyCon and my first time working with and contributing to Pyramid.&lt;/p&gt;
&lt;/div&gt;&lt;/blockquote&gt;
&lt;section id="sprinting-on-pyramid"&gt;
&lt;h2&gt;Sprinting on Pyramid&lt;/h2&gt;
&lt;p&gt;Really my conference review should be taken worth a grain of salt,
because I never go for the talks, it’s all about &lt;a class="reference external" href="https://us.pycon.org/2012/community/sprints/projects/"&gt;the sprints&lt;/a&gt;.  Having so
thoroughly enjoyed sprinting since I came out of my shell and joined
the &lt;a class="reference external" href="http://plone.org"&gt;Plone&lt;/a&gt; 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.&lt;/p&gt;
&lt;p&gt;Since there were no Plone sprints that I heard of or saw on the
boards, I took the chance to sprint on &lt;a class="reference external" href="http://www.pylonsproject.org/projects/pyramid/about"&gt;Pyramid&lt;/a&gt;, part of the
&lt;a class="reference external" href="http://www.pylonsproject.org/"&gt;Pylons&lt;/a&gt; project and love child of
&lt;a class="reference external" href="http://repoze.org/"&gt;repoze&lt;/a&gt;.  I’ve been wanting to learn Pyramid
for quite some time now since I noticed how many of my favorite &lt;a class="reference external" href="http://zope.org/"&gt;Zope&lt;/a&gt; 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.&lt;/p&gt;
&lt;p&gt;The &lt;a class="reference external" href="https://github.com/Pylons/pyramid/wiki/Sprint-Ideas"&gt;Pyramid sprinters&lt;/a&gt; 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 &lt;a class="reference external" href="http://plope.com/"&gt;Chris McDonough&lt;/a&gt;.
&lt;a class="reference external" href="https://twitter.com/#!/chrismcdonough"&gt;Chris&lt;/a&gt; is very smart, builds
great software, and is just very kind-hearted.&lt;/p&gt;
&lt;p&gt;Here’s some of the stuff I worked on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://github.com/Pylons/pyramid_debugtoolbar/pull/57"&gt;add IP range/network restriction&lt;/a&gt; to
&lt;a class="reference external" href="http://readthedocs.org/docs/pyramid_debugtoolbar/en/latest/"&gt;pyramid_debugtoolbar&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;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 &lt;a class="reference external" href="http://www.buildout.org/"&gt;buildout&lt;/a&gt;
environment and it made for some interesting comparisons.  They keep
things really simple relying only on &lt;a class="reference external" href="http://packages.python.org/distribute/"&gt;distribute’s setuptools&lt;/a&gt; and &lt;a class="reference external" href="http://www.virtualenv.org/en/latest/index.html"&gt;virtualenv&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I have to say, I still prefer working with buildout.  Buildout’s
caching is much better than &lt;a class="reference external" href="http://packages.python.org/distribute/easy_install.html"&gt;easy_install’s&lt;/a&gt; and
virtualenv so updating the environment after changes is smoother and
faster.  For testing against multiple &lt;a class="reference external" href="http://www.python.org/"&gt;Python&lt;/a&gt; versions and implementations, such as
&lt;a class="reference external" href="http://www.jython.org/"&gt;Jython&lt;/a&gt; and &lt;a class="reference external" href="http://pypy.org/"&gt;PyPy&lt;/a&gt;,
Pyramid uses &lt;a class="reference external" href="http://readthedocs.org/docs/tox/en/latest/"&gt;tox&lt;/a&gt;
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.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://github.com/repoze/repoze.sendmail/pull/2"&gt;support Python 3&lt;/a&gt; in
&lt;a class="reference external" href="http://pypi.python.org/pypi/repoze.sendmail/"&gt;repoze.sendmail&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: INFO/1 (&lt;span class="docutils literal"&gt;/builds/rpatterson/ross-pattersons-site/blog/pycon-2012-sprints/index.rst&lt;/span&gt;, line 15); &lt;em&gt;&lt;a href="#id1"&gt;backlink&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Duplicate explicit target name: “repoze.sendmail”.&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;&lt;a class="reference external" href="https://github.com/repoze/repoze.sendmail/pull/3"&gt;improve and centralize email message serializing&lt;/a&gt; in
&lt;a class="reference external" href="http://pypi.python.org/pypi/repoze.sendmail/"&gt;repoze.sendmail&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;That task would have been &lt;em&gt;impossible&lt;/em&gt; without &lt;a class="reference external" href="http://pyvideo.org/video/684/the-email-package-past-present-and-future"&gt;R. David Murray&lt;/a&gt;.
I pestered &lt;a class="reference external" href="http://www.bitdance.com/blog/"&gt;him&lt;/a&gt; endlessly and &lt;a class="reference external" href="https://twitter.com/#!/rdavidmurray"&gt;he&lt;/a&gt; helped me learn all the
deep, dark corners of the email protocols and the Python &lt;a class="reference external" href="http://docs.python.org/library/email.html"&gt;email&lt;/a&gt; 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 &lt;cite&gt;email&lt;/cite&gt; package doesn’t already do.  I baked
those into &lt;a class="reference external" href="https://github.com/repoze/repoze.sendmail/blob/master/repoze/sendmail/encoding.py"&gt;repoze.sendmail.encoding&lt;/a&gt;
and added that support as a part sending mail through
repoze.sendmail.&lt;/p&gt;
&lt;p&gt;Once that was in place, finishing Python 2 and 3 compatibility was a
snap.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://github.com/Pylons/pyramid_mailer/pull/12"&gt;add Python 3 support&lt;/a&gt; to
&lt;a class="reference external" href="http://readthedocs.org/docs/pyramid_mailer/en/latest/"&gt;pyramid_mailer&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Again, once &lt;cite&gt;repoze.sendmail.encoding&lt;/cite&gt; was in-place, I just ripped
all the email encoding support out of &lt;cite&gt;pyramid_mailer&lt;/cite&gt; and Python 2
and 3 compatibility was a cinch.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: INFO/1 (&lt;span class="docutils literal"&gt;/builds/rpatterson/ross-pattersons-site/blog/pycon-2012-sprints/index.rst&lt;/span&gt;, line 15); &lt;em&gt;&lt;a href="#id2"&gt;backlink&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Duplicate explicit target name: “pyramid_mailer”.&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;&lt;a class="reference external" href="https://github.com/Pylons/pyramid_mailer/issues/14"&gt;fix Cc/Bcc witout To handling&lt;/a&gt; in
&lt;a class="reference external" href="http://readthedocs.org/docs/pyramid_mailer/en/latest/"&gt;pyramid_mailer&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;While I had my hands in &lt;cite&gt;pyramid_mailer&lt;/cite&gt;, I fixed a bug reported by
&lt;a class="reference external" href="http://michael.merickel.org/"&gt;Michael Merickel&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://github.com/Pylons/pyramid/issues/465"&gt;add support for multiple request parameters&lt;/a&gt; when registering
&lt;a class="reference external" href="http://docs.pylonsproject.org/projects/pyramid/en/1.3-branch/api/config.html?highlight=request_param#pyramid.config.Configurator.add_route"&gt;Pyramid views&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;updating &lt;a class="reference external" href="http://docs.python.org/library/warnings.html#warnings.catch_warnings"&gt;warnings&lt;/a&gt;
handling in &lt;a class="reference external" href="https://github.com/Pylons/pyramid/pull/467"&gt;Pyramid tests&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Just a simple test fixture update to cleanup output.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="note update admonition"&gt;
&lt;p class="admonition-title"&gt;Updated on 16 March 2012&lt;/p&gt;
&lt;p&gt;Imported from Plone on Mar 15, 2021.  The date for this update is the last
modified date in Plone.&lt;/p&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://www.rpatterson.net/blog/pycon-2012-sprints/"/>
    <summary>Sprinting after PyCon and my first time working with and contributing to Pyramid.</summary>
    <category term="Plone" label="Plone"/>
    <category term="Pyramid" label="Pyramid"/>
    <category term="Zope" label="Zope"/>
    <category term="buildout" label="buildout"/>
    <category term="pycon2012" label="pycon2012"/>
    <category term="repoze" label="repoze"/>
    <category term="tox" label="tox"/>
    <category term="virtualenv" label="virtualenv"/>
    <published>2012-03-15T00:00:00+00:00</published>
  </entry>
</feed>
