diff --git a/.readthedocs.yml b/.readthedocs.yml index 9305dc432a..9567935ebd 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -1,6 +1,6 @@ -# .readthedocs.yml # Read the Docs configuration file # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details +# Project page: https://readthedocs.org/projects/cpython-devguide/ version: 2 @@ -8,10 +8,8 @@ sphinx: builder: dirhtml configuration: conf.py -formats: all - build: - os: ubuntu-20.04 + os: ubuntu-22.04 tools: python: "3.10" diff --git a/_static/devguide_overrides.css b/_static/devguide_overrides.css new file mode 100644 index 0000000000..8cafebebfd --- /dev/null +++ b/_static/devguide_overrides.css @@ -0,0 +1,7 @@ +/* Style overrides for the devguide */ + +/* Make the site logo smaller */ +.sidebar-logo { + width: 111px; + height: 110px; +} diff --git a/_static/python-logo.svg b/_static/python-logo.svg new file mode 100644 index 0000000000..f69d24a746 --- /dev/null +++ b/_static/python-logo.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + diff --git a/conf.py b/conf.py index bd5d850978..7b5712eef5 100644 --- a/conf.py +++ b/conf.py @@ -1,228 +1,39 @@ -# -*- coding: utf-8 -*- -# -# Python Developer's Guide documentation build configuration file, created by -# sphinx-quickstart on Tue Jan 4 10:34:03 2011. -# -# This file is execfile()d with the current directory set to its containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import os -import sys import time -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -#sys.path.insert(0, os.path.abspath('.')) - -sys.path.append(os.path.abspath('tools')) - -# -- General configuration ----------------------------------------------------- - -# If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be extensions -# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = [ 'sphinx.ext.intersphinx', 'sphinx.ext.todo', 'sphinx_copybutton', 'sphinxext.rediraffe', ] -intersphinx_mapping = {'python': ('https://docs.python.org/3', None)} -todo_include_todos = True - -# The suffix of source filenames. -source_suffix = '.rst' - -# The encoding of source files. -#source_encoding = 'utf-8-sig' # The master toctree document. master_doc = 'index' # General information about the project. -project = 'Python Developer\'s Guide' -copyright = '2011-%s, Python Software Foundation' % time.strftime('%Y') - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = '' -# The full version, including alpha/beta/rc tags. -release = '' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -#language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' +project = "Python Developer's Guide" +copyright = f'2011-{time.strftime("%Y")}, Python Software Foundation' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. -exclude_patterns = ['_build', 'venv*', 'env*', 'README.rst', '.github'] - -# The reST default role (used for this markup: `text`) to use for all documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - - -# -- Options for HTML output --------------------------------------------------- +exclude_patterns = [ + '_build', + 'venv*', + 'env*', + 'README.rst', + '.github', +] -# Use the upstream python-docs-theme html_theme = 'furo' html_theme_options = {} - - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -html_title = "%s %s" % (project, release) - -# Path to find HTML templates. -templates_path = ['tools/templates'] - -# Additional static files. -html_static_path = ['tools/static'] - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -html_logo = "python-logo.png" - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_domain_indices = True - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -#html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -#html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None - -# Output file base name for HTML help builder. -htmlhelp_basename = 'PythonDevelopersGuidedoc' - - -# -- Options for LaTeX output -------------------------------------------------- - -# The paper size ('letter' or 'a4'). -#latex_paper_size = 'letter' - -# The font size ('10pt', '11pt' or '12pt'). -#latex_font_size = '10pt' - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, documentclass [howto/manual]). -latex_documents = [ - ( - 'index', - 'PythonDevelopersGuide.tex', - 'Python Developer\'s Guide Documentation', - 'Brett Cannon', - 'manual', - ), +html_static_path = ['_static'] +html_css_files = [ + 'devguide_overrides.css', ] +html_logo = "_static/python-logo.svg" -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# If true, show page references after internal links. -#latex_show_pagerefs = False - -# If true, show URL addresses after external links. -#latex_show_urls = False - -# Additional stuff for the LaTeX preamble. -#latex_preamble = '' - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_domain_indices = True - - -# -- Options for manual page output -------------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - ( - 'index', - 'pythondevelopersguide', - "Python Developer's Guide Documentation", - ['Brett Cannon'], - 1, - ), -] +# Set to '' to prevent appending "documentation" to the site title +html_title = "" # ignore linkcheck anchors for /#/$ANCHOR since it is used for # dynamic pages such as http://buildbot.python.org/all/#/console @@ -281,9 +92,8 @@ 'https://discuss.python.org/groups/admins', ] +intersphinx_mapping = { + 'python': ('https://docs.python.org/3', None), +} - -# Use our custom CSS stylesheet to differentiate us from the official python -# docs. -def setup(app): - app.add_css_file('custom.css') +todo_include_todos = True diff --git a/make.bat b/make.bat index ca3ac39d8b..facf22ce4e 100644 --- a/make.bat +++ b/make.bat @@ -49,7 +49,7 @@ if "%1" == "help" ( echo. changes to make an overview over all changed/added/deprecated items echo. linkcheck to check all external links for integrity echo. doctest to run all doctests embedded in the documentation if enabled - echo. check to check for stylistic and formal issues using rstlint + echo. check to check for stylistic and formal issues using sphinx-lint goto end ) diff --git a/python-logo.png b/python-logo.png deleted file mode 100644 index 49ea8f5ba9..0000000000 Binary files a/python-logo.png and /dev/null differ diff --git a/tools/rstlint.py b/tools/rstlint.py deleted file mode 100755 index ed236fd33c..0000000000 --- a/tools/rstlint.py +++ /dev/null @@ -1,319 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- - -# Check for stylistic and formal issues in .rst and .py -# files included in the documentation. -# -# 01/2009, Georg Brandl - -# TODO: - wrong versions in versionadded/changed -# - wrong markup after versionchanged directive - -from __future__ import with_statement - -import os -import re -import sys -import getopt -from os.path import join, splitext, abspath, exists -from collections import defaultdict - -directives = [ - # standard docutils ones - 'admonition', - 'attention', - 'caution', - 'class', - 'compound', - 'container', - 'contents', - 'csv-table', - 'danger', - 'date', - 'default-role', - 'epigraph', - 'error', - 'figure', - 'footer', - 'header', - 'highlights', - 'hint', - 'image', - 'important', - 'include', - 'line-block', - 'list-table', - 'meta', - 'note', - 'parsed-literal', - 'pull-quote', - 'raw', - 'replace', - 'restructuredtext-test-directive', - 'role', - 'rubric', - 'sectnum', - 'sidebar', - 'table', - 'target-notes', - 'tip', - 'title', - 'topic', - 'unicode', - 'warning', - # Sphinx and Python docs custom ones - 'acks', - 'attribute', - 'autoattribute', - 'autoclass', - 'autodata', - 'autoexception', - 'autofunction', - 'automethod', - 'automodule', - 'centered', - 'cfunction', - 'class', - 'classmethod', - 'cmacro', - 'cmdoption', - 'cmember', - 'code-block', - 'confval', - 'cssclass', - 'ctype', - 'currentmodule', - 'cvar', - 'data', - 'decorator', - 'decoratormethod', - 'deprecated-removed', - 'deprecated(?!-removed)', - 'describe', - 'directive', - 'doctest', - 'envvar', - 'event', - 'exception', - 'function', - 'glossary', - 'highlight', - 'highlightlang', - 'impl-detail', - 'index', - 'literalinclude', - 'method', - 'miscnews', - 'module', - 'moduleauthor', - 'opcode', - 'pdbcommand', - 'productionlist', - 'program', - 'role', - 'sectionauthor', - 'seealso', - 'sourcecode', - 'staticmethod', - 'tabularcolumns', - 'testcode', - 'testoutput', - 'testsetup', - 'toctree', - 'todo', - 'todolist', - 'versionadded', - 'versionchanged', -] - -all_directives = '(' + '|'.join(directives) + ')' -seems_directive_re = re.compile(r'(? 81: - # don't complain about tables, links and function signatures - if ( - line.lstrip()[0] not in '+|' - and 'http://' not in line - and not line.lstrip().startswith( - ('.. function', '.. method', '.. cfunction') - ) - ): - yield lno + 1, "line too long" - - -@checker('.html', severity=2, falsepositives=True) -def check_leaked_markup(fn, lines): - """Check HTML files for leaked reST markup; this only works if - the HTML files have been built. - """ - for lno, line in enumerate(lines): - if leaked_markup_re.search(line): - yield lno + 1, 'possibly leaked markup: %r' % line - - -def main(argv): - usage = '''\ -Usage: %s [-v] [-f] [-s sev] [-i path]* [path] - -Options: -v verbose (print all checked file names) - -f enable checkers that yield many false positives - -s sev only show problems with severity >= sev - -i path ignore subdir or file path -''' % argv[0] - - try: - gopts, args = getopt.getopt(argv[1:], 'vfs:i:') - except getopt.GetoptError: - print(usage) - return 2 - - verbose = False - severity = 1 - ignore = [] - falsepos = False - for opt, val in gopts: - if opt == '-v': - verbose = True - elif opt == '-f': - falsepos = True - elif opt == '-s': - severity = int(val) - elif opt == '-i': - ignore.append(abspath(val)) - - if len(args) == 0: - path = '.' - elif len(args) == 1: - path = args[0] - else: - print(usage) - return 2 - - if not exists(path): - print('Error: path %s does not exist' % path) - return 2 - - count = defaultdict(int) - - for root, dirs, files in os.walk(path): - # ignore subdirs in ignore list - if abspath(root) in ignore: - del dirs[:] - continue - - for fn in files: - fn = join(root, fn) - if fn[:2] == './': - fn = fn[2:] - - # ignore files in ignore list - if abspath(fn) in ignore: - continue - - ext = splitext(fn)[1] - checkerlist = checkers.get(ext, None) - if not checkerlist: - continue - - if verbose: - print('Checking %s...' % fn) - - try: - with open(fn, 'r', encoding='utf-8') as f: - lines = list(f) - except (IOError, OSError) as err: - print('%s: cannot open: %s' % (fn, err)) - count[4] += 1 - continue - - for checker in checkerlist: - if checker.falsepositives and not falsepos: - continue - csev = checker.severity - if csev >= severity: - for lno, msg in checker(fn, lines): - print('[%d] %s:%d: %s' % (csev, fn, lno, msg)) - count[csev] += 1 - if verbose: - print() - if not count: - if severity > 1: - print('No problems with severity >= %d found.' % severity) - else: - print('No problems found.') - else: - for severity in sorted(count): - number = count[severity] - print('%d problem%s with severity %d found.' % - (number, 's' if number > 1 else '', severity)) - return int(bool(count)) - - -if __name__ == '__main__': - sys.exit(main(sys.argv)) diff --git a/tools/static/custom.css b/tools/static/custom.css deleted file mode 100644 index 84d378196e..0000000000 --- a/tools/static/custom.css +++ /dev/null @@ -1,13 +0,0 @@ -div.related { - background-color: #6BA81E; - color: #DDD; - border-radius: 5px; -} - -div.related a { - color: #FFF; -} - -div.related a:hover { - color: #EEF; -} diff --git a/tools/templates/customsourcelink.html b/tools/templates/customsourcelink.html deleted file mode 100644 index a50734f189..0000000000 --- a/tools/templates/customsourcelink.html +++ /dev/null @@ -1,12 +0,0 @@ -{%- if show_source and has_source and sourcename %} -
-

{{ _('This Page') }}

- -
-{%- endif %} diff --git a/tools/templates/globaltoc.html b/tools/templates/globaltoc.html deleted file mode 100644 index 6ad89af594..0000000000 --- a/tools/templates/globaltoc.html +++ /dev/null @@ -1,11 +0,0 @@ -{# - basic/globaltoc.html - ~~~~~~~~~~~~~~~~~~~~ - - Sphinx sidebar template: global table of contents. - - :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS. - :license: BSD, see LICENSE for details. -#} -

{{ _('Sections') }}

-{{ toctree() }}