sphinx_celery-2.0.0/ 0000755 0001750 0001750 00000000000 13500164225 014311 5 ustar omer omer 0000000 0000000 sphinx_celery-2.0.0/Changelog 0000644 0001750 0001750 00000005522 13500164121 016122 0 ustar omer omer 0000000 0000000 Changes ======= .. _version-2.0.0: 2.0.0 ===== :release-date: 2019-06-12 3:00 p.m. UTC+3 - Fix support for Sphinx 2.0 - Drop support for Shpinx < 2.0 .. _version-1.4.8: 1.4.8 ===== :release-date: 2019-03-29 12:28 p.m. UTC-8 - apicheck: Removes warning about directive automodule being overridden when running apicheck. Tested on :pypi:`Sphinx` versions 1.7.1, 1.8.0, 1.8.5 and 2.0.0. .. _version-1.4.7: 1.4.7 ===== :release-date: 2019-03-29 10:00 a.m. UTC-8 - apicheck: Support for :pypi:`Sphinx` 2.0. .. _version-1.4.6: 1.4.6 ===== :release-date: 2019-02-13 2:00 p.m. UTC+2 - Fix links to object inventories. .. _version-1.4.5: 1.4.5 ===== :release-date: 2019-02-13 2:00 p.m. UTC+2 - Fix link to Kombu object inventory. .. _version-1.4.4: 1.4.4 ===== :release-date: 2019-02-13 2:00 p.m. UTC+2 - Revert entrypoint fix for now. .. _version-1.4.3: 1.4.3 ===== :release-date: 2019-02-13 2:00 p.m. UTC+2 - Fix entrypoint. .. _version-1.4.2: 1.4.2 ===== :release-date: 2019-02-13 2:00 p.m. UTC+2 - Use HTTPS for object inventories. - Fix deprecation warning. .. _version-1.4.1: 1.4.1 ===== - Update intersphinx mapping url for gevent - PEP8 fixes. .. _version-1.4.0: 1.4.0 ===== :release-date: 2017-03-15 11:26 p.m. PDT - Now requires :pypi:`Spinx` 1.7.1 - Added ``:wikipedia:`` extlink. - ``epub_title`` was hardcoded to Celery, now uses project name. - :pypi:`pytest` added as intersphinx mapping, :pypi:`nose` removed. - Removed unnecessary dependency on :pypi:`case` Contributed by Christopher Hoskin. - All extensions are now marked as ``read_parallel_safe``. Contributed by Omer Katz. - Fixed intersphinx URL and Github issue resolution. Contributed by George Psarakis. - Update :pypi:`msgpack-python` documentation URL Contributed by George Psarakis. .. _version-1.3.1: 1.3.1 ===== :release-date: 2016-08-10 01:40 p.m. PDT - No longer depends on sphinxcontrib-spelling. This library depends on the enchant C library being installed, and are crashing Travis builds. .. _version-1.3.0: 1.3.0 ===== :release-date: 2016-05-27 01:41 p.m. PDT - Removes dependency on non-Python3 compatible sphinxcontrib-cheeseshop The ``:pypi:`` role has been replaced using extlinks, so will still work. .. _version-1.2.0: 1.2.0 ===== :release-date: 2016-04-14 11:22 p.m. PDT - New extlink crossref type: ``:github_username:``. - New extlink crossref type: ``:github_branch:``. - New extlink crossref type: ``:sha:``. - Adds :pypi:`sphinxcontrib-spelling`. To check spelling mistakes run the following command: .. code-block:: console $ sphinx-build -b spelling .. _version-1.1.0: 1.1.0 ===== :release-date: 2016-04-08 04:18 p.m. PDT - New apicheck extension - New configcheck extension .. _version-1.0.0: 1.0.0 ===== :release-date: 2016-04-07 05:19 p.m. PDT :release-by: Ask Solem - Initial release sphinx_celery-2.0.0/LICENSE 0000644 0001750 0001750 00000004701 13430263735 015330 0 ustar omer omer 0000000 0000000 Copyright (c) 2012-2016 Ask Solem & contributors. All rights reserved. SPHINX_CELERY is licensed under The BSD License (3 Clause, also known as the new BSD license). The license is an OSI approved Open Source license and is GPL-compatible(1). The license text can also be found here: http://www.opensource.org/licenses/BSD-3-Clause License ======= Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Ask Solem, nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Ask Solem OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Documentation License ===================== The documentation portion of SPHINX_CELERY (the rendered contents of the "docs" directory of a software distribution or checkout) is supplied under the "Creative Commons Attribution-ShareAlike 4.0 International" (CC BY-SA 4.0) License as described by http://creativecommons.org/licenses/by-sa/4.0/ Footnotes ========= (1) A GPL-compatible license makes it possible to combine SPHINX_CELERY with other software that is released under the GPL, it does not mean that we're distributing SPHINX_CELERY under the GPL license. The BSD license, unlike the GPL, let you distribute a modified version without making your changes open source. sphinx_celery-2.0.0/MANIFEST.in 0000644 0001750 0001750 00000000457 13430263735 016065 0 ustar omer omer 0000000 0000000 include README.rst Changelog LICENSE recursive-include extra README *.py recursive-include requirements *.txt recursive-include sphinx_celery *.conf recursive-include sphinx_celery *.css_t recursive-include sphinx_celery *.html recursive-include sphinx_celery *.js recursive-include sphinx_celery *.css sphinx_celery-2.0.0/PKG-INFO 0000644 0001750 0001750 00000005313 13500164225 015410 0 ustar omer omer 0000000 0000000 Metadata-Version: 1.1 Name: sphinx_celery Version: 2.0.0 Summary: Sphinx Celery Theme. Home-page: http://github.com/celery/sphinx_celery Author: Ask Solem Author-email: ask@celeryproject.org License: BSD Description: ===================================================================== Celery Sphinx Utilities ===================================================================== :Version: 2.0.0 :Download: http://pypi.python.org/pypi/sphinx_celery/ :Source: http://github.com/celery/sphinx_celery/ :Keywords: Sphinx, documentation, python About ===== This project provides the Celery sphinx theme and common Sphinx utilities. .. _installation: Installation ============ You can install sphinx_celery either via the Python Package Index (PyPI) or from source. To install using `pip`,:: $ pip install -U sphinx_celery To install using `easy_install`,:: $ easy_install -U sphinx_celery .. _installing-from-source: Downloading and installing from source -------------------------------------- Download the latest version of sphinx_celery from http://pypi.python.org/pypi/sphinx_celery/ You can install it by doing the following,:: $ tar xvfz sphinx_celery.0.0.tar.gz $ cd sphinx_celery.0.0 $ python setup.py build # python setup.py install The last command must be executed as a privileged user if you are not currently using a virtualenv. .. _installing-from-git: Using the development version ----------------------------- With pip ~~~~~~~~ You can install the latest snapshot of sphinx_celery using the following pip command:: $ pip install https://github.com/celery/sphinx_celery#egg=sphinx_celery Keywords: sphinx docs Platform: any Classifier: Development Status :: 5 - Production/Stable Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 2.6 Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.3 Classifier: Programming Language :: Python :: 3.4 Classifier: Programming Language :: Python :: 3.5 Classifier: License :: OSI Approved :: BSD License Classifier: Intended Audience :: Developers Classifier: Operating System :: OS Independent sphinx_celery-2.0.0/README.rst 0000644 0001750 0001750 00000002632 13500164160 016001 0 ustar omer omer 0000000 0000000 ===================================================================== Celery Sphinx Utilities ===================================================================== :Version: 2.0.0 :Download: http://pypi.python.org/pypi/sphinx_celery/ :Source: http://github.com/celery/sphinx_celery/ :Keywords: Sphinx, documentation, python About ===== This project provides the Celery sphinx theme and common Sphinx utilities. .. _installation: Installation ============ You can install sphinx_celery either via the Python Package Index (PyPI) or from source. To install using `pip`,:: $ pip install -U sphinx_celery To install using `easy_install`,:: $ easy_install -U sphinx_celery .. _installing-from-source: Downloading and installing from source -------------------------------------- Download the latest version of sphinx_celery from http://pypi.python.org/pypi/sphinx_celery/ You can install it by doing the following,:: $ tar xvfz sphinx_celery.0.0.tar.gz $ cd sphinx_celery.0.0 $ python setup.py build # python setup.py install The last command must be executed as a privileged user if you are not currently using a virtualenv. .. _installing-from-git: Using the development version ----------------------------- With pip ~~~~~~~~ You can install the latest snapshot of sphinx_celery using the following pip command:: $ pip install https://github.com/celery/sphinx_celery#egg=sphinx_celery sphinx_celery-2.0.0/requirements/ 0000755 0001750 0001750 00000000000 13500164225 017034 5 ustar omer omer 0000000 0000000 sphinx_celery-2.0.0/requirements/default.txt 0000644 0001750 0001750 00000000016 13500164000 021205 0 ustar omer omer 0000000 0000000 Sphinx>=2.0.0 sphinx_celery-2.0.0/requirements/pkgutils.txt 0000644 0001750 0001750 00000000125 13430263735 021445 0 ustar omer omer 0000000 0000000 setuptools>=20.6.7 wheel>=0.29.0 flake8>=2.5.4 flakeplus>=1.1 tox>=2.3.1 bumpversion sphinx_celery-2.0.0/requirements/test.txt 0000644 0001750 0001750 00000000000 13430263735 020552 0 ustar omer omer 0000000 0000000 sphinx_celery-2.0.0/setup.cfg 0000644 0001750 0001750 00000000146 13500164225 016133 0 ustar omer omer 0000000 0000000 [nosetests] where = sphinx_celery/tests [wheel] universal = 1 [egg_info] tag_build = tag_date = 0 sphinx_celery-2.0.0/setup.py 0000644 0001750 0001750 00000006334 13500164000 016020 0 ustar omer omer 0000000 0000000 #!/usr/bin/env python # -*- coding: utf-8 -*- from setuptools import setup, find_packages import os import re import sys import codecs NAME = 'sphinx_celery' extra = {} # -*- Classifiers -*- classes = """ Development Status :: 5 - Production/Stable Programming Language :: Python Programming Language :: Python :: 2 Programming Language :: Python :: 2.7 Programming Language :: Python :: 2.6 Programming Language :: Python :: 3 Programming Language :: Python :: 3.3 Programming Language :: Python :: 3.4 Programming Language :: Python :: 3.5 License :: OSI Approved :: BSD License Intended Audience :: Developers Operating System :: OS Independent """ classifiers = [s.strip() for s in classes.split('\n') if s] # -*- Distribution Meta -*- re_meta = re.compile(r'__(\w+?)__\s*=\s*(.*)') re_doc = re.compile(r'^"""(.+?)"""') def add_default(m): attr_name, attr_value = m.groups() return ((attr_name, attr_value.strip("\"'")),) def add_doc(m): return (('doc', m.groups()[0]),) pats = {re_meta: add_default, re_doc: add_doc} here = os.path.abspath(os.path.dirname(__file__)) with open(os.path.join(here, 'sphinx_celery', '__init__.py')) as meta_fh: meta = {} for line in meta_fh: if line.strip() == '# -eof meta-': break for pattern, handler in pats.items(): m = pattern.match(line.strip()) if m: meta.update(handler(m)) # -*- Installation Requires -*- py_version = sys.version_info is_jython = sys.platform.startswith('java') is_pypy = hasattr(sys, 'pypy_version_info') def strip_comments(l): return l.split('#', 1)[0].strip() def _pip_requirement(req): if req.startswith('-r '): _, path = req.split() return reqs(*path.split('/')) return [req] def _reqs(*f): return [ _pip_requirement(r) for r in ( strip_comments(l) for l in open( os.path.join(os.getcwd(), 'requirements', *f)).readlines() ) if r] def reqs(*f): return [req for subreq in _reqs(*f) for req in subreq] # -*- Long Description -*- if os.path.exists('README.rst'): long_description = codecs.open('README.rst', 'r', 'utf-8').read() else: long_description = 'See http://pypi.python.org/pypi/sphinx_celery/' # -*- Entry Points -*- # # -*- %%% -*- setup( name=NAME, version=meta['version'], description=meta['doc'], author=meta['author'], author_email=meta['contact'], url=meta['homepage'], platforms=['any'], license='BSD', keywords='sphinx docs', packages=find_packages(exclude=['ez_setup', 'tests', 'tests.*']), package_data={ 'sphinx_celery': [ 'theme.conf', ], os.path.join('sphinx_celery', 'static'): [ 'celery.css_t', ], os.path.join('sphinx_celery', 'templates'): [ 'page.html', ], }, include_package_data=True, zip_safe=False, install_requires=reqs('default.txt'), tests_require=reqs('test.txt'), test_suite='nose.collector', classifiers=classifiers, entry_points={ 'sphinx.html_themes': [ 'sphinx_celery = sphinx_celery', ], }, long_description=long_description, **extra) sphinx_celery-2.0.0/sphinx_celery/ 0000755 0001750 0001750 00000000000 13500164225 017165 5 ustar omer omer 0000000 0000000 sphinx_celery-2.0.0/sphinx_celery/__init__.py 0000644 0001750 0001750 00000002173 13500164160 021277 0 ustar omer omer 0000000 0000000 """Sphinx Celery Theme.""" from __future__ import absolute_import, unicode_literals import os import re from collections import namedtuple __version__ = '2.0.0' __author__ = 'Ask Solem' __contact__ = 'ask@celeryproject.org' __homepage__ = 'http://github.com/celery/sphinx_celery' __docformat__ = 'restructuredtext' # -eof meta- __all__ = ['get_html_templates_path', 'get_html_theme_path', 'setup'] version_info_t = namedtuple('version_info_t', ( 'major', 'minor', 'micro', 'releaselevel', 'serial', )) # bumpversion can only search for {current_version} # so we have to parse the version here. _temp = re.match( r'(\d+)\.(\d+).(\d+)(.+)?', __version__).groups() VERSION = version_info = version_info_t( int(_temp[0]), int(_temp[1]), int(_temp[2]), _temp[3] or '', '') del(_temp) del(re) def get_html_theme_path(): return os.path.abspath(os.path.dirname(os.path.dirname(__file__))) def get_html_templates_path(): return os.path.join( os.path.abspath(os.path.dirname((__file__))), 'templates', ) def setup(app): app.add_html_theme('sphinx_celery', os.path.abspath(os.path.dirname(__file__))) sphinx_celery-2.0.0/sphinx_celery/apicheck.py 0000644 0001750 0001750 00000015224 13477674200 021326 0 ustar omer omer 0000000 0000000 """ Sphinx Autodoc coverage checker. ================================ This builder extension makes sure all modules in the documented package is represented in the autodoc API reference. Usage ----- .. code-block:: console $ sphinx-build -b apicheck -d _build/doctrees . _build/apicheck Configuration ------------- apicheck_ignore_modules ~~~~~~~~~~~~~~~~~~~~~~~ List of modules to ignore, either as module names or regexes. Example: .. code-block:: python apicheck_ignore_modules = [ 'django.utils.functional', r'django.db.*', ] Test packages are ignored by default, even if this setting is defined. apicheck_package ~~~~~~~~~~~~~~~~ The package to verify, can be the fully-qualified name of a module or an actual module. Example: .. code-block:: python apicheck_package = 'django' Default is the value of the ``project`` configuration key in all lowercase. apicheck_domains ~~~~~~~~~~~~~~~~ List of domains to check. Default is ``['py']`` and Python is the only domain currently supported. """ from __future__ import absolute_import, unicode_literals import importlib import os from collections import defaultdict from six import string_types import sphinx from sphinx.ext import autodoc from sphinx.util.console import bold, darkgreen, green, red from .builders import BaseBuilder from .utils import bytes_if_py2 DEFAULT_IGNORE = [r'.*?\.tests.*'] TITLEHEADER = '=' SUBHEADER = '-' ERR = 'ERROR' ERR_MISSING = '{error}: In index but module does not exist: {module}' ERR_UNDOCUMENTED = 'Undocumented Autodoc Modules' OK_STATUS = 'OK: All modules documented :o)' NOK_STATUS = """ {title} {undocumented}\ """ DOMAIN_FORMAT = """\ {domain} {modules} """ MODULE_FORMAT = '- {module}' class ModuleDocumenter(autodoc.ModuleDocumenter): missing_modules = set() def import_object(self): if not super(ModuleDocumenter, self).import_object(): self.missing_modules.add(self.modname) return False return True def title(s, spacing=2, sep=TITLEHEADER): return '\n'.join([ sep * (len(s) + spacing), '{0}{1}{0}'.format(' ' * (spacing // 2), red(s)), sep * (len(s) + spacing), ]) def header(s, sep=SUBHEADER): return '\n'.join([bold(s), sep * len(s)]) def find_python_modules(package): if isinstance(package, string_types): package = importlib.import_module(package) name, path = package.__name__, package.__file__ current_dist_depth = len(name.split('.')) - 1 current_dist = os.path.join(os.path.dirname(path), *([os.pardir] * current_dist_depth)) abs = os.path.abspath(current_dist) dist_name = os.path.basename(abs) for dirpath, _, filenames in os.walk(abs): package = (dist_name + dirpath[len(abs):]).replace('/', '.') if '__init__.py' in filenames: yield package for filename in filenames: if filename.endswith('.py') and filename != '__init__.py': yield '.'.join([package, filename])[:-3] class APICheckBuilder(BaseBuilder): name = 'apicheck' pickle_filename = 'apicheck.pickle' find_modules = { 'py': find_python_modules, } def init(self): self.ignore_patterns = self.compile_regexes( self.config.apicheck_ignore_modules + DEFAULT_IGNORE, ) self.check_domains = self.config.apicheck_domains self.check_package = ( self.config.apicheck_package or self.config.project.lower()) self.undocumented = defaultdict(list) self.all_modules = defaultdict(set) def is_ignored_module(self, module): return any(regex.match(module) for regex in self.ignore_patterns) def write(self, *ignored): for domain in self.check_domains: self.build_coverage(domain) self.check_missing() if not self.app.statuscode: self.write_coverage(self.check_domains) def build_coverage(self, domain): self.all_modules[domain].update(self.find_modules[domain]( self.check_package, )) self.undocumented[domain].extend(self.find_undocumented( domain, self.env.domaindata[domain]['modules'], )) def find_undocumented(self, domain, documented): return ( mod for mod in self.all_modules[domain] if mod not in documented and not self.is_ignored_module(mod) ) def write_coverage(self, domains): status = any(self.undocumented.values()) if status: self.app.statuscode = 2 print(self.format_undocumented_domains(domains)) else: print(green(OK_STATUS)) def check_missing(self): for mod in ModuleDocumenter.missing_modules: self.app.statuscode = 3 print(ERR_MISSING.format( error=red(ERR), module=bold(mod), )) def format_undocumented_domains(self, domains): return NOK_STATUS.format( title=title(ERR_UNDOCUMENTED), undocumented='\n'.join( self.format_undocumented_domain(domain) for domain in domains ), ) def format_undocumented_domain(self, domain): return DOMAIN_FORMAT.format(domain=header(domain), modules='\n'.join( self.format_undocumented_module(module) for module in self.undocumented[domain] )) def format_undocumented_module(self, module): return MODULE_FORMAT.format(module=darkgreen(module)) def as_dict(self): return { 'undocumented': dict(self.undocumented), } def _add_documenter_override(app, cls): # Install documenter for automodule without generating warning. from sphinx.ext.autodoc.directive import AutodocDirective app.registry.add_documenter(cls.objtype, cls) directive_name = 'auto' + cls.objtype if sphinx.version_info < (1, 8): try: from docutils.parsers.rst import directives except ImportError: pass else: directives._directives.pop(directive_name, None) app.add_directive(directive_name, AutodocDirective) else: # override was added in Sphinx 1.8 app.add_directive(directive_name, AutodocDirective, override=True) def setup(app): app.add_builder(APICheckBuilder) app.add_config_value( bytes_if_py2('apicheck_ignore_modules'), [], False) app.add_config_value( bytes_if_py2('apicheck_domains'), ['py'], False) app.add_config_value( bytes_if_py2('apicheck_package'), None, False) _add_documenter_override(app, ModuleDocumenter) return { 'parallel_read_safe': True, } sphinx_celery-2.0.0/sphinx_celery/autodocargspec.py 0000644 0001750 0001750 00000001073 13430264526 022552 0 ustar omer omer 0000000 0000000 from __future__ import absolute_import, unicode_literals from sphinx.ext import autodoc as _autodoc from sphinx.util import inspect def wrapped_getargspec(fun, *args, **kwargs): while 1: try: wrapped = fun.__wrapped__ if wrapped is fun: break fun = wrapped except AttributeError: break return inspect.getargspec(fun, *args, **kwargs) _autodoc.getargspec = wrapped_getargspec def setup(app): app.require_sphinx('1.0') return { 'parallel_read_safe': True } sphinx_celery-2.0.0/sphinx_celery/builders.py 0000644 0001750 0001750 00000001657 13430264525 021367 0 ustar omer omer 0000000 0000000 from __future__ import absolute_import, unicode_literals import os import pickle import re from sphinx.builders import Builder ERR_INVALID_REGEX = 'Invalid regex {0!r} in apicheck_ignore_modules: {1!r}' class BaseBuilder(Builder): def get_outdated_docs(self): return '{0} overview'.format(self.name) def finish(self): picklepath = os.path.join(self.outdir, self.pickle_filename) with open(picklepath, mode='wb') as fh: pickle.dump(self.as_dict(), fh) def compile_regex(self, regex): if not regex.startswith('^'): regex = '^{0}'.format(regex) if not regex.endswith('$'): regex = '{0}$'.format(regex) try: return re.compile(regex) except Exception as exc: self.warn(ERR_INVALID_REGEX.format(regex, exc)) def compile_regexes(self, regexes): return [self.compile_regex(regex) for regex in regexes] sphinx_celery-2.0.0/sphinx_celery/conf.py 0000644 0001750 0001750 00000025135 13431003346 020471 0 ustar omer omer 0000000 0000000 # -*- coding: utf-8 -*- from __future__ import absolute_import, unicode_literals import os import sys from . import get_html_templates_path PY3 = sys.version_info[0] >= 3 LINKCODE_URL = 'https://github.com/{proj}/tree/{branch}/{filename}.py' GITHUB_BRANCH = 'master' EXTENSIONS = [ 'sphinx.ext.autodoc', 'sphinx.ext.intersphinx', 'sphinx.ext.todo', 'sphinx.ext.coverage', 'sphinx.ext.imgmath', 'sphinx.ext.ifconfig', 'sphinx.ext.viewcode', 'sphinx.ext.extlinks', 'sphinx_celery.autodocargspec', 'sphinx_celery.github_issues', 'sphinx_celery.signal_crossref', 'sphinx_celery.setting_crossref', 'sphinx_celery.apicheck', 'sphinx_celery.configcheck', ] INTERSPHINX_MAPPING = { 'python': ('https://docs.python.org/dev/', None), 'sphinx': ('https://www.sphinx-doc.org/en/stable/', None), 'kombu': ('https://kombu.readthedocs.io/en/master/', None), 'celery': ('https://docs.celeryproject.org/en/master', None), 'djcelery': ('https://django-celery.readthedocs.io/en/latest/', None), 'cyme': ('https://cyme.readthedocs.io/en/latest/', None), 'amqp': ('https://amqp.readthedocs.io/en/latest/', None), 'vine': ('https://vine.readthedocs.io/en/latest/', None), 'flower': ('https://flower.readthedocs.io/en/latest/', None), 'redis': ('https://redis-py.readthedocs.io/en/latest/', None), 'django': ('https://django.readthedocs.io/en/latest/', None), 'boto': ('https://boto.readthedocs.io/en/latest/', None), 'sqlalchemy': ('https://sqlalchemy.readthedocs.io/en/latest', None), 'kazoo': ('https://kazoo.readthedocs.io/en/latest/', None), 'msgpack': ('https://msgpack-python.readthedocs.io/en/latest/', None), 'riak': ('https://basho.github.io/riak-python-client/', None), 'pylibmc': ('http://sendapatch.se/projects/pylibmc/', None), 'eventlet': ('https://eventlet.net/doc/', None), 'gevent': ('http://www.gevent.org/', None), 'pyOpenSSL': ('https://pyopenssl.readthedocs.io/en/stable/', None), 'pytest': ('https://doc.pytest.org/en/latest/', None), 'tox': ('https://tox.readthedocs.io/en/latest', None), } string_types = (str,) if PY3 else (basestring,) def add_paths(config_file, path_additions): this = os.path.dirname(os.path.abspath(config_file)) sys.path.insert(0, os.path.join(this, os.pardir)) for path in path_additions: sys.path.append(os.path.join(this, path)) def configure_django(django_settings, **config): if django_settings: os.environ['DJANGO_SETTINGS_MODULE'] = django_settings else: from django.conf import settings # noqa if not settings.configured: settings.configure(**config) try: from django import setup as django_setup except ImportError: pass else: django_setup() def import_package(package): if isinstance(package, string_types): return __import__(package) return package def prepare_intersphinx_mapping(project, mapping, include, exclude, **extra): if include: mapping = dict((k, v) for k, v in mapping.items() if k in include) if exclude: mapping = dict((k, v) for k, v in mapping.items() if k not in exclude) mapping = dict(mapping, **extra) # Remove project itself from intersphinx mapping.pop(project.lower(), None) return mapping def create_linkcode_resolver(linkcode_url, github_project, github_branch): def linkcode_resolve(domain, info): if domain != 'py' or not info['module']: return filename = info['module'].replace('.', '/') return linkcode_url.format( proj=github_project, branch=github_branch, filename=filename, ) return linkcode_resolve def build_config( package, config_file, project, author=None, author_name=None, github_project=None, webdomain=None, canonical_url=None, canonical_stable_url=None, canonical_dev_url=None, django_settings=None, configure_django_settings={}, copyright=None, publisher=None, description='', path_additions=['_ext'], version_dev=None, version_stable=None, extensions=EXTENSIONS, extra_extensions=[], linkcode_url=LINKCODE_URL, github_branch=GITHUB_BRANCH, master_doc='index', html_logo=None, html_prepend_sidebars=[], templates_path=None, latex_logo=None, intersphinx_mapping=INTERSPHINX_MAPPING, extra_intersphinx_mapping={}, include_intersphinx=frozenset(), exclude_intersphinx=frozenset(), spelling_lang='en_US', spelling_show_suggestions=True, extlinks=None, **kwargs): add_paths(config_file, path_additions) if configure_django_settings or django_settings: configure_django(django_settings, **configure_django_settings or {}) package = import_package(package) description = description or package.__doc__ author = author or package.__author__ author_name = author_name or author extlinks = extlinks or {} extlinks.setdefault('sha', ( 'https://github.com/{0}/commit/%s'.format(github_project), 'GitHub SHA@', )) extlinks.setdefault('github_branch', ( 'https://github.com/{0}/tree/%s'.format(github_project), 'GitHub branch', )) extlinks.setdefault('github_user', ( 'https://github.com/%s/', '@', )) extlinks.setdefault('pypi', ( 'https://pypi.python.org/pypi/%s/', '', )) extlinks.setdefault('wikipedia', ( 'https://en.wikipedia.org/wiki/%s', '', )) if not canonical_dev_url: canonical_dev_url = '/'.join([ canonical_url.rstrip('/'), 'en', 'master', ]) if not canonical_stable_url: canonical_stable_url = '/'.join([ canonical_url.rstrip('/'), 'en', 'latest', ]) if templates_path is None: templates_path = ['_templates'] if version_dev: templates_path.append(get_html_templates_path()) version = '.'.join(map(str, package.VERSION[0:2])) extensions = extensions + extra_extensions if os.environ.get('SPELLCHECK'): extensions.append('sphinxcontrib.spelling') conf = dict( extensions=extensions + extra_extensions, project=project, github_project=github_project, html_show_sphinx=False, # Add any paths that contain templates here, # relative to this directory. templates_path=templates_path, # The suffix of source filenames. source_suffix='.rst', # The master toctree document. master_doc=master_doc, copyright='{0}, {1}'.format(copyright, author), # The short X.Y version. version=version, # The full version, including alpha/beta/rc tags. release=package.__version__, exclude_patterns=['_build', 'Thumbs.db', '.DS_Store'], # If true, '()' will be appended to :func: etc. cross-reference text. add_function_parentheses=True, linkcode_resolve=create_linkcode_resolver( linkcode_url, github_project, github_branch, ), intersphinx_mapping=prepare_intersphinx_mapping( project, intersphinx_mapping, include_intersphinx, exclude_intersphinx, **extra_intersphinx_mapping ), # The name of the Pygments (syntax highlighting) style to use. pygments_style='colorful', # Add any paths that contain custom static files # (such as style sheets) here, relative to this directory. # They are copied after the builtin static files, so a file named # "default.css" will overwrite the builtin "default.css". html_static_path=['_static'], add_module_names=True, highlight_language='python3', # If true, `todo` and `todoList` produce output, # else they produce nothing. todo_include_todos=True, # If false, no module index is generated. html_use_modindex=True, # If false, no index is generated. html_use_index=True, html_logo=html_logo, html_context={ 'version_dev': version_dev or version, 'version_stable': version_stable or version, 'canonical_stable_url': canonical_stable_url, 'canonical_dev_url': canonical_dev_url, }, man_pages=[ (master_doc, project.lower(), u'{0} Documentation'.format(project), [author_name], 1) ], # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents=[ (master_doc, project, u'{0} Documentation'.format(project), author_name, project, description, 'Miscellaneous'), ], latex_logo=latex_logo or html_logo, latex_documents=[ ('index', '{0}.tex'.format(project), '{0} Documentation'.format(project), author, 'manual'), ], html_theme='sphinx_celery', html_sidebars={ 'index': list(html_prepend_sidebars) + [ 'sourcelink.html', 'searchbox.html', ], '**': list(html_prepend_sidebars) + [ 'relations.html', 'sourcelink.html', 'searchbox.html', ], }, # Bibliographic Dublin Core info. epub_title='{0} Manual, Version {1}'.format(project, version), epub_author=author_name, epub_publisher=publisher or author_name, epub_copyright=copyright, # The language of the text. It defaults to the language option # or en if the language is not set. epub_language='en', # The scheme of the identifier. Typical schemes are ISBN or URL. epub_scheme='ISBN', # The unique identifier of the text. This can be a ISBN number # or the project homepage. epub_identifier=webdomain, # A unique identification for the text. epub_uid='{0} Manual, Version {0}'.format(project, version), # A list of files that should not be packed into the epub file. epub_exclude_files=['search.html'], # The depth of the table of contents in toc.ncx. epub_tocdepth=3, # -- spelling spelling_lang=spelling_lang, spelling_show_suggestions=spelling_show_suggestions, # -- extlinks extlinks=extlinks, ) return dict(conf, **kwargs) sphinx_celery-2.0.0/sphinx_celery/configcheck.py 0000644 0001750 0001750 00000006663 13430264525 022023 0 ustar omer omer 0000000 0000000 """ Sphinx Configuration Reference Checker ====================================== This builder extension makes sure all settings in the documented package are represented in the configuration reference ( meaning they all have ``.. setting::`` directives). Usage ----- .. code-block:: console $ sphinx-build -b configcheck -d _build/doctrees . _build/configcheck Configuration ------------- configcheck_ignore_settings ~~~~~~~~~~~~~~~~~~~~~~~~~~~ List of settings to ignore, either as setting names or regexes. Example: .. code-block:: python configcheck_ignore_settings = [ 'USE_TZ', r'.*SECRET.*', ] configcheck_project_settings ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A function returning a set of all setting names. Example: .. code-block:: python def configcheck_project_settings(): from django import conf return set(conf._all_settings) configcheck_should_ignore ~~~~~~~~~~~~~~~~~~~~~~~~~ Optional function that can be used in addition to ``configcheck_ignore_settings`` to ignore setting names programmatically. Example: .. code-block:: python def configcheck_should_ignore(setting): from django import conf return conf.is_deprecated(setting) """ from __future__ import absolute_import, unicode_literals from six import iterkeys as keys from sphinx.util.console import bold, green, red from .builders import BaseBuilder from .utils import bytes_if_py2 ERR = 'ERROR' ERR_MISSING_DOC = '{error}: Setting not documented: {name}' OK_STATUS = 'OK: All settings documented :o)' class ConfigCheckBuilder(BaseBuilder): name = 'configcheck' pickle_filename = 'configcheck.pickle' def init(self): self.ignore_patterns = self.compile_regexes( self.config.configcheck_ignore_settings, ) self.should_ignore = ( self.config.configcheck_should_ignore or (lambda s: False)) self.project_settings = self.config.configcheck_project_settings self.undocumented = set() def is_ignored_setting(self, setting): return self.should_ignore(setting) or any( regex.match(setting) for regex in self.ignore_patterns) def write(self, *ignored): self.check_missing() def documented_settings(self): return { name for reftype, name in keys( self.app.env.domaindata['std']['objects']) if reftype == 'setting' } def check_missing(self): all_settings = self.project_settings() documented_settings = self.documented_settings() self.undocumented.update( setting for setting in all_settings ^ documented_settings if not self.is_ignored_setting(setting) ) for setting in self.undocumented: self.app.statuscode = 2 print(ERR_MISSING_DOC.format( error=red(ERR), name=bold(setting), )) if not self.app.statuscode: print(green(OK_STATUS)) def as_dict(self): return { 'undocumented': self.undocumented, } def setup(app): app.add_builder(ConfigCheckBuilder) app.add_config_value( bytes_if_py2('configcheck_ignore_settings'), [], False) app.add_config_value( bytes_if_py2('configcheck_project_settings'), None, False) app.add_config_value( bytes_if_py2('configcheck_should_ignore'), None, False) return { 'parallel_read_safe': True } sphinx_celery-2.0.0/sphinx_celery/github_issues.py 0000644 0001750 0001750 00000007104 13430264526 022425 0 ustar omer omer 0000000 0000000 """Stolen from sphinxcontrib-issuetracker. Had to modify this as the original will make one Github API request per issue, which is not at all needed if we just want to link to issues. """ from __future__ import absolute_import, unicode_literals import re import sys from collections import namedtuple from docutils import nodes from docutils.transforms import Transform from sphinx.roles import XRefRole from sphinx.addnodes import pending_xref URL = 'https://github.com/{project}/issues/{issue_id}' Issue = namedtuple('Issue', ('id', 'title', 'url')) if sys.version_info[0] == 3: str_t = text_t = str else: str_t = basestring text_t = unicode class IssueRole(XRefRole): innernodeclass = nodes.inline class Issues(Transform): default_priority = 999 def apply(self): config = self.document.settings.env.config github_project = config.github_project issue_pattern = config.github_issue_pattern if isinstance(issue_pattern, str_t): issue_pattern = re.compile(issue_pattern) for node in self.document.traverse(nodes.Text): parent = node.parent if isinstance(parent, (nodes.literal, nodes.FixedTextElement)): continue text = text_t(node) new_nodes = [] last_issue_ref_end = 0 for match in issue_pattern.finditer(text): head = text[last_issue_ref_end:match.start()] if head: new_nodes.append(nodes.Text(head)) last_issue_ref_end = match.end() issuetext = match.group(0) issue_id = match.group(1) refnode = pending_xref() refnode['reftarget'] = issue_id refnode['reftype'] = 'issue' refnode['refdomain'] = 'github' refnode['github_project'] = github_project reftitle = issuetext refnode.append(nodes.inline( issuetext, reftitle, classes=['xref', 'issue'])) new_nodes.append(refnode) if not new_nodes: continue tail = text[last_issue_ref_end:] if tail: new_nodes.append(nodes.Text(tail)) parent.replace(node, new_nodes) def make_issue_reference(issue, content_node): reference = nodes.reference() reference['refuri'] = issue.url if issue.title: reference['reftitle'] = issue.title reference.append(content_node) return reference def resolve_issue_reference(app, env, node, contnode): if node['reftype'] != 'issue': return issue_id = node['reftarget'] project = node['github_project'] issue = Issue(issue_id, None, URL.format(project=project, issue_id=issue_id)) conttext = text_t(contnode[0]) formatted_conttext = nodes.Text(conttext.format(issue=issue)) formatted_contnode = nodes.inline(conttext, formatted_conttext, classes=contnode['classes']) return make_issue_reference(issue, formatted_contnode) def init_transformer(app): app.add_transform(Issues) def setup(app): app.require_sphinx('1.0') app.add_role('issue', IssueRole()) app.add_config_value('github_project', None, 'env') app.add_config_value('github_issue_pattern', re.compile(r'[Ii]ssue #(\d+)'), 'env') app.connect(str('builder-inited'), init_transformer) app.connect(str('missing-reference'), resolve_issue_reference) return { 'parallel_read_safe': True } sphinx_celery-2.0.0/sphinx_celery/setting_crossref.py 0000644 0001750 0001750 00000000526 13430264525 023133 0 ustar omer omer 0000000 0000000 from __future__ import absolute_import, unicode_literals from .utils import bytes_if_py2 def setup(app): app.add_crossref_type( directivename=bytes_if_py2('setting'), rolename=bytes_if_py2('setting'), indextemplate=bytes_if_py2('pair: %s; setting'), ) return { 'parallel_read_safe': True } sphinx_celery-2.0.0/sphinx_celery/signal_crossref.py 0000644 0001750 0001750 00000000523 13430264525 022730 0 ustar omer omer 0000000 0000000 from __future__ import absolute_import, unicode_literals from .utils import bytes_if_py2 def setup(app): app.add_crossref_type( directivename=bytes_if_py2('signal'), rolename=bytes_if_py2('signal'), indextemplate=bytes_if_py2('pair: %s; signal'), ) return { 'parallel_read_safe': True } sphinx_celery-2.0.0/sphinx_celery/static/ 0000755 0001750 0001750 00000000000 13500164225 020454 5 ustar omer omer 0000000 0000000 sphinx_celery-2.0.0/sphinx_celery/static/celery.css_t 0000644 0001750 0001750 00000015034 13430263735 023007 0 ustar omer omer 0000000 0000000 /* * celery.css_t * ~~~~~~~~~~~~ * * :copyright: Copyright 2010 by Armin Ronacher. * :license: BSD, see LICENSE for details. */ {% set page_width = 940 %} {% set sidebar_width = 220 %} {% set body_font_stack = 'Optima, Segoe, "Segoe UI", Candara, Calibri, Arial, sans-serif' %} {% set headline_font_stack = 'Futura, "Trebuchet MS", Arial, sans-serif' %} {% set code_font_stack = "'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace" %} @import url("basic.css"); /* -- page layout ----------------------------------------------------------- */ body { font-family: {{ body_font_stack }}; font-size: 17px; background-color: white; color: #000; margin: 30px 0 0 0; padding: 0; } div.document { width: {{ page_width }}px; margin: 0 auto; } div.deck { font-size: 18px; } p.developmentversion { color: red; } div.related { width: {{ page_width - 20 }}px; padding: 5px 10px; background: #F2FCEE; margin: 15px auto 15px auto; } div.documentwrapper { float: left; width: 100%; } div.bodywrapper { margin: 0 0 0 {{ sidebar_width }}px; } div.sphinxsidebar { width: {{ sidebar_width }}px; } hr { border: 1px solid #B1B4B6; } div.body { background-color: #ffffff; color: #3E4349; padding: 0 30px 0 30px; } img.celerylogo { padding: 0 0 10px 10px; float: right; } div.footer { width: {{ page_width - 15 }}px; margin: 10px auto 30px auto; padding-right: 15px; font-size: 14px; color: #888; text-align: right; } div.footer a { color: #888; } div.sphinxsidebar a { color: #444; text-decoration: none; border-bottom: 1px dashed #DCF0D5; } div.sphinxsidebar a:hover { border-bottom: 1px solid #999; } div.sphinxsidebar { font-size: 14px; line-height: 1.5; } div.sphinxsidebarwrapper { padding: 7px 10px; } div.sphinxsidebarwrapper p.logo { padding: 0 0 20px 0; margin: 0; } div.sphinxsidebar h3, div.sphinxsidebar h4 { font-family: {{ headline_font_stack }}; color: #444; font-size: 24px; font-weight: normal; margin: 0 0 5px 0; padding: 0; } div.sphinxsidebar h4 { font-size: 20px; } div.sphinxsidebar h3 a { color: #444; } div.sphinxsidebar p.logo a, div.sphinxsidebar h3 a, div.sphinxsidebar p.logo a:hover, div.sphinxsidebar h3 a:hover { border: none; } div.sphinxsidebar p { color: #555; margin: 10px 0; } div.sphinxsidebar ul { margin: 10px 0; padding: 0; color: #000; } div.sphinxsidebar input { border: 1px solid #ccc; font-family: {{ body_font_stack }}; font-size: 1em; } /* -- body styles ----------------------------------------------------------- */ a { color: #348613; text-decoration: underline; } a:hover { color: #59B833; text-decoration: underline; } div.body h1, div.body h2, div.body h3, div.body h4, div.body h5, div.body h6 { font-family: {{ headline_font_stack }}; font-weight: normal; margin: 30px 0px 10px 0px; padding: 0; } div.body h1 { margin-top: 0; padding-top: 0; font-size: 200%; } div.body h2 { font-size: 180%; } div.body h3 { font-size: 150%; } div.body h4 { font-size: 130%; } div.body h5 { font-size: 100%; } div.body h6 { font-size: 100%; } div.body h1 a.toc-backref, div.body h2 a.toc-backref, div.body h3 a.toc-backref, div.body h4 a.toc-backref, div.body h5 a.toc-backref, div.body h6 a.toc-backref { color: inherit!important; text-decoration: none; } a.headerlink { color: #ddd; padding: 0 4px; text-decoration: none; } a.headerlink:hover { color: #444; background: #eaeaea; } div.body p, div.body dd, div.body li { line-height: 1.4em; } div.admonition { background: #fafafa; margin: 20px -30px; padding: 10px 30px; border-top: 1px solid #ccc; border-bottom: 1px solid #ccc; } div.admonition p.admonition-title { font-family: {{ headline_font_stack }}; font-weight: normal; font-size: 24px; margin: 0 0 10px 0; padding: 0; line-height: 1; } div.admonition p.last { margin-bottom: 0; } div.highlight{ background-color: white; } dt:target, .highlight { background: #FAF3E8; } div.note { background-color: #eee; border: 1px solid #ccc; } div.seealso { background-color: #ffc; border: 1px solid #ff6; } div.topic { background-color: #eee; } div.warning { background-color: #ffe4e4; border: 1px solid #f66; } p.admonition-title { display: inline; } p.admonition-title:after { content: ":"; } pre, tt { font-family: {{ code_font_stack }}; font-size: 0.9em; } img.screenshot { } tt.descname, tt.descclassname { font-size: 0.95em; } tt.descname { padding-right: 0.08em; } img.screenshot { -moz-box-shadow: 2px 2px 4px #eee; -webkit-box-shadow: 2px 2px 4px #eee; box-shadow: 2px 2px 4px #eee; } table.docutils { border: 1px solid #888; -moz-box-shadow: 2px 2px 4px #eee; -webkit-box-shadow: 2px 2px 4px #eee; box-shadow: 2px 2px 4px #eee; } table.docutils td, table.docutils th { border: 1px solid #888; padding: 0.25em 0.7em; } table.field-list, table.footnote { border: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } table.footnote { margin: 15px 0; width: 100%; border: 1px solid #eee; background: #fdfdfd; font-size: 0.9em; } table.footnote + table.footnote { margin-top: -15px; border-top: none; } table.field-list th { padding: 0 0.8em 0 0; } table.field-list td { padding: 0; } table.footnote td.label { width: 0px; padding: 0.3em 0 0.3em 0.5em; } table.footnote td { padding: 0.3em 0.5em; } dl { margin: 0; padding: 0; } dl dd { margin-left: 30px; } blockquote { margin: 0 0 0 30px; padding: 0; } ul { margin: 10px 0 10px 30px; padding: 0; } pre { background: #F0FFEB; padding: 7px 10px; margin: 15px 0; border: 1px solid #C7ECB8; border-radius: 2px; -moz-border-radius: 2px; -webkit-border-radius: 2px; line-height: 1.3em; } tt { background: #F0FFEB; color: #222; /* padding: 1px 2px; */ } tt.xref, a tt { background: #F0FFEB; border-bottom: 1px solid white; } a.reference { text-decoration: none; border-bottom: 1px dashed #DCF0D5; } a.reference:hover { border-bottom: 1px solid #6D4100; } a.footnote-reference { text-decoration: none; font-size: 0.7em; vertical-align: top; border-bottom: 1px dashed #DCF0D5; } a.footnote-reference:hover { border-bottom: 1px solid #6D4100; } a:hover tt { background: #EEE; } sphinx_celery-2.0.0/sphinx_celery/templates/ 0000755 0001750 0001750 00000000000 13500164225 021163 5 ustar omer omer 0000000 0000000 sphinx_celery-2.0.0/sphinx_celery/templates/page.html 0000644 0001750 0001750 00000001320 13430263735 022771 0 ustar omer omer 0000000 0000000 {% extends "layout.html" %} {% block body %}
This document is for {{ project }}'s development version, which can be significantly different from previous releases. Get the stable docs here: {{ version_stable }}.
{% else %}This document describes the current stable version of {{project}} ({{ version }}). For development docs, go here.
{% endif %}