From 4e32af4095fa4809854c1a86cbc686cfd14451fb Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Wed, 12 Jan 2011 09:36:58 +0100 Subject: [PATCH 01/15] #596: Japanese was missing from the confval:`language` docs. --- doc/config.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/config.rst b/doc/config.rst index ef66bda01..597058926 100644 --- a/doc/config.rst +++ b/doc/config.rst @@ -294,6 +294,7 @@ Project information * ``fr`` -- French * ``hr`` -- Croatian * ``it`` -- Italian + * ``ja`` -- Japanese * ``lt`` -- Lithuanian * ``nl`` -- Dutch * ``pl`` -- Polish From a9728cb3e5a74e1b6c99733f1dc9e38a1f9c4497 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Thu, 13 Jan 2011 08:24:57 +0100 Subject: [PATCH 02/15] Add semicolon for consistency. --- sphinx/themes/basic/static/basic.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sphinx/themes/basic/static/basic.css b/sphinx/themes/basic/static/basic.css index 6882a5830..32630d54c 100644 --- a/sphinx/themes/basic/static/basic.css +++ b/sphinx/themes/basic/static/basic.css @@ -413,7 +413,7 @@ dl.glossary dt { } .footnote:target { - background-color: #ffa + background-color: #ffa; } .line-block { From 130c6bd0b2edc5c750d79cb03965fb3484cf17a8 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sat, 15 Jan 2011 09:48:15 +0100 Subject: [PATCH 03/15] Fix for docutils versions without directive.src attribute. --- sphinx/ext/mathbase.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sphinx/ext/mathbase.py b/sphinx/ext/mathbase.py index e7258300a..e7ea82d7c 100644 --- a/sphinx/ext/mathbase.py +++ b/sphinx/ext/mathbase.py @@ -70,7 +70,8 @@ class MathDirective(Directive): node['docname'] = self.state.document.settings.env.docname ret = [node] node.line = self.lineno - node.source = self.src + if hasattr(self, 'src'): + node.source = self.src if node['label']: tnode = nodes.target('', '', ids=['equation-' + node['label']]) self.state.document.note_explicit_target(tnode) From e5a9838b6ec365583f73cb0aab589665c1b19d77 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sat, 15 Jan 2011 10:06:40 +0100 Subject: [PATCH 04/15] #597: fix list of exceptions to catch. --- sphinx/ext/inheritance_diagram.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sphinx/ext/inheritance_diagram.py b/sphinx/ext/inheritance_diagram.py index 2e326e7e5..1b49720fa 100644 --- a/sphinx/ext/inheritance_diagram.py +++ b/sphinx/ext/inheritance_diagram.py @@ -86,7 +86,7 @@ class InheritanceGraph(object): """ try: path, base = class_sig_re.match(name).groups() - except ValueError: + except (AttributeError, ValueError): raise InheritanceException('Invalid class or module %r specified ' 'for inheritance diagram' % name) From 9bd6d741091d9eadc0f8ff981228391ad92b5ed0 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sat, 15 Jan 2011 10:23:51 +0100 Subject: [PATCH 05/15] Add some more examples. --- EXAMPLES | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/EXAMPLES b/EXAMPLES index 5845dafed..842402458 100644 --- a/EXAMPLES +++ b/EXAMPLES @@ -26,6 +26,7 @@ Documentation using the default theme * gevent: http://www.gevent.org/ * Google Wave API: http://wave-robot-python-client.googlecode.com/svn/trunk/pydocs/index.html * GSL Shell: http://www.nongnu.org/gsl-shell/ +* Hands-on Python Tutorial: http://anh.cs.luc.edu/python/hands-on/3.1/handsonHtml/ * Hedge: http://documen.tician.de/hedge/ * Kaa: http://doc.freevo.org/api/kaa/ * Leo: http://webpages.charter.net/edreamleo/front.html @@ -79,6 +80,7 @@ Documentation using a customized version of the default theme * simuPOP: http://simupop.sourceforge.net/manual_release/build/userGuide.html * Sprox: http://sprox.org/ * TurboGears: http://turbogears.org/2.0/docs/ +* Zentyal: http://doc.zentyal.org/ * Zope: http://docs.zope.org/zope2/index.html * zc.async: http://packages.python.org/zc.async/1.5.0/ @@ -140,6 +142,7 @@ Documentation using a custom theme/integrated in a site * Open ERP: http://doc.openerp.com/ * OpenLayers: http://docs.openlayers.org/ * PyEphem: http://rhodesmill.org/pyephem/ +* German Plone 4.0 user manual: http://www.hasecke.com/plone-benutzerhandbuch/4.0/ * Pylons: http://pylonshq.com/docs/en/0.9.7/ * PyMOTW: http://www.doughellmann.com/PyMOTW/ * qooxdoo: http://manual.qooxdoo.org/current @@ -167,6 +170,13 @@ Homepages and other non-documentation sites Books produced using Sphinx --------------------------- -* The ``repoze.bfg`` Web Application Framework: +* "The ``repoze.bfg`` Web Application Framework": http://www.amazon.com/repoze-bfg-Web-Application-Framework-Version/dp/0615345379 * A Theoretical Physics Reference book: http://theoretical-physics.net/ +* "Simple and Steady Way of Learning for Software Engineering" (in Japanese): + http://www.amazon.co.jp/dp/477414259X/ +* "Expert Python Programming" (Japanese translation): + http://www.amazon.co.jp/dp/4048686291/ +* "Pomodoro Technique Illustrated" (Japanese translation): + http://www.amazon.co.jp/dp/4048689525/ + From d7c021bc5fdf01a5c772ea618d23d53ed5d24f75 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sat, 15 Jan 2011 10:52:56 +0100 Subject: [PATCH 06/15] Make token references work as hyperlinks again in LaTeX output. --- CHANGES | 2 ++ sphinx/builders/latex.py | 4 ---- sphinx/texinputs/sphinx.sty | 19 +++++-------------- sphinx/writers/latex.py | 15 +++++---------- 4 files changed, 12 insertions(+), 28 deletions(-) diff --git a/CHANGES b/CHANGES index bc74696f8..9816f910c 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,8 @@ Release 1.0.7 (in development) ============================== +* Make token references work as hyperlinks again in LaTeX output. + * #572: Show warnings by default when reference labels cannot be found. diff --git a/sphinx/builders/latex.py b/sphinx/builders/latex.py index b00546a06..3369338c2 100644 --- a/sphinx/builders/latex.py +++ b/sphinx/builders/latex.py @@ -46,10 +46,6 @@ class LaTeXBuilder(Builder): return 'all documents' # for now def get_target_uri(self, docname, typ=None): - if typ == 'token': - # token references are always inside production lists and must be - # replaced by \token{} in LaTeX - return '@token' if docname not in self.docnames: raise NoUri else: diff --git a/sphinx/texinputs/sphinx.sty b/sphinx/texinputs/sphinx.sty index ae7ba372c..478810948 100644 --- a/sphinx/texinputs/sphinx.sty +++ b/sphinx/texinputs/sphinx.sty @@ -237,21 +237,12 @@ \addtolength{\py@argswidth}{\linewidth}% \item[#1\code{(}\py@sigparams{#2}{#3}]} -% This version is being checked in for the historical record; it shows -% how I've managed to get some aspects of this to work. It will not -% be used in practice, so a subsequent revision will change things -% again. This version has problems, but shows how to do something -% that proved more tedious than I'd expected, so I don't want to lose -% the example completely. +% Production lists % -\newcommand{\grammartoken}[1]{\texttt{#1}} -\newenvironment{productionlist}[1][\@undefined]{ - \def\optional##1{{\Large[}##1{\Large]}} - \def\production##1##2{\hypertarget{grammar-token-##1}{}% - \code{##1}&::=&\code{##2}\\} - \def\productioncont##1{& &\code{##1}\\} - \def\token##1{##1} - \let\grammartoken=\token +\newenvironment{productionlist}{ +% \def\optional##1{{\Large[}##1{\Large]}} + \def\production##1##2{\\\code{##1}&::=&\code{##2}} + \def\productioncont##1{\\& &\code{##1}} \parindent=2em \indent \begin{tabular}{lcl} diff --git a/sphinx/writers/latex.py b/sphinx/writers/latex.py index 3bed28ff9..09a34ecb6 100644 --- a/sphinx/writers/latex.py +++ b/sphinx/writers/latex.py @@ -266,10 +266,10 @@ class LaTeXTranslator(nodes.NodeVisitor): '\\label{%s}' % self.idescape(id) def hyperlink(self, id): - return '{\\hyperref[%s]{' % (self.idescape(id)) + return '{\\hyperref[%s]{' % self.idescape(id) def hyperpageref(self, id): - return '\\autopageref*{%s}' % (self.idescape(id)) + return '\\autopageref*{%s}' % self.idescape(id) def idescape(self, id): return str(unicode(id).translate(tex_replace_map)) @@ -422,8 +422,9 @@ class LaTeXTranslator(nodes.NodeVisitor): def visit_production(self, node): if node['tokenname']: - self.body.append('\\production{%s}{' % - self.encode(node['tokenname'])) + tn = node['tokenname'] + self.body.append(self.hypertarget('grammar-token-' + tn)) + self.body.append('\\production{%s}{' % self.encode(tn)) else: self.body.append('\\productioncont{') def depart_production(self, node): @@ -1133,12 +1134,6 @@ class LaTeXTranslator(nodes.NodeVisitor): self.context.append('}} (%s)' % self.hyperpageref(id)) else: self.context.append('}}') - elif uri.startswith('@token'): - if self.in_production_list: - self.body.append('\\token{') - else: - self.body.append('\\grammartoken{') - self.context.append('}') else: self.builder.warn('unusable reference target found: %s' % uri, (self.curfilestack[-1], node.line)) From 25c61f074852cdb0a88c2d8a1edc5e5051a07921 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sat, 15 Jan 2011 11:40:48 +0100 Subject: [PATCH 07/15] #558: Fix longtables with captions in LaTeX output. --- CHANGES | 2 ++ sphinx/writers/latex.py | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index 9816f910c..1fbdd0be5 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,8 @@ Release 1.0.7 (in development) ============================== +* #558: Fix longtables with captions in LaTeX output. + * Make token references work as hyperlinks again in LaTeX output. * #572: Show warnings by default when reference labels cannot be diff --git a/sphinx/writers/latex.py b/sphinx/writers/latex.py index 09a34ecb6..dd0c2665a 100644 --- a/sphinx/writers/latex.py +++ b/sphinx/writers/latex.py @@ -658,8 +658,7 @@ class LaTeXTranslator(nodes.NodeVisitor): else: self.body.append('{|' + ('L|' * self.table.colcount) + '}\n') if self.table.longtable and self.table.caption is not None: - self.body.append(u'\\capstart\\caption{%s} \\\\\n' % - self.table.caption) + self.body.append(u'\\caption{%s} \\\\\n' % self.table.caption) if self.table.caption is not None: for id in self.next_table_ids: self.body.append(self.hypertarget(id, anchor=False)) From f36ca807658492a3fa2e896c3ee4ce69bc1af09a Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sat, 15 Jan 2011 11:43:36 +0100 Subject: [PATCH 08/15] #599: Import PIL as ``from PIL import Image``. --- CHANGES | 2 ++ sphinx/writers/html.py | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 1fbdd0be5..2ab38c862 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,8 @@ Release 1.0.7 (in development) ============================== +* #599: Import PIL as ``from PIL import Image``. + * #558: Fix longtables with captions in LaTeX output. * Make token references work as hyperlinks again in LaTeX output. diff --git a/sphinx/writers/html.py b/sphinx/writers/html.py index f1c4d596d..85c653602 100644 --- a/sphinx/writers/html.py +++ b/sphinx/writers/html.py @@ -21,7 +21,7 @@ from sphinx.locale import admonitionlabels, versionlabels, _ from sphinx.util.smartypants import sphinx_smarty_pants try: - import Image # check for the Python Imaging Library + from PIL import Image # check for the Python Imaging Library except ImportError: Image = None From 8df6b58527bcf56dc8dde692b2b7719c212f00da Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sat, 15 Jan 2011 14:20:33 +0100 Subject: [PATCH 09/15] Fix bug introduced by relying on quirks of Jinja scoping. --- sphinx/jinja2glue.py | 10 ++++++++++ sphinx/themes/basic/domainindex.html | 11 +++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/sphinx/jinja2glue.py b/sphinx/jinja2glue.py index f3639867a..c952a1171 100644 --- a/sphinx/jinja2glue.py +++ b/sphinx/jinja2glue.py @@ -35,6 +35,15 @@ def accesskey(context, key): return 'accesskey="%s"' % key return '' +class idgen(object): + def __init__(self): + self.id = 0 + def current(self): + return self.id + def next(self): + self.id += 1 + return self.id + class SphinxFileSystemLoader(FileSystemLoader): """FileSystemLoader subclass that is not so strict about '..' @@ -100,6 +109,7 @@ class BuiltinTemplateLoader(TemplateBridge, BaseLoader): self.environment.filters['tobool'] = _tobool self.environment.globals['debug'] = contextfunction(pformat) self.environment.globals['accesskey'] = contextfunction(accesskey) + self.environment.globals['idgen'] = idgen if use_i18n: self.environment.install_gettext_translations( builder.app.translator) diff --git a/sphinx/themes/basic/domainindex.html b/sphinx/themes/basic/domainindex.html index 8d98c429d..f26a55ec0 100644 --- a/sphinx/themes/basic/domainindex.html +++ b/sphinx/themes/basic/domainindex.html @@ -19,7 +19,7 @@ {% endblock %} {% block body %} - {%- set curr_group = 0 %} + {%- set groupid = idgen() %}

{{ indextitle }}

@@ -33,15 +33,14 @@ {%- for letter, entries in content %} - {%- for (name, grouptype, page, anchor, extra, qualifier, description) in entries %} - {%- if grouptype == 1 %}{% set curr_group = curr_group + 1 %}{% endif %} - +
 
+
{{ letter }}
{% if grouptype == 1 -%} - + {%- endif %} {% if grouptype == 2 %}   {% endif %} {% if page %}{% endif -%} From c41c6227de8cfc4f7daa85a3c2a7f34d0ff0e808 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sat, 15 Jan 2011 14:27:13 +0100 Subject: [PATCH 10/15] Consistently replace $ by _S_ in JS domain. --- CHANGES | 2 ++ sphinx/domains/javascript.py | 9 ++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/CHANGES b/CHANGES index 2ab38c862..7b83ac5a3 100644 --- a/CHANGES +++ b/CHANGES @@ -48,6 +48,8 @@ Release 1.0.7 (in development) * Fix tracebacks occurring for duplicate C++ domain objects. +* Fix JavaScript domain links to objects with ``$`` in their name. + Release 1.0.6 (Jan 04, 2011) ============================ diff --git a/sphinx/domains/javascript.py b/sphinx/domains/javascript.py index 4ad84dd3f..cf2fd2cbf 100644 --- a/sphinx/domains/javascript.py +++ b/sphinx/domains/javascript.py @@ -96,7 +96,8 @@ class JSObject(ObjectDescription): indextext = self.get_index_text(objectname, name_obj) if indextext: self.indexnode['entries'].append(('single', indextext, - fullname, fullname)) + fullname.replace('$', '_S_'), + fullname)) def get_index_text(self, objectname, name_obj): name, obj = name_obj @@ -208,8 +209,10 @@ class JavaScriptDomain(Domain): name, obj = self.find_obj(env, objectname, target, typ, searchorder) if not obj: return None - return make_refnode(builder, fromdocname, obj[0], name, contnode, name) + return make_refnode(builder, fromdocname, obj[0], + name.replace('$', '_S_'), contnode, name) def get_objects(self): for refname, (docname, type) in self.data['objects'].iteritems(): - yield refname, refname, type, docname, refname, 1 + yield refname, refname, type, docname, \ + refname.replace('$', '_S_'), 1 From bcb781e37a47d0d3853849d42f18ad29e925c7a4 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sat, 15 Jan 2011 14:27:27 +0100 Subject: [PATCH 11/15] Fix a few nits found by epubcheck. --- sphinx/builders/epub.py | 2 +- sphinx/writers/html.py | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/sphinx/builders/epub.py b/sphinx/builders/epub.py index 366587b66..28e0ece5b 100644 --- a/sphinx/builders/epub.py +++ b/sphinx/builders/epub.py @@ -171,7 +171,7 @@ class EpubBuilder(StandaloneHTMLBuilder): name = name.replace('<', '<') name = name.replace('>', '>') name = name.replace('"', '"') - name = name.replace('\'', ''') + name = name.replace('\'', ''') return name def get_refnodes(self, doctree, result): diff --git a/sphinx/writers/html.py b/sphinx/writers/html.py index 85c653602..613397ea8 100644 --- a/sphinx/writers/html.py +++ b/sphinx/writers/html.py @@ -244,6 +244,12 @@ class HTMLTranslator(BaseTranslator): def visit_doctest_block(self, node): self.visit_literal_block(node) + # overwritten to add the
(for XHTML compliance) + def visit_block_quote(self, node): + self.body.append(self.starttag(node, 'blockquote') + '
') + def depart_block_quote(self, node): + self.body.append('
\n') + # overwritten def visit_literal(self, node): if len(node.children) == 1 and \ From 10103108fb0dbf77d069dca8342a9d5af4a45eed Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sat, 15 Jan 2011 14:40:06 +0100 Subject: [PATCH 12/15] Use CSS instead of deprecated width attributes for tables. --- sphinx/themes/basic/genindex-single.html | 4 ++-- sphinx/themes/basic/genindex.html | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sphinx/themes/basic/genindex-single.html b/sphinx/themes/basic/genindex-single.html index 225abfa8f..0f2cad23a 100644 --- a/sphinx/themes/basic/genindex-single.html +++ b/sphinx/themes/basic/genindex-single.html @@ -13,9 +13,9 @@

{% trans key=key %}Index – {{ key }}{% endtrans %}

- +
{%- for column in entries|slice(2) if column %} -
+
{%- for entryname, (links, subitems) in column %}
{% if links %}{{ entryname|e }} {%- for link in links[1:] %}, [{{ loop.index }}]{% endfor %} diff --git a/sphinx/themes/basic/genindex.html b/sphinx/themes/basic/genindex.html index 4af472528..182bbf8e0 100644 --- a/sphinx/themes/basic/genindex.html +++ b/sphinx/themes/basic/genindex.html @@ -21,9 +21,9 @@ {%- for key, entries in genindexentries %}

{{ key }}

- +
{%- for column in entries|slice(2) if column %} -
+
{%- for entryname, (links, subitems) in column %}
{% if links %}{{ entryname|e }} {%- for link in links[1:] %}, [{{ loop.index }}]{% endfor %} From 1edf4776865c959355e523887d090903c2fd3b16 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sat, 15 Jan 2011 14:40:16 +0100 Subject: [PATCH 13/15] Add genindex and domain indices to spine. --- sphinx/builders/epub.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/sphinx/builders/epub.py b/sphinx/builders/epub.py index 28e0ece5b..a356254b7 100644 --- a/sphinx/builders/epub.py +++ b/sphinx/builders/epub.py @@ -229,8 +229,7 @@ class EpubBuilder(StandaloneHTMLBuilder): }) def fix_fragment(self, prefix, fragment): - """Return a href/id attribute with colons replaced by hyphens. - """ + """Return a href/id attribute with colons replaced by hyphens.""" return prefix + fragment.replace(':', '-') def fix_ids(self, tree): @@ -400,6 +399,14 @@ class EpubBuilder(StandaloneHTMLBuilder): spine.append(_spine_template % { 'idref': self.esc(self.make_id(item['refuri'])) }) + for info in self.domain_indices: + spine.append(_spine_template % { + 'idref': self.esc(self.make_id(info[0] + self.out_suffix)) + }) + if self.config.html_use_index: + spine.append(_spine_template % { + 'idref': self.esc(self.make_id('genindex' + self.out_suffix)) + }) spine = '\n'.join(spine) # write the project file From c0aad06b9614866031003044a9fa93851f774c94 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sat, 15 Jan 2011 14:46:31 +0100 Subject: [PATCH 14/15] Remove use of . --- sphinx/themes/basic/domainindex.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sphinx/themes/basic/domainindex.html b/sphinx/themes/basic/domainindex.html index f26a55ec0..947a01ea8 100644 --- a/sphinx/themes/basic/domainindex.html +++ b/sphinx/themes/basic/domainindex.html @@ -33,8 +33,8 @@ {%- for letter, entries in content %} - + {%- for (name, grouptype, page, anchor, extra, qualifier, description) in entries %} From e7fa3c6f45f9917d0a3ded691ef01e1da36ce20b Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sat, 15 Jan 2011 15:10:30 +0100 Subject: [PATCH 15/15] #347: use autodoc documenter detection in autosummary. --- CHANGES | 3 +++ sphinx/ext/autosummary/__init__.py | 42 ++++++++++++++---------------- sphinx/ext/autosummary/generate.py | 8 +++--- 3 files changed, 26 insertions(+), 27 deletions(-) diff --git a/CHANGES b/CHANGES index 7b83ac5a3..e91a032e0 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,9 @@ Release 1.0.7 (in development) ============================== +* #347: Fix wrong generation of directives of static methods in + autosummary. + * #599: Import PIL as ``from PIL import Image``. * #558: Fix longtables with captions in LaTeX output. diff --git a/sphinx/ext/autosummary/__init__.py b/sphinx/ext/autosummary/__init__.py index f75307e01..dace837fe 100644 --- a/sphinx/ext/autosummary/__init__.py +++ b/sphinx/ext/autosummary/__init__.py @@ -134,27 +134,19 @@ except AttributeError: return False isgetsetdescriptor = ismemberdescriptor -def get_documenter(obj): +def get_documenter(obj, parent): """ Get an autodoc.Documenter class suitable for documenting the given object """ - import sphinx.ext.autodoc as autodoc + from sphinx.ext.autodoc import AutoDirective, DataDocumenter - if inspect.isclass(obj): - if issubclass(obj, Exception): - return autodoc.ExceptionDocumenter - return autodoc.ClassDocumenter - elif inspect.ismodule(obj): - return autodoc.ModuleDocumenter - elif inspect.ismethod(obj) or inspect.ismethoddescriptor(obj): - return autodoc.MethodDocumenter - elif (ismemberdescriptor(obj) or isgetsetdescriptor(obj) - or inspect.isdatadescriptor(obj)): - return autodoc.AttributeDocumenter - elif inspect.isroutine(obj): - return autodoc.FunctionDocumenter + classes = [cls for cls in AutoDirective._registry.values() + if cls.can_document_member(obj, '', False, parent)] + if classes: + classes.sort(key=lambda cls: cls.priority) + return classes[-1] else: - return autodoc.DataDocumenter + return DataDocumenter # -- .. autosummary:: ---------------------------------------------------------- @@ -240,7 +232,7 @@ class Autosummary(Directive): display_name = name.split('.')[-1] try: - obj, real_name = import_by_name(name, prefixes=prefixes) + real_name, obj, parent = import_by_name(name, prefixes=prefixes) except ImportError: self.warn('failed to import %s' % name) items.append((name, '', '', name)) @@ -248,7 +240,7 @@ class Autosummary(Directive): # NB. using real_name here is important, since Documenters # handle module prefixes slightly differently - documenter = get_documenter(obj)(self, real_name) + documenter = get_documenter(obj, parent)(self, real_name) if not documenter.parse_name(): self.warn('failed to parse name %s' % real_name) items.append((display_name, '', '', real_name)) @@ -388,7 +380,8 @@ def import_by_name(name, prefixes=[None]): prefixed_name = '.'.join([prefix, name]) else: prefixed_name = name - return _import_by_name(prefixed_name), prefixed_name + obj, parent = _import_by_name(prefixed_name) + return prefixed_name, obj, parent except ImportError: tried.append(prefixed_name) raise ImportError('no module named %s' % ' or '.join(tried)) @@ -403,7 +396,8 @@ def _import_by_name(name): if modname: try: __import__(modname) - return getattr(sys.modules[modname], name_parts[-1]) + mod = sys.modules[modname] + return getattr(mod, name_parts[-1]), mod except (ImportError, IndexError, AttributeError): pass @@ -421,12 +415,14 @@ def _import_by_name(name): break if last_j < len(name_parts): + parent = None obj = sys.modules[modname] for obj_name in name_parts[last_j:]: + parent = obj obj = getattr(obj, obj_name) - return obj + return obj, parent else: - return sys.modules[modname] + return sys.modules[modname], None except (ValueError, ImportError, AttributeError, KeyError), e: raise ImportError(*e.args) @@ -449,7 +445,7 @@ def autolink_role(typ, rawtext, etext, lineno, inliner, prefixes = [None] #prefixes.insert(0, inliner.document.settings.env.currmodule) try: - obj, name = import_by_name(pnode['reftarget'], prefixes) + name, obj, parent = import_by_name(pnode['reftarget'], prefixes) except ImportError: content = pnode[0] r[0][0] = nodes.emphasis(rawtext, content[0].astext(), diff --git a/sphinx/ext/autosummary/generate.py b/sphinx/ext/autosummary/generate.py index f8230216c..b5ff3f4ca 100644 --- a/sphinx/ext/autosummary/generate.py +++ b/sphinx/ext/autosummary/generate.py @@ -107,7 +107,7 @@ def generate_autosummary_docs(sources, output_dir=None, suffix='.rst', ensuredir(path) try: - obj, name = import_by_name(name) + name, obj, parent = import_by_name(name) except ImportError, e: warn('[autosummary] failed to import %r: %s' % (name, e)) continue @@ -123,7 +123,7 @@ def generate_autosummary_docs(sources, output_dir=None, suffix='.rst', f = open(fn, 'w') try: - doc = get_documenter(obj) + doc = get_documenter(obj, parent) if template_name is not None: template = template_env.get_template(template_name) @@ -137,7 +137,7 @@ def generate_autosummary_docs(sources, output_dir=None, suffix='.rst', def get_members(obj, typ, include_public=[]): items = [ name for name in dir(obj) - if get_documenter(getattr(obj, name)).objtype == typ + if get_documenter(getattr(obj, name), obj).objtype == typ ] public = [x for x in items if x in include_public or not x.startswith('_')] @@ -211,7 +211,7 @@ def find_autosummary_in_docstring(name, module=None, filename=None): See `find_autosummary_in_lines`. """ try: - obj, real_name = import_by_name(name) + real_name, obj, parent = import_by_name(name) lines = pydoc.getdoc(obj).splitlines() return find_autosummary_in_lines(lines, module=name, filename=filename) except AttributeError:
 
- {{ letter }}
+ {{ letter }}