diff --git a/CHANGES b/CHANGES index a7ae92c9b..c0be798e8 100644 --- a/CHANGES +++ b/CHANGES @@ -5,6 +5,10 @@ Release 0.7 (in development) Release 0.6.2 (in development) ============================== +* Fix autodoc crash for objects without a ``__name__``. + +* Fix intersphinx for installations without urllib2.HTTPSHandler. + * #134: Fix pending_xref leftover nodes when using the todolist directive from the todo extension. diff --git a/MANIFEST.in b/MANIFEST.in index c7d276bd6..25cbc334f 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -8,6 +8,7 @@ include TODO include babel.cfg include Makefile include ez_setup.py +include sphinx-autogen.py include sphinx-build.py include sphinx-quickstart.py diff --git a/doc/faq.rst b/doc/faq.rst index 723601f18..10a6f2c48 100644 --- a/doc/faq.rst +++ b/doc/faq.rst @@ -29,6 +29,12 @@ How do I... ... use Sphinx with SCons? Glenn Hutchings has written a SCons build script to build Sphinx documentation; it is hosted here: http://bitbucket.org/zondo/sphinx-scons - + +... convert from my existing docs using MoinMoin markup? + The easiest way is to convert to xhtml, then convert `xhtml to reST`_. You'll + still need to mark up classes and such, but the headings and code examples + come through cleanly. + .. _api role: http://git.savannah.gnu.org/cgit/kenozooid.git/tree/doc/extapi.py +.. _xhtml to reST: http://docutils.sourceforge.net/sandbox/xhtml2rest/xhtml2rest.py diff --git a/sphinx/ext/autodoc.py b/sphinx/ext/autodoc.py index 72d500297..53f533979 100644 --- a/sphinx/ext/autodoc.py +++ b/sphinx/ext/autodoc.py @@ -481,10 +481,12 @@ class Documenter(object): else: # __dict__ contains only the members directly defined in # the class (but get them via getattr anyway, to e.g. get - # unbound method objects instead of function objects) + # unbound method objects instead of function objects); + # using keys() because apparently there are objects for which + # __dict__ changes while getting attributes return False, sorted([ (mname, self.get_attr(self.object, mname)) - for mname in self.get_attr(self.object, '__dict__')]) + for mname in self.get_attr(self.object, '__dict__').keys()]) def filter_members(self, members, want_all): """ @@ -841,7 +843,10 @@ class ClassDocumenter(ModuleLevelDocumenter): # if the class is documented under another name, document it # as data/attribute if ret: - self.doc_as_attr = (self.objpath[-1] != self.object.__name__) + if hasattr(self.object, '__name__'): + self.doc_as_attr = (self.objpath[-1] != self.object.__name__) + else: + self.doc_as_attr = True return ret def format_args(self): diff --git a/sphinx/ext/autosummary/generate.py b/sphinx/ext/autosummary/generate.py index 765b88ec8..c21d71ac5 100644 --- a/sphinx/ext/autosummary/generate.py +++ b/sphinx/ext/autosummary/generate.py @@ -235,4 +235,4 @@ def main(argv): if __name__ == '__main__': - main() + main(sys.argv) diff --git a/sphinx/ext/intersphinx.py b/sphinx/ext/intersphinx.py index 4401915eb..3c97a7342 100644 --- a/sphinx/ext/intersphinx.py +++ b/sphinx/ext/intersphinx.py @@ -33,10 +33,12 @@ from docutils import nodes from sphinx.builders.html import INVENTORY_FILENAME +handlers = [urllib2.ProxyHandler(), urllib2.HTTPRedirectHandler(), + urllib2.HTTPHandler()] +if hasattr(urllib2, 'HTTPSHandler'): + handlers.append(urllib2.HTTPSHandler) -urllib2.install_opener(urllib2.build_opener( - urllib2.ProxyHandler(), urllib2.HTTPRedirectHandler(), - urllib2.HTTPHandler(), urllib2.HTTPSHandler())) +urllib2.install_opener(urllib2.build_opener(*handlers)) def fetch_inventory(app, uri, inv):