[Python-checkins] r64331 - in doctools/trunk: CHANGES doc/ext/autodoc.rst sphinx/ext/autodoc.py

georg.brandl python-checkins at python.org
Tue Jun 17 11:24:11 CEST 2008


Author: georg.brandl
Date: Tue Jun 17 11:24:11 2008
New Revision: 64331
Log:
Support inheritance display in autoclass, thanks to mdboom.
Modified:
 doctools/trunk/CHANGES
 doctools/trunk/doc/ext/autodoc.rst
 doctools/trunk/sphinx/ext/autodoc.py
Modified: doctools/trunk/CHANGES
==============================================================================
--- doctools/trunk/CHANGES	(original)
+++ doctools/trunk/CHANGES	Tue Jun 17 11:24:11 2008
@@ -60,6 +60,10 @@
 and classes now that override the signature got via introspection
 from Python code.
 
+ - The `autodoc` extension now offers a ``show-inheritance`` option
+ for autoclass that inserts a list of bases after the signature.
+
+
 Bugs fixed
 ----------
 
Modified: doctools/trunk/doc/ext/autodoc.rst
==============================================================================
--- doctools/trunk/doc/ext/autodoc.rst	(original)
+++ doctools/trunk/doc/ext/autodoc.rst	Tue Jun 17 11:24:11 2008
@@ -46,67 +46,73 @@
 
 Noodle's docstring.
 
- If you want to automatically document members, there's a ``members``
- option::
-
- .. autoclass:: Noodle
- :members:
+ The "auto" directives can also contain content of their own, it will be
+ inserted into the resulting non-auto directive source after the docstring
+ (but before any automatic member documentation).
 
- will document all non-private member functions and properties (that is, those
- whose name doesn't start with ``_``), while ::
+ Therefore, you can also mix automatic and non-automatic member documentation,
+ like so::
 
 .. autoclass:: Noodle
 :members: eat, slurp
 
- will document exactly the specified members.
+ .. method:: boil(time=10)
 
- Members without docstrings will be left out, unless you give the
- ``undoc-members`` flag option::
+ Boil the noodle *time* minutes.
 
- .. autoclass:: Noodle
- :members:
- :undoc-members:
+ **Options and advanced usage**
+ 
+ * If you want to automatically document members, there's a ``members``
+ option::
 
- .. versionadded:: 0.3
- For classes and exceptions, members inherited from base classes will be
- left out, unless you give the ``inherited-members`` flag option, in
- addition to ``members``:
+ .. autoclass:: Noodle
+ :members:
 
- ::
+ will document all non-private member functions and properties (that is,
+ those whose name doesn't start with ``_``), while ::
 
- .. autoclass:: Noodle
- :members:
- :inherited-members:
+ .. autoclass:: Noodle
+ :members: eat, slurp
 
- This can be combined with ``undoc-members`` to document *all* available
- members of the class or module.
+ will document exactly the specified members.
 
- .. versionadded:: 0.4
- It's possible to override the signature for callable members (functions,
- methods, classes) with the regular syntax that will override the signature
- gained from instropection:
+ * Members without docstrings will be left out, unless you give the
+ ``undoc-members`` flag option::
 
- ::
+ .. autoclass:: Noodle
+ :members:
+ :undoc-members:
 
- .. autoclass:: Noodle(type)
+ * For classes and exceptions, members inherited from base classes will be
+ left out, unless you give the ``inherited-members`` flag option, in
+ addition to ``members``::
 
- .. automethod:: eat(persona)
+ .. autoclass:: Noodle
+ :members:
+ :inherited-members:
 
- This is useful if the signature from the method is hidden by a decorator.
+ This can be combined with ``undoc-members`` to document *all* available
+ members of the class or module.
 
- The "auto" directives can also contain content of their own, it will be
- inserted into the resulting non-auto directive source after the docstring
- (but before any automatic member documentation).
+ .. versionadded:: 0.3
 
- Therefore, you can also mix automatic and non-automatic member documentation,
- like so::
+ * It's possible to override the signature for callable members (functions,
+ methods, classes) with the regular syntax that will override the signature
+ gained from instropection::
 
- .. autoclass:: Noodle
- :members: eat, slurp
+ .. autoclass:: Noodle(type)
 
- .. method:: boil(time=10)
+ .. automethod:: eat(persona)
 
- Boil the noodle *time* minutes.
+ This is useful if the signature from the method is hidden by a decorator.
+
+ .. versionadded:: 0.4
+
+ * The :dir:`autoclass` and :dir:`autoexception` directives also support a
+ flag option called ``show-inheritance``. When given, a list of base
+ classes will be inserted just below the class signature.
+
+ .. versionadded:: 0.4
 
 .. note::
 
Modified: doctools/trunk/sphinx/ext/autodoc.py
==============================================================================
--- doctools/trunk/sphinx/ext/autodoc.py	(original)
+++ doctools/trunk/sphinx/ext/autodoc.py	Tue Jun 17 11:24:11 2008
@@ -33,6 +33,10 @@
 _module_charsets = {}
 
 
+class Options(object):
+ pass
+
+
 class AutodocReporter(object):
 """
 A reporter replacement that assigns the correct source name
@@ -185,8 +189,8 @@
 return inspect.formatargspec(*argspec)
 
 
-def generate_rst(what, name, members, inherited, undoc, add_content, document,
- lineno, indent=u'', filename_set=None, check_module=False):
+def generate_rst(what, name, members, options, add_content, document, lineno,
+ indent=u'', filename_set=None, check_module=False):
 env = document.settings.env
 
 result = None
@@ -310,6 +314,14 @@
 result.append(indent + u' :module: %s' % mod, '<autodoc>')
 result.append(u'', '<autodoc>')
 
+ if options.show_inheritance and what in ('class', 'exception'):
+ if len(todoc.__bases__):
+ bases = [b.__module__ == '__builtin__' and
+ u':class:`%s`' % b.__name__ or
+ u':class:`%s.%s`' % (b.__module__, b.__name__)
+ for b in todoc.__bases__]
+ result.append(indent + u' Bases: %s' % ', '.join(bases), '<autodoc>')
+
 # the module directive doesn't have content
 if what != 'module':
 indent += u' '
@@ -348,7 +360,7 @@
 members_check_module = True
 all_members = inspect.getmembers(todoc)
 else:
- if inherited:
+ if options.inherited:
 # getmembers() uses dir() which pulls in members from all base classes
 all_members = inspect.getmembers(todoc)
 else:
@@ -362,7 +374,7 @@
 continue
 # ignore undocumented members if :undoc-members: is not given
 doc = getattr(member, '__doc__', None)
- if not undoc and not doc:
+ if not options.undoc and not doc:
 continue
 if what == 'module':
 if isinstance(member, types.FunctionType):
@@ -386,8 +398,8 @@
 continue
 full_membername = fullname + '.' + membername
 subwarn, subres = generate_rst(memberwhat, full_membername, ['__all__'],
- inherited, undoc, None, document, lineno,
- indent, check_module=members_check_module)
+ options, None, document, lineno, indent,
+ check_module=members_check_module)
 warnings.extend(subwarn)
 if subres is not None:
 result.extend(subres)
@@ -402,16 +414,18 @@
 content_offset, block_text, state, state_machine):
 what = dirname[4:] # strip "auto"
 name = arguments[0]
+ genopt = Options()
 members = options.get('members', [])
- inherited = 'inherited-members' in options
- if inherited and not members:
+ genopt.inherited = 'inherited-members' in options
+ if genopt.inherited and not members:
 # :inherited-members: implies :members:
 members = ['__all__']
- undoc = 'undoc-members' in options
+ genopt.undoc = 'undoc-members' in options
+ genopt.show_inheritance = 'show-inheritance' in options
 
 filename_set = set()
- warnings, result = generate_rst(what, name, members, inherited, undoc, content,
- state.document, lineno, filename_set=filename_set)
+ warnings, result = generate_rst(what, name, members, genopt, content, state.document,
+ lineno, filename_set=filename_set)
 if result is None:
 return warnings
 
@@ -455,7 +469,8 @@
 def setup(app):
 mod_options = {'members': members_directive, 'undoc-members': directives.flag}
 cls_options = {'members': members_directive, 'undoc-members': directives.flag,
- 'inherited-members': directives.flag}
+ 'inherited-members': directives.flag,
+ 'show-inheritance': directives.flag}
 app.add_directive('automodule', auto_directive_withmembers,
 1, (1, 0, 1), **mod_options)
 app.add_directive('autoclass', auto_directive_withmembers,


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /