I took a look at the latest autodoc source and started working from
Sphinx trunk. I thought it might be a simple matter of subclassing the
FunctionDocumenter. Here is what I tried in my conf.py:
class TaskDocumenter(autodoc.FunctionDocumenter):
objtype = "task"
directivetype = "autofunction"
@classmethod
def can_document_member(cls, member, membername, isattr, parent):
print "I'm checking ", membername, isinstance(member, Task)
return isinstance(member, Task)
autodoc.add_documenter(TaskDocumenter)
>From the print statement, I can see it check things out and find the
Task objects. But, it doesn't work... it hits this exception:
Traceback (most recent call last):
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
Sphinx-0.6dev_20090316-py2.5.egg/sphinx/cmdline.py", line 172, in main
app.build(all_files, filenames)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
Sphinx-0.6dev_20090316-py2.5.egg/sphinx/application.py", line 129, in
build
self.builder.build_update()
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
Sphinx-0.6dev_20090316-py2.5.egg/sphinx/builders/__init__.py", line
255, in build_update
'out of date' % len(to_build))
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
Sphinx-0.6dev_20090316-py2.5.egg/sphinx/builders/__init__.py", line
275, in build
purple, length):
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
Sphinx-0.6dev_20090316-py2.5.egg/sphinx/builders/__init__.py", line
131, in status_iterator
for item in iterable:
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
Sphinx-0.6dev_20090316-py2.5.egg/sphinx/environment.py", line 513, in
update_generator
self.read_doc(docname, app=app)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
Sphinx-0.6dev_20090316-py2.5.egg/sphinx/environment.py", line 604, in
read_doc
pub.publish()
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/core.py", line 204, in publish
self.settings)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/readers/__init__.py", line 69, in read
self.parse()
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/readers/__init__.py", line 75, in
parse
self.parser.parse(self.input, document)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/parsers/rst/__init__.py", line 157, in
parse
self.statemachine.run(inputlines, document, inliner=self.inliner)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/parsers/rst/states.py", line 170, in
run
input_source=document['source'])
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/statemachine.py", line 232, in run
context, state, transitions)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/statemachine.py", line 420, in
check_line
return method(match, context, next_state)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/parsers/rst/states.py", line 2658, in
underline
self.section(title, source, style, lineno - 1, messages)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/parsers/rst/states.py", line 308, in
section
self.new_subsection(title, lineno, messages)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/parsers/rst/states.py", line 376, in
new_subsection
node=section_node, match_titles=1)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/parsers/rst/states.py", line 266, in
nested_parse
node=node, match_titles=match_titles)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/parsers/rst/states.py", line 195, in
run
results = StateMachineWS.run(self, input_lines, input_offset)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/statemachine.py", line 232, in run
context, state, transitions)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/statemachine.py", line 420, in
check_line
return method(match, context, next_state)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/parsers/rst/states.py", line 2239, in
explicit_markup
nodelist, blank_finish = self.explicit_construct(match)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/parsers/rst/states.py", line 2251, in
explicit_construct
return method(self, expmatch)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/parsers/rst/states.py", line 1994, in
directive
directive_class, match, type_name, option_presets)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/parsers/rst/states.py", line 2043, in
run_directive
result = directive_instance.run()
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
Sphinx-0.6dev_20090316-py2.5.egg/sphinx/ext/autodoc.py", line 1081, in
run
nested_parse_with_titles(self.state, self.result, node)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
Sphinx-0.6dev_20090316-py2.5.egg/sphinx/util/__init__.py", line 288,
in nested_parse_with_titles
return state.nested_parse(content, 0, node, match_titles=1)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/parsers/rst/states.py", line 266, in
nested_parse
node=node, match_titles=match_titles)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/parsers/rst/states.py", line 195, in
run
results = StateMachineWS.run(self, input_lines, input_offset)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/statemachine.py", line 232, in run
context, state, transitions)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/statemachine.py", line 420, in
check_line
return method(match, context, next_state)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/parsers/rst/states.py", line 2241, in
explicit_markup
self.explicit_list(blank_finish)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/parsers/rst/states.py", line 2269, in
explicit_list
match_titles=self.state_machine.match_titles)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/parsers/rst/states.py", line 300, in
nested_list_parse
node=node, match_titles=match_titles)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/parsers/rst/states.py", line 195, in
run
results = StateMachineWS.run(self, input_lines, input_offset)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/statemachine.py", line 232, in run
context, state, transitions)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/statemachine.py", line 420, in
check_line
return method(match, context, next_state)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/parsers/rst/states.py", line 2542, in
explicit_markup
nodelist, blank_finish = self.explicit_construct(match)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/parsers/rst/states.py", line 2251, in
explicit_construct
return method(self, expmatch)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/parsers/rst/states.py", line 1994, in
directive
directive_class, match, type_name, option_presets)
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/parsers/rst/states.py", line 2043, in
run_directive
result = directive_instance.run()
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
Sphinx-0.6dev_20090316-py2.5.egg/sphinx/ext/autodoc.py", line 1059, in
run
self.options.items(), doc_class.option_spec))
File "/Users/admin/projects/paver/paver/lib/python2.5/site-packages/
docutils-0.5-py2.5.egg/docutils/utils.py", line 308, in
assemble_option_dict
convertor = options_spec[name] # raises KeyError if unknown
KeyError: 'module'
I made sure the __module__ was being set on my Task objects. I'm not
sure why this wouldn't work with Tasks just as it does with
functions...
I'll do some more digging later, but this is all could do for the
moment.
Kevin
On Mar 15, 11:07 pm, Kevin Dangoor <[email protected]> wrote:
> I'm having trouble with Paver's documentation generated via autodoc
> for some modules, and I wondered if there's any useful suggestions for
> how to approach this problem. I admit that I haven't looked at the
> autodoc code yet.
>
> A Paver Task looks like this:
>
> @task
> def my_task():
> "Foo"
> pass
>
> Paver 0.8 used decorators just to store information in a registry and
> the function object itself was left alone. With Paver 1.0, the
> functions are truly decorated with a new callable. The callable that
> replaces the original function has its __doc__ set to the function's
> __doc__. (I also tried using functools.update_wrapper to set things).
>
> I'm thinking that autodoc is just skipping over these objects because
> they're not actual "Function" objects any more. Is that the case?
> Would it be reasonable to just document anything that's callable?
>
> Kevin
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"sphinx-dev" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/sphinx-dev?hl=en
-~----------~----~----~----~------~----~------~--~---