from distutils.core import setup
description='Namespace for backported Python features',
my fingers were poised for a moment above the keyboard
as I prepared to backport the essential ``match_hostname()`` function
(without which the Secure Sockets Layer is not actually *secure!*)
from the Python 3.2 version of the ``ssl`` Standard Library
to earlier versions of Python.
Suddenly, I paused: what would I call the new distribution
that I created in the Package Index to hold this small function?
It seemed a shame to consume an entire top-level name
in the Package Index for what is, after all, a stopgap measure
until older versions of Python are one day retired.
And so I conceived this ``backports`` namespace package.
It reserves a namespace beneath which we can happy place
all of the various features that we want to cut-and-paste
from later Python versions.
I hope that this will provide two benefits:
1. It should provide greater sanity, and a bit more organization,
2. When you are ready to port a Python application
to a new version of Python,
you can search the code for any ``import`` statements
that name a ``backports`` package,
and remove the backports for features that have now “arrived”
in the version of Python to which you are upgrading.
I have considered calling for all ``backports`` packages
to issue a warning upon import if they detect that they are
running under a version of Python that has now gained the feature
they offer, but I think that will be unkind to actual users,
since the most widespread versions of Python today still
display warnings by default.
Building your own backports module
----------------------------------
Placing a module of your own inside of the ``backports`` namespace
requires only a few simple steps. First, set your project up like::
project/backports/__init__.py <--- SPECIAL - see below!
project/backports/yourpkg/
project/backports/yourpkg/__init__.py
project/backports/yourpkg/foo.py
project/backports/yourpkg/bar.py
This places your own package inside of the ``backports`` namespace,
so your package and its modules can be imported like this::
import backports.yourpkg.foo