Skip to main content


Showing posts from June, 2012

Julython is on!

I'm participating in Julython, are you?

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.

Julython is going to be a lot of fun!

Here's my profile

How To use Sphinx Autodoc on ReadTheDocs with a Django application

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 f…

Announcement: Tracerlib 0.1 Released

Tracerlib is a set of utilities to make tracing Python code easier.

It provides TracerManager, which can allow multiple trace functions to coexist. It can easily be enabled and disabled, either manually or as a context manager in a with statement.

Tracer classes make handling the different trace events much easier.
classTraceExceptions(Tracer):deftrace_exception(self,func_name,exctype,value,tb):print"Saw an exception: %r"%(value,) 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.