# Sphinx configuration file.
#
# - import original configurations from cpython/Doc/conf.py
# - append the path considering the cpython submodule is at ./cpython
# - create the symbolic links under ./cpython/locale/es/LC_MESSAGES
# - make the build to work under Read the Docs
#
# The git submodule was created using this Stack Overflow answer
# to fetch only the commit that I needed and avoid clonning the whole history
# https://stackoverflow.com/a/27445058
#
# This can be built locally using `sphinx-build` by running
#
# $ sphinx-build -b html -d _build/doctrees -D language=es . _build/html
import sys
import os
import time
from pathlib import Path
sys.path.append(os.path.abspath('cpython/Doc/tools/extensions'))
sys.path.append(os.path.abspath('cpython/Doc/includes'))
# Import all the Sphinx settings from cpython.
# Warning: calling 'eval' and 'compile' is usually not recommended, but in this case
# we are relying on the official sphinx configuration from cpython.
cpython_sphinx_conf = Path(os.path.abspath('cpython/Doc/conf.py'))
eval(compile(cpython_sphinx_conf.read_bytes(), str(cpython_sphinx_conf), "exec"), globals())
project = 'Python en Espaol'
html_theme_path = ['cpython/Doc/tools']
templates_path = ['cpython/Doc/tools/templates']
html_static_path = ['cpython/Doc/tools/static']
os.system('mkdir -p cpython/locales/es/')
os.system('ln -nfs `pwd` cpython/locales/es/LC_MESSAGES')
html_short_title = f'Documentacin {release}'
html_title = f'Documentacin de Python en Espaol -- {release}'
# Extend settings from upstream
_exclude_patterns = [
# This file is not included and it's not marked as :orphan:
'distutils/_setuptools_disclaimer.rst',
'includes/wasm-notavail.rst',
]
if 'exclude_patterns' in globals():
exclude_patterns += _exclude_patterns
else:
exclude_patterns = _exclude_patterns
_extensions = [
'sphinx_autorun',
'sphinx_tabs.tabs',
'sphinxemoji.sphinxemoji',
]
if 'extensions' in globals():
extensions += _extensions
else:
extensions = _extensions
if os.environ.get('SPHINX_GETTEXT') is None:
# Override all the files from ``.overrides`` directory
overrides_paths = Path('.overrides')
for path in overrides_paths.glob('**/*.*'):
if path.name == 'README.rst' and path.parent == '.overrides':
continue
# Skip the files in the .overrides/logo directory
# to avoid ln issues.
if str(path.parent).endswith("logo"):
continue
destroot = str(path.parent).replace('.overrides', '').lstrip('/')
outputdir = Path('cpython/Doc') / destroot / path.name
os.system(f'ln -nfs `pwd`/{path.parent}/{path.name} {outputdir}')
gettext_compact = False
locale_dirs = ['../locales', 'cpython/locales'] # relative to the sourcedir
# NOTE: Read the Docs does not support "multi document output".
# So, we put all the documentation as a single file for now.
_stdauthor = r'Guido van Rossum\\and the Python development team'
latex_documents = [
('contents', 'python-docs-es.tex', u'Documentacin de Python en Espaol',
_stdauthor, 'manual'),
]
# autorun is used, among other things, to run potodo, which generates non-ascii output
# starting with 0.30. autorun OTOH defaults to use ascii to decode console/python output.
# Let's switch to utf-8 instead.
autorun_languages = {
"console_output_encoding": "utf-8",
"pycon_output_encoding": "utf-8",
}
def setup(app):
def add_contributing_banner(app, doctree):
"""
Insert a banner at the top of the index.
This way, we can easily communicate people to help with the translation,
pointing them to different resources.
"""
if app.builder.format != 'html':
# Do not include the banner when building with other formats
# (this is useful when using -b gettext)
return
from docutils import nodes, core
from textwrap import dedent
message = dedent(f"""\
Aydanos a traducir la documentacin oficial de Python al Espaol!
Puedes encontrar ms informacin en `Como contribuir `_.
Ayuda a acercar Python a ms personas de habla hispana.
""")
paragraph = core.publish_doctree(message)[0]
banner = nodes.note(ids=['contributing-banner'])
banner.append(paragraph)
for document in doctree.traverse(nodes.document):
document.insert(0, banner)
# Change the sourcedir programmatically because Read the Docs always call it with `.`
app.srcdir = Path(os.getcwd() + '/cpython/Doc')
app.connect('doctree-read', add_contributing_banner)