Hello devs,
I'm starting to use Sphinx to (automatically) document a Python project.

I didn't find a way to automatically add the inheritance graphs directly
from the sphinx-apidoc invocation, so yesterday I did a little patch
(involving apidoc.py and quickstart.py).

I'm not very used to mercurial and I thought that forking on bitbucket
was too much for a single patch, so I did a patch queue.

At the moment of sending a pull request, bitbucket offered me only the
possibility to make the pull request from my repo to.... my repo.

Here it is the link:
https://bitbucket.org/mcagl/create-graphviz-graphs-from-sphinx-apidoc

So I'm sending here the patch, following the advice written in the
bottom of the Sphinx README.

The patch is done against the 24ad0c778dad commit.

Maybe I did something wrong, but this patch adds the option -G
(--graphs) to sphinx-apidoc, and the effect is to add

.. inheritance-diagram:: foo

to the *.rst files, and the two needed extensions to conf.py (made by
patching quickstart.py)

I hope that my little patch will be useful, best regards,

Mark Caglienzi

-- 
. ''`.  | GPG Public Key  : 0xCD542422 - Download it from http://is.gd/fOa7Vm
: :'  : | GPG Fingerprint : 0823 A40D F31B 67A8 5621 AD32 E293 A2EB CD54 2422
`. `'`  | Powered by Debian GNU/Linux, http://www.debian.org
  `-    | Try not. Do, or do not. There is no try. - Master Yoda, TESB.
diff -cB before/apidoc.py after/apidoc.py
*** before/apidoc.py	2012-05-10 07:13:42.000000000 +0200
--- after/apidoc.py	2012-05-10 07:21:13.000000000 +0200
***************
*** 68,76 ****
      return '%s\n%s\n\n' % (text, underlining)
  
  
! def format_directive(module, package=None):
      """Create the automodule directive and add the options."""
!     directive = '.. automodule:: %s\n' % makename(package, module)
      for option in OPTIONS:
          directive += '    :%s:\n' % option
      return directive
--- 68,79 ----
      return '%s\n%s\n\n' % (text, underlining)
  
  
! def format_directive(module, package=None, opts=None):
      """Create the automodule directive and add the options."""
!     directive = ''
!     if opts.graphs:
!         directive += '.. inheritance-diagram:: %s\n' % makename(package, module)
!     directive += '.. automodule:: %s\n' % makename(package, module)
      for option in OPTIONS:
          directive += '    :%s:\n' % option
      return directive
***************
*** 80,86 ****
      """Build the text of the file and write the file."""
      text = format_heading(1, '%s Module' % module)
      #text += format_heading(2, ':mod:`%s` Module' % module)
!     text += format_directive(module, package)
      write_file(makename(package, module), text, opts)
  
  
--- 83,89 ----
      """Build the text of the file and write the file."""
      text = format_heading(1, '%s Module' % module)
      #text += format_heading(2, ':mod:`%s` Module' % module)
!     text += format_directive(module, package, opts)
      write_file(makename(package, module), text, opts)
  
  
***************
*** 101,107 ****
              heading = ':mod:`%s` Module' % py_file
          text += format_heading(2, heading)
          text += format_directive(is_package and subroot or py_path,
!                                  master_package)
          text += '\n'
  
      # build a list of directories that are packages (contain an INITPY file)
--- 104,110 ----
              heading = ':mod:`%s` Module' % py_file
          text += format_heading(2, heading)
          text += format_directive(is_package and subroot or py_path,
!                                  master_package, opts)
          text += '\n'
  
      # build a list of directories that are packages (contain an INITPY file)
***************
*** 250,255 ****
--- 253,260 ----
                        help='Run the script without creating files')
      parser.add_option('-T', '--no-toc', action='store_true', dest='notoc',
                        help='Don\'t create a table of contents file')
+     parser.add_option('-G', '--graphs', action='store_true', dest='graphs',
+                       help='Generate inheritance graphs using Graphviz')
      parser.add_option('-s', '--suffix', action='store', dest='suffix',
                        help='file suffix (default: rst)', default='rst')
      parser.add_option('-F', '--full', action='store_true', dest='full',
***************
*** 308,318 ****
--- 313,328 ----
              epub = True,
              ext_autodoc = True,
              ext_viewcode = True,
+             ext_graphviz = False,
+             ext_inheritance_diagram = False,
              makefile = True,
              batchfile = True,
              mastertocmaxdepth = opts.maxdepth,
              mastertoctree = text,
          )
+         if opts.graphs:
+             d['ext_graphviz'] = True
+             d['ext_inheritance_diagram'] = True
          if not opts.dryrun:
              qs.generate(d, silent=True, overwrite=opts.force)
      elif not opts.notoc:
diff -cB before/quickstart.py after/quickstart.py
*** before/quickstart.py	2012-05-10 07:13:47.000000000 +0200
--- after/quickstart.py	2012-05-10 07:22:34.000000000 +0200
***************
*** 976,982 ****
      d['extensions'] = ', '.join(
          repr('sphinx.ext.' + name)
          for name in ('autodoc', 'doctest', 'intersphinx', 'todo', 'coverage',
!                      'pngmath', 'mathjax', 'ifconfig', 'viewcode')
          if d.get('ext_' + name))
      d['copyright'] = time.strftime('%Y') + ', ' + d['author']
      d['author_texescaped'] = unicode(d['author']).\
--- 976,983 ----
      d['extensions'] = ', '.join(
          repr('sphinx.ext.' + name)
          for name in ('autodoc', 'doctest', 'intersphinx', 'todo', 'coverage',
!                      'pngmath', 'mathjax', 'ifconfig', 'viewcode', 'graphviz',
!                      'inheritance_diagram')
          if d.get('ext_' + name))
      d['copyright'] = time.strftime('%Y') + ', ' + d['author']
      d['author_texescaped'] = unicode(d['author']).\

Attachment: signature.asc
Description: Digital signature

Reply via email to