[Python-checkins] r63836 - in doctools/trunk: CHANGES sphinx/directives/desc.py sphinx/ext/autodoc.py
georg.brandl
python-checkins at python.org
Sat May 31 18:58:23 CEST 2008
Author: georg.brandl
Date: Sat May 31 18:58:22 2008
New Revision: 63836
Log:
Fix handling of autoclass directives' module names.
Modified:
doctools/trunk/CHANGES
doctools/trunk/sphinx/directives/desc.py
doctools/trunk/sphinx/ext/autodoc.py
Modified: doctools/trunk/CHANGES
==============================================================================
--- doctools/trunk/CHANGES (original)
+++ doctools/trunk/CHANGES Sat May 31 18:58:22 2008
@@ -61,6 +61,9 @@
* Provide the standard "class" directive as "cssclass"; else it is
shadowed by the Sphinx-defined directive.
+* Fix the handling of explicit module names given to autoclass directives.
+ They now show up with the correct module name in the generated docs.
+
Release 0.3 (May 6, 2008)
=========================
Modified: doctools/trunk/sphinx/directives/desc.py
==============================================================================
--- doctools/trunk/sphinx/directives/desc.py (original)
+++ doctools/trunk/sphinx/directives/desc.py Sat May 31 18:58:22 2008
@@ -20,41 +20,41 @@
# ------ information units ---------------------------------------------------------
-def desc_index_text(desctype, currmodule, name):
+def desc_index_text(desctype, module, name):
if desctype == 'function':
- if not currmodule:
+ if not module:
return '%s() (built-in function)' % name
- return '%s() (in module %s)' % (name, currmodule)
+ return '%s() (in module %s)' % (name, module)
elif desctype == 'data':
- if not currmodule:
+ if not module:
return '%s (built-in variable)' % name
- return '%s (in module %s)' % (name, currmodule)
+ return '%s (in module %s)' % (name, module)
elif desctype == 'class':
- return '%s (class in %s)' % (name, currmodule)
+ return '%s (class in %s)' % (name, module)
elif desctype == 'exception':
return name
elif desctype == 'method':
try:
clsname, methname = name.rsplit('.', 1)
except ValueError:
- if currmodule:
- return '%s() (in module %s)' % (name, currmodule)
+ if module:
+ return '%s() (in module %s)' % (name, module)
else:
return '%s()' % name
- if currmodule:
- return '%s() (%s.%s method)' % (methname, currmodule, clsname)
+ if module:
+ return '%s() (%s.%s method)' % (methname, module, clsname)
else:
return '%s() (%s method)' % (methname, clsname)
elif desctype == 'attribute':
try:
clsname, attrname = name.rsplit('.', 1)
except ValueError:
- if currmodule:
- return '%s (in module %s)' % (name, currmodule)
+ if module:
+ return '%s (in module %s)' % (name, module)
else:
return name
- if currmodule:
- return '%s (%s.%s attribute)' % (attrname, currmodule, clsname)
+ if module:
+ return '%s (%s.%s attribute)' % (attrname, module, clsname)
else:
return '%s (%s attribute)' % (attrname, clsname)
elif desctype == 'opcode':
@@ -82,7 +82,7 @@
py_paramlist_re = re.compile(r'([\[\],])') # split at '[', ']' and ','
-def parse_py_signature(signode, sig, desctype, env):
+def parse_py_signature(signode, sig, desctype, module, env):
"""
Transform a python signature into RST nodes.
Return (fully qualified name of the thing, classname if any).
@@ -118,8 +118,8 @@
# exceptions are a special case, since they are documented in the
# 'exceptions' module.
elif add_module and env.config.add_module_names and \
- env.currmodule and env.currmodule != 'exceptions':
- nodetext = env.currmodule + '.'
+ module and module != 'exceptions':
+ nodetext = module + '.'
signode += addnodes.desc_classname(nodetext, nodetext)
signode += addnodes.desc_name(name, name)
@@ -284,6 +284,7 @@
signatures = map(lambda s: s.strip().replace('\\', ''), arguments[0].split('\n'))
names = []
clsname = None
+ module = options.get('module', env.currmodule)
for i, sig in enumerate(signatures):
# add a signature node for each signature in the current unit
# and add a reference target for it
@@ -294,7 +295,7 @@
try:
if desctype in ('function', 'data', 'class', 'exception',
'method', 'attribute'):
- name, clsname = parse_py_signature(signode, sig, desctype, env)
+ name, clsname = parse_py_signature(signode, sig, desctype, module, env)
elif desctype in ('cfunction', 'cmember', 'cmacro', 'ctype', 'cvar'):
name = parse_c_signature(signode, sig, desctype)
elif desctype == 'opcode':
@@ -347,7 +348,7 @@
# only add target and index entry if this is the first description of the
# function name in this desc block
if not noindex and name not in names:
- fullname = (env.currmodule and env.currmodule + '.' or '') + name
+ fullname = (module and module + '.' or '') + name
# note target
if fullname not in state.document.ids:
signode['names'].append(fullname)
@@ -358,7 +359,7 @@
names.append(name)
env.note_index_entry('single',
- desc_index_text(desctype, env.currmodule, name),
+ desc_index_text(desctype, module, name),
fullname, fullname)
subnode = addnodes.desc_content()
@@ -382,7 +383,8 @@
desc_directive.content = 1
desc_directive.arguments = (1, 0, 1)
-desc_directive.options = {'noindex': directives.flag}
+desc_directive.options = {'noindex': directives.flag,
+ 'module': directives.unchanged}
desctypes = [
# the Python ones
Modified: doctools/trunk/sphinx/ext/autodoc.py
==============================================================================
--- doctools/trunk/sphinx/ext/autodoc.py (original)
+++ doctools/trunk/sphinx/ext/autodoc.py Sat May 31 18:58:22 2008
@@ -184,6 +184,10 @@
except Exception:
args = ''
result.append(indent + '.. %s:: %s%s' % (what, qualname, args), '<autodoc>')
+ if what != 'module':
+ # Be explicit about the module, this is necessary since .. class:: doesn't
+ # support a prepended module name
+ result.append(indent + ' :module: %s' % mod, '<autodoc>')
result.append('', '<autodoc>')
# the module directive doesn't have content
More information about the Python-checkins
mailing list