sphinx/setup.py

256 lines
8.0 KiB
Python
Raw Normal View History

2009-10-22 11:07:31 -05:00
# -*- coding: utf-8 -*-
import os
import sys
from distutils import log
from distutils.cmd import Command
from io import StringIO
2008-02-09 17:09:36 -06:00
2018-01-27 10:52:16 -06:00
from setuptools import find_packages, setup
import sphinx
with open('README.rst') as f:
long_desc = f.read()
2008-03-18 14:37:05 -05:00
2016-09-01 11:19:47 -05:00
if sys.version_info < (2, 7) or (3, 0) <= sys.version_info < (3, 4):
print('ERROR: Sphinx requires at least Python 2.7 or 3.4 to run.')
sys.exit(1)
install_requires = [
2016-08-18 02:34:43 -05:00
'six>=1.5',
'Jinja2>=2.3',
2015-01-01 12:02:19 -06:00
'Pygments>=2.0',
'docutils>=0.11',
'snowballstemmer>=1.1',
'babel>=1.3,!=2.0',
'alabaster>=0.7,<0.8',
'imagesize',
'requests>=2.0.0',
'setuptools',
'packaging',
'sphinxcontrib-websupport',
]
extras_require = {
# Environment Marker works for wheel 0.24 or later
':sys_platform=="win32"': [
'colorama>=0.3.5',
],
2017-05-25 10:12:45 -05:00
':python_version<"3.5"': [
'typing'
],
2017-04-29 01:22:34 -05:00
'websupport': [
'sqlalchemy>=0.9',
'whoosh>=2.0',
2017-04-29 01:22:34 -05:00
],
'test': [
'mock',
2017-02-26 06:31:21 -06:00
'pytest',
'pytest-cov',
'html5lib',
'flake8>=3.5.0',
2018-01-27 10:52:16 -06:00
'flake8-import-order',
],
'test:python_version<"3"': [
'enum34',
],
'test:python_version>="3"': [
'mypy',
'typed_ast',
],
}
# Provide a "compile_catalog" command that also creates the translated
# JavaScript files if Babel is available.
2008-09-09 16:23:57 -05:00
cmdclass = {}
class Tee(object):
def __init__(self, stream):
self.stream = stream
self.buffer = StringIO()
def write(self, s):
self.stream.write(s)
self.buffer.write(s)
def flush(self):
self.stream.flush()
try:
from babel.messages.pofile import read_po
from babel.messages.frontend import compile_catalog
from json import dump
except ImportError:
pass
else:
class compile_catalog_plusjs(compile_catalog):
"""
An extended command that writes all message strings that occur in
JavaScript files to a JavaScript file along with the .mo file.
Unfortunately, babel's setup command isn't built very extensible, so
most of the run() code is duplicated here.
"""
def run(self):
try:
sys.stderr = Tee(sys.stderr)
compile_catalog.run(self)
finally:
if sys.stderr.buffer.getvalue():
print("Compiling failed.")
sys.exit(1)
if isinstance(self.domain, list):
for domain in self.domain:
self._run_domain_js(domain)
else:
self._run_domain_js(self.domain)
def _run_domain_js(self, domain):
po_files = []
js_files = []
if not self.input_file:
if self.locale:
po_files.append((self.locale,
os.path.join(self.directory, self.locale,
'LC_MESSAGES',
domain + '.po')))
js_files.append(os.path.join(self.directory, self.locale,
'LC_MESSAGES',
domain + '.js'))
else:
for locale in os.listdir(self.directory):
po_file = os.path.join(self.directory, locale,
'LC_MESSAGES',
domain + '.po')
if os.path.exists(po_file):
po_files.append((locale, po_file))
js_files.append(os.path.join(self.directory, locale,
'LC_MESSAGES',
domain + '.js'))
else:
po_files.append((self.locale, self.input_file))
if self.output_file:
js_files.append(self.output_file)
else:
js_files.append(os.path.join(self.directory, self.locale,
'LC_MESSAGES',
domain + '.js'))
for js_file, (locale, po_file) in zip(js_files, po_files):
2016-07-07 10:53:34 -05:00
with open(po_file, 'r') as infile:
catalog = read_po(infile, locale)
if catalog.fuzzy and not self.use_fuzzy:
continue
log.info('writing JavaScript strings in catalog %r to %r',
po_file, js_file)
jscatalog = {}
for message in catalog:
2014-09-01 09:16:54 -05:00
if any(x[0].endswith(('.js', '.js_t', '.html'))
for x in message.locations):
msgid = message.id
if isinstance(msgid, (list, tuple)):
msgid = msgid[0]
jscatalog[msgid] = message.string
with open(js_file, 'wt') as outfile:
outfile.write('Documentation.addTranslations(')
dump(dict(
messages=jscatalog,
plural_expr=catalog.plural_expr,
locale=str(catalog.locale)
2015-08-19 13:38:23 -05:00
), outfile, sort_keys=True)
outfile.write(');')
cmdclass['compile_catalog'] = compile_catalog_plusjs
class CompileGrammarCommand(Command):
description = 'Compile python grammar file for pycode'
user_options = []
def initialize_options(self):
pass
def finalize_options(self):
pass
def run(self):
from sphinx.pycode.pgen2.driver import compile_grammar
compile_grammar('sphinx/pycode/Grammar-py2.txt')
print('sphinx/pycode/Grammar-py2.txt ... done')
compile_grammar('sphinx/pycode/Grammar-py3.txt')
print('sphinx/pycode/Grammar-py3.txt ... done')
def sub_commands(self):
pass
2016-11-15 21:02:40 -06:00
cmdclass['compile_grammar'] = CompileGrammarCommand
2008-02-09 17:09:36 -06:00
setup(
name='Sphinx',
version=sphinx.__version__,
url='http://sphinx-doc.org/',
2015-02-27 10:10:03 -06:00
download_url='https://pypi.python.org/pypi/Sphinx',
2008-02-09 17:09:36 -06:00
license='BSD',
author='Georg Brandl',
author_email='georg@python.org',
description='Python documentation generator',
2008-03-18 14:37:05 -05:00
long_description=long_desc,
2008-02-09 17:09:36 -06:00
zip_safe=False,
2008-03-21 12:20:09 -05:00
classifiers=[
2010-05-24 18:08:52 -05:00
'Development Status :: 5 - Production/Stable',
2008-02-09 17:09:36 -06:00
'Environment :: Console',
'Environment :: Web Environment',
'Intended Audience :: Developers',
2010-05-24 18:08:52 -05:00
'Intended Audience :: Education',
2008-02-09 17:09:36 -06:00
'License :: OSI Approved :: BSD License',
'Operating System :: OS Independent',
'Programming Language :: Python',
2010-07-23 06:42:03 -05:00
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
2011-10-09 16:25:40 -05:00
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.4',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: Implementation :: CPython',
'Programming Language :: Python :: Implementation :: PyPy',
2014-11-26 18:58:53 -06:00
'Framework :: Sphinx',
'Framework :: Sphinx :: Extension',
'Framework :: Sphinx :: Theme',
2008-02-09 17:09:36 -06:00
'Topic :: Documentation',
2014-11-26 18:58:53 -06:00
'Topic :: Documentation :: Sphinx',
2010-05-24 18:08:52 -05:00
'Topic :: Text Processing',
2008-02-09 17:09:36 -06:00
'Topic :: Utilities',
],
platforms='any',
2018-01-28 00:11:59 -06:00
packages=find_packages(exclude=['tests', 'utils']),
2008-02-09 17:09:36 -06:00
include_package_data=True,
entry_points={
'console_scripts': [
'sphinx-build = sphinx.cmd.build:main',
'sphinx-quickstart = sphinx.cmd.quickstart:main',
'sphinx-apidoc = sphinx.ext.apidoc:main',
'sphinx-autogen = sphinx.ext.autosummary.generate:main',
],
'distutils.commands': [
'build_sphinx = sphinx.setup_command:BuildDoc',
],
2008-02-09 17:09:36 -06:00
},
install_requires=install_requires,
extras_require=extras_require,
cmdclass=cmdclass,
2008-02-09 17:09:36 -06:00
)