Saturday, June 30, 2012

Julython is a great initiative to promote Python developers focusing on their own projects through the month of July and contributing to the community providing great software, great libraries, and great tools. Sign up, track your commits on GitHub and BitBucket, and tell your dev friends to take part.

Saturday, June 09, 2012

Sphinx is awesome for writing documentation. ReadTheDocs is awesome for hosting it. Autodocs are great for covering your entire API easily. Django is a great framework that makes my job easier.

Between these four things is an interaction that only brought me pain, however. I'm here to help the next dev avoid this.

Autodocs works by importing your modules and walking over the classes and functions to build documentation out of the existing docstrings. It can be used to generate complete API docs quickly and keep them in sync with the libraries existing docstrings, so you won't get conflicts between your docs and your code. Fantastic.

This creates a problem when used with Django applications, where many things cannot be imported unless a valid settings module can be found. This can prevent a hurdle in some situations, and requires a little boilerplate to get working properly with Sphinx. It require a little extra to get working on ReadTheDocs. What makes this particularly hard to figure out, is the environment running on their servers is not the same as your own, and you have only terse error reports to guess about.

Here is the snippet you need to add into the conf.py of your docs/ to tell Sphinx how to load a settings.py.

Tracer is also easily capable of filtering which events it listens
to. It accepts both an events parameter, a list of trace events it
will respond to, and a watch parameter, a list of paths it will
respond to in the form of package.module.class.function.
This can easily wrap a trace function, or you can subclass Tracer
and implement one of its helpful trace_*() methods.

And, a helper class FrameInspector which wraps a frame and makes it
trivial to inspect the function name and arguments the function had been
called with.