|
@@ -0,0 +1,72 @@
|
|
|
+# -*- coding: utf-8 -*-
|
|
|
+"""
|
|
|
+celery.contrib.sphinx
|
|
|
+=====================
|
|
|
+
|
|
|
+Sphinx documentation plugin
|
|
|
+
|
|
|
+**Usage**
|
|
|
+
|
|
|
+Add the extension to your :file:`docs/conf.py` configuration module:
|
|
|
+
|
|
|
+.. code-block:: python
|
|
|
+
|
|
|
+ extensions = (...,
|
|
|
+ 'celery.contrib.sphinx')
|
|
|
+
|
|
|
+If you would like to change the prefix for tasks in reference documentation
|
|
|
+then you can change the ``celery_task_prefix`` configuration value:
|
|
|
+
|
|
|
+.. code-block:: python
|
|
|
+
|
|
|
+ celery_task_prefix = '(task)' # < default
|
|
|
+
|
|
|
+
|
|
|
+With the extension installed `autodoc` will automatically find
|
|
|
+task decorated objects and generate the correct (as well as add a ``(task)``
|
|
|
+prefix), and you can also refer to the tasks using `:task:proj.tasks.add` syntax.
|
|
|
+
|
|
|
+Use ``.. autotask::`` to manually document a task.
|
|
|
+
|
|
|
+"""
|
|
|
+from __future__ import absolute_import
|
|
|
+
|
|
|
+from inspect import ArgSpec, formatargspec, getargs, getargspec
|
|
|
+
|
|
|
+from sphinx.domains.python import PyModulelevel
|
|
|
+from sphinx.ext.autodoc import FunctionDocumenter
|
|
|
+
|
|
|
+from celery.app.task import BaseTask
|
|
|
+
|
|
|
+
|
|
|
+class TaskDocumenter(FunctionDocumenter):
|
|
|
+ objtype = 'task'
|
|
|
+ member_order = 11
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def can_document_member(cls, member, membername, isattr, parent):
|
|
|
+ return isinstance(member, BaseTask) and getattr(member, '__wrapped__')
|
|
|
+
|
|
|
+ def format_args(self):
|
|
|
+ wrapped = getattr(self.object, '__wrapped__')
|
|
|
+ if wrapped is not None:
|
|
|
+ argspec = getargspec(wrapped)
|
|
|
+ fmt = formatargspec(*argspec)
|
|
|
+ fmt = fmt.replace('\\', '\\\\')
|
|
|
+ return fmt
|
|
|
+ return ''
|
|
|
+
|
|
|
+ def document_members(self, all_members=False):
|
|
|
+ pass
|
|
|
+
|
|
|
+
|
|
|
+class TaskDirective(PyModulelevel):
|
|
|
+
|
|
|
+ def get_signature_prefix(self, sig):
|
|
|
+ return self.env.config.celery_task_prefix
|
|
|
+
|
|
|
+
|
|
|
+def setup(app):
|
|
|
+ app.add_autodocumenter(TaskDocumenter)
|
|
|
+ app.domains['py'].directives['task'] = TaskDirective
|
|
|
+ app.add_config_value('celery_task_prefix', '(task)', True)
|