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 %}
-