Commits

Mike Bayer committed 641c936

- add new sphinx handlers to render method and attribute inheritance
for inherited members

Comments (0)

Files changed (2)

doc/build/builder/builders.py

         LatexFormatter.format(self, self._filter_tokens(tokensource), outfile)
 
 def autodoc_skip_member(app, what, name, obj, skip, options):
-    if what == 'class' and skip and name in ('__init__', '__eq__', '__ne__', '__lt__', '__le__') and obj.__doc__:
+    if what == 'class' and skip and \
+        name in ('__init__', '__eq__', '__ne__', '__lt__', '__le__') and \
+        obj.__doc__:
         return False
     else:
         return skip
 
+# im sure this is in the app somewhere, but I don't really
+# know where, so we're doing it here.
+_track_autodoced = {}
+def autodoc_process_docstring(app, what, name, obj, options, lines):
+    if what == "class":
+        _track_autodoced[name] = obj
+    elif what in ("attribute", "method") and \
+        options.get("inherited-members"):
+        m = re.match(r'(.*?)\.([\w_]+)$', name)
+        if m:
+            clsname, attrname = m.group(1, 2)
+            if clsname in _track_autodoced:
+                cls = _track_autodoced[clsname]
+                for supercls in cls.__mro__:
+                    if attrname in supercls.__dict__:
+                        break
+                if supercls is not cls:
+                    lines[:0] = [
+                        ".. container:: inherited_member",
+                        "",
+                        "    *inherited from the* :%s:`.%s.%s` *%s of* :class:`.%s`" % (
+                                    "attr" if what == "attribute"
+                                    else "meth",
+                                    supercls.__name__,
+                                    attrname,
+                                    what,
+                                    supercls.__name__
+                                ),
+                        ""
+                    ]
+
 def setup(app):
     app.add_lexer('pycon+sql', PyConWithSQLLexer())
     app.add_lexer('python+sql', PythonWithSQLLexer())
     app.add_config_value('site_base', "", True)
     app.add_config_value('build_number', "", 1)
     app.connect('autodoc-skip-member', autodoc_skip_member)
+    app.connect('autodoc-process-docstring', autodoc_process_docstring)
     PygmentsBridge.html_formatter = PopupSQLFormatter
     PygmentsBridge.latex_formatter = PopupLatexFormatter
 

doc/build/static/docs.css

 }
 
 a {
-    font-weight:normal; 
+    font-weight:normal;
     text-decoration:none;
 }
 
 
 /* paragraph links after sections.
    These aren't visible until hovering
-   over the <h> tag, then have a 
+   over the <h> tag, then have a
    "reverse video" effect over the actual
    link
  */
 }
 
 #docs-container pre {
-  background-color: #f0f0f0;  
+  background-color: #f0f0f0;
   border: solid 1px #ccc;
   box-shadow: 2px 2px 3px #DFDFDF;
   padding:10px;
   line-height:1.2em;
 }
 
-#docs-container a.sql_link, 
+#docs-container a.sql_link,
 #docs-container .sql_link
 {
     text-decoration: none;
     box-shadow: 2px 2px 3px #DFDFDF;
 }
 
+div.inherited-member {
+    border:1px solid #CCCCCC;
+    padding:5px 5px;
+    font-size:.9em;
+    box-shadow: 2px 2px 3px #DFDFDF;
+}
+
 p.versionadded span.versionmodified,
 p.versionchanged span.versionmodified,
 p.deprecated span.versionmodified {
 }
 
 
+
 dt:target, span.highlight {
     background-color:#FBE54E;
 }
 .go {color:#804049;}
 
 
-/* special "index page" sections 
+/* special "index page" sections
    with specific formatting
 */