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
-~----------~----~----~----~------~----~------~--~---

Reply via email to