It’s time now to write about two of my favorite pieces of software ever written: Georg Brandl’s Sphinx and Pylons’ Pylons. Normally, these get along like a house on concrete, which is to say very well. A Pylons web application is a well-behaved, standard Python package that pays all the taxes: a setup.py, no module magic like pre-modern Django, and imports as expected. However, if you have ever used the highly useful Sphinx autodoc extension and have pointed it at a module in your Pylons app, you may have run into a traceback that looks like this:
[snip]
File "[snip]/autodoc.py", line 1019, in can_document_member
return (isdescriptor(member) and not
File "[snip]/autodoc.py", line 203, in isdescriptor
if hasattr(getattr(x, item, None), '__call__'):
File "[snip]/paste/registry.py", line 137, in __getattr__
return getattr(self._current_obj(), attr)
File "[snip]/paste/registry.py", line 194, in _current_obj
'thread' % self.____name__)
TypeError: No object (name: url) has been registered for this thread
Two questions should emerge immediately: What is paste.registry? And why is it throwing a traceback?
Jump.