We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
[FR] User configurable get_requires_for_build_wheel and get_requires_for_build_sdist
### What's the problem this feature will solve?

https://github.com/pypa/setuptools/issues/2823 proposes to remove the legacy `setup_requires` option. Currently, `setup_requires` can be set statically (which has been replaced by the `requires` key in `pyproject.toml`), or dynamically during the running of the `setup.py` file. This latter method of dynamically setting the build requirements can be replaced more cleanly by the two optional PEP 517 hooks `get_requires_for_build_wheel` and `get_requires_for_build_sdist`. Currently setuptools does not allow users to override and/or set the output of these hooks.

### Describe the solution you'd like

I'm not proposing a specific solution (I suspect the best solution will be the one that best matches what users need, and aligns with the internal design of setuptools), but here are three possible designs:

1. Add two new arguments to `setuptools.setup`: `sdist_requires` and `wheel_requires`. These would be lists of requirements, similar to `install_requirements`. This would likely be the least change to existing setup.py files, but what that implies for the internal flow of setuptools is unclear. Additionally, this does not pass `config_settings` to the user code, which could be desired by users. It would be assumed that the presence of `sdist_requires` and `wheel_requires` would override `setup_requires` whilst that option was allowed.

2. Like 1, but instead of the options being lists of requirements, instead a function matching the interface of the PEP 517 hooks would be given. This does require more changes to user code, but means that the user code can handle `config_settings`. I'm not sure there's much difference between 1 and 2 from a setuptools internal-design perspective though (as both are being handled completely within the `setup.py` module).

3. Add `sdist_requires` and `wheel_requires` to `setup.cfg`. The values would follow the same format as `build-backend` from PEP 517, with the callables being pointed to matching the interface of the relevant hook. Depending on the internals of setuptools, this could allow setuptools to only run the `setup.py` file on the mandatory hooks.

### Alternative Solutions

_No response_

### Additional context

This came from https://github.com/pypa/setuptools/issues/2823, from what I can see there's not been a discussion around this.

I'm also not aware of build backends using this in anger, last time I surveyed the ecosystem none of the backends provided a way to set this, so I wouldn't be surprised if this causes some breakage in some frontends (even if it is part of PEP 517).

### Code of Conduct

- [X] I agree to follow the PSF Code of Conduct

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `docs/conf.py`
Content:
```
1 extensions = ['sphinx.ext.autodoc', 'jaraco.packaging.sphinx', 'rst.linker']
2 
3 master_doc = "index"
4 
5 link_files = {
6     '../CHANGES.rst': dict(
7         using=dict(
8             BB='https://bitbucket.org',
9             GH='https://github.com',
10         ),
11         replace=[
12             dict(
13                 pattern=r'(Issue )?#(?P<issue>\d+)',
14                 url='{package_url}/issues/{issue}',
15             ),
16             dict(
17                 pattern=r'BB Pull Request ?#(?P<bb_pull_request>\d+)',
18                 url='{BB}/pypa/setuptools/pull-request/{bb_pull_request}',
19             ),
20             dict(
21                 pattern=r'Distribute #(?P<distribute>\d+)',
22                 url='{BB}/tarek/distribute/issue/{distribute}',
23             ),
24             dict(
25                 pattern=r'Buildout #(?P<buildout>\d+)',
26                 url='{GH}/buildout/buildout/issues/{buildout}',
27             ),
28             dict(
29                 pattern=r'Old Setuptools #(?P<old_setuptools>\d+)',
30                 url='http://bugs.python.org/setuptools/issue{old_setuptools}',
31             ),
32             dict(
33                 pattern=r'Jython #(?P<jython>\d+)',
34                 url='http://bugs.jython.org/issue{jython}',
35             ),
36             dict(
37                 pattern=r'(Python #|bpo-)(?P<python>\d+)',
38                 url='http://bugs.python.org/issue{python}',
39             ),
40             dict(
41                 pattern=r'Interop #(?P<interop>\d+)',
42                 url='{GH}/pypa/interoperability-peps/issues/{interop}',
43             ),
44             dict(
45                 pattern=r'Pip #(?P<pip>\d+)',
46                 url='{GH}/pypa/pip/issues/{pip}',
47             ),
48             dict(
49                 pattern=r'Packaging #(?P<packaging>\d+)',
50                 url='{GH}/pypa/packaging/issues/{packaging}',
51             ),
52             dict(
53                 pattern=r'[Pp]ackaging (?P<packaging_ver>\d+(\.\d+)+)',
54                 url='{GH}/pypa/packaging/blob/{packaging_ver}/CHANGELOG.rst',
55             ),
56             dict(
57                 pattern=r'PEP[- ](?P<pep_number>\d+)',
58                 url='https://www.python.org/dev/peps/pep-{pep_number:0>4}/',
59             ),
60             dict(
61                 pattern=r'setuptools_svn #(?P<setuptools_svn>\d+)',
62                 url='{GH}/jaraco/setuptools_svn/issues/{setuptools_svn}',
63             ),
64             dict(
65                 pattern=r'pypa/distutils#(?P<distutils>\d+)',
66                 url='{GH}/pypa/distutils/issues/{distutils}',
67             ),
68             dict(
69                 pattern=r'pypa/distutils@(?P<distutils_commit>[\da-f]+)',
70                 url='{GH}/pypa/distutils/commit/{distutils_commit}',
71             ),
72             dict(
73                 pattern=r'^(?m)((?P<scm_version>v?\d+(\.\d+){1,2}))\n[-=]+\n',
74                 with_scm='{text}\n{rev[timestamp]:%d %b %Y}\n',
75             ),
76         ],
77     ),
78 }
79 
80 # Be strict about any broken references:
81 nitpicky = True
82 
83 # Include Python intersphinx mapping to prevent failures
84 # jaraco/skeleton#51
85 extensions += ['sphinx.ext.intersphinx']
86 intersphinx_mapping = {
87     'python': ('https://docs.python.org/3', None),
88 }
89 
90 intersphinx_mapping.update({
91     'pypa-build': ('https://pypa-build.readthedocs.io/en/latest/', None)
92 })
93 
94 # Add support for linking usernames
95 github_url = 'https://github.com'
96 github_sponsors_url = f'{github_url}/sponsors'
97 extlinks = {
98     'user': (f'{github_sponsors_url}/%s', '@'),  # noqa: WPS323
99 }
100 extensions += ['sphinx.ext.extlinks']
101 
102 # Ref: https://github.com/python-attrs/attrs/pull/571/files\
103 #      #diff-85987f48f1258d9ee486e3191495582dR82
104 default_role = 'any'
105 
106 # HTML theme
107 html_theme = 'furo'
108 html_logo = "images/logo.svg"
109 
110 html_theme_options = {
111     "sidebar_hide_name": True,
112     "light_css_variables": {
113         "color-brand-primary": "#336790",  # "blue"
114         "color-brand-content": "#336790",
115     },
116     "dark_css_variables": {
117         "color-brand-primary": "#E5B62F",  # "yellow"
118         "color-brand-content": "#E5B62F",
119     },
120 }
121 
122 # Add support for inline tabs
123 extensions += ['sphinx_inline_tabs']
124 
125 # Support for distutils
126 
127 # Ref: https://stackoverflow.com/a/30624034/595220
128 nitpick_ignore = [
129     ('c:func', 'SHGetSpecialFolderPath'),  # ref to MS docs
130     ('envvar', 'DISTUTILS_DEBUG'),  # undocumented
131     ('envvar', 'HOME'),  # undocumented
132     ('envvar', 'PLAT'),  # undocumented
133     ('py:attr', 'CCompiler.language_map'),  # undocumented
134     ('py:attr', 'CCompiler.language_order'),  # undocumented
135     ('py:class', 'distutils.dist.Distribution'),  # undocumented
136     ('py:class', 'distutils.extension.Extension'),  # undocumented
137     ('py:class', 'BorlandCCompiler'),  # undocumented
138     ('py:class', 'CCompiler'),  # undocumented
139     ('py:class', 'CygwinCCompiler'),  # undocumented
140     ('py:class', 'distutils.dist.DistributionMetadata'),  # undocumented
141     ('py:class', 'FileList'),  # undocumented
142     ('py:class', 'IShellLink'),  # ref to MS docs
143     ('py:class', 'MSVCCompiler'),  # undocumented
144     ('py:class', 'OptionDummy'),  # undocumented
145     ('py:class', 'UnixCCompiler'),  # undocumented
146     ('py:exc', 'CompileError'),  # undocumented
147     ('py:exc', 'DistutilsExecError'),  # undocumented
148     ('py:exc', 'DistutilsFileError'),  # undocumented
149     ('py:exc', 'LibError'),  # undocumented
150     ('py:exc', 'LinkError'),  # undocumented
151     ('py:exc', 'PreprocessError'),  # undocumented
152     ('py:func', 'distutils.CCompiler.new_compiler'),  # undocumented
153     # undocumented:
154     ('py:func', 'distutils.dist.DistributionMetadata.read_pkg_file'),
155     ('py:func', 'distutils.file_util._copy_file_contents'),  # undocumented
156     ('py:func', 'distutils.log.debug'),  # undocumented
157     ('py:func', 'distutils.spawn.find_executable'),  # undocumented
158     ('py:func', 'distutils.spawn.spawn'),  # undocumented
159     # TODO: check https://docutils.rtfd.io in the future
160     ('py:mod', 'docutils'),  # there's no Sphinx site documenting this
161 ]
162 
163 # Allow linking objects on other Sphinx sites seamlessly:
164 intersphinx_mapping.update(
165     python=('https://docs.python.org/3', None),
166     python2=('https://docs.python.org/2', None),
167 )
168 
169 # Add support for the unreleased "next-version" change notes
170 extensions += ['sphinxcontrib.towncrier']
171 # Extension needs a path from here to the towncrier config.
172 towncrier_draft_working_directory = '..'
173 # Avoid an empty section for unpublished changes.
174 towncrier_draft_include_empty = False
175 
176 extensions += ['jaraco.tidelift']
177 
178 # Add icons (aka "favicons") to documentation
179 extensions += ['sphinx-favicon']
180 html_static_path = ['images']  # should contain the folder with icons
181 
182 # List of dicts with <link> HTML attributes
183 # static-file points to files in the html_static_path (href is computed)
184 favicons = [
185     {  # "Catch-all" goes first, otherwise some browsers will overwrite
186         "rel": "icon",
187         "type": "image/svg+xml",
188         "static-file": "logo-symbol-only.svg",
189         "sizes": "any"
190     },
191     {  # Version with thicker strokes for better visibility at smaller sizes
192         "rel": "icon",
193         "type": "image/svg+xml",
194         "static-file": "favicon.svg",
195         "sizes": "16x16 24x24 32x32 48x48"
196     },
197     # rel="apple-touch-icon" does not support SVG yet
198 ]
199 
200 intersphinx_mapping['pip'] = 'https://pip.pypa.io/en/latest', None
201
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/docs/conf.py b/docs/conf.py
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -95,6 +95,7 @@
 github_sponsors_url = f'{github_url}/sponsors'
 extlinks = {
     'user': (f'{github_sponsors_url}/%s', '@'),  # noqa: WPS323
+    'pypi': ('https://pypi.org/project/%s', '%s'),
 }
 extensions += ['sphinx.ext.extlinks']

{"golden_diff": "diff --git a/docs/conf.py b/docs/conf.py\n--- a/docs/conf.py\n+++ b/docs/conf.py\n@@ -95,6 +95,7 @@\n github_sponsors_url = f'{github_url}/sponsors'\n extlinks = {\n     'user': (f'{github_sponsors_url}/%s', '@'),  # noqa: WPS323\n+    'pypi': ('https://pypi.org/project/%s', '%s'),\n }\n extensions += ['sphinx.ext.extlinks']\n", "issue": "[FR] User configurable get_requires_for_build_wheel and get_requires_for_build_sdist\n### What's the problem this feature will solve?\n\nhttps://github.com/pypa/setuptools/issues/2823 proposes to remove the legacy `setup_requires` option. Currently, `setup_requires` can be set statically (which has been replaced by the `requires` key in `pyproject.toml`), or dynamically during the running of the `setup.py` file. This latter method of dynamically setting the build requirements can be replaced more cleanly by the two optional PEP 517 hooks `get_requires_for_build_wheel` and `get_requires_for_build_sdist`. Currently setuptools does not allow users to override and/or set the output of these hooks.\n\n### Describe the solution you'd like\n\nI'm not proposing a specific solution (I suspect the best solution will be the one that best matches what users need, and aligns with the internal design of setuptools), but here are three possible designs:\r\n\r\n1. Add two new arguments to `setuptools.setup`: `sdist_requires` and `wheel_requires`. These would be lists of requirements, similar to `install_requirements`. This would likely be the least change to existing setup.py files, but what that implies for the internal flow of setuptools is unclear. Additionally, this does not pass `config_settings` to the user code, which could be desired by users. It would be assumed that the presence of `sdist_requires` and `wheel_requires` would override `setup_requires` whilst that option was allowed.\r\n\r\n2. Like 1, but instead of the options being lists of requirements, instead a function matching the interface of the PEP 517 hooks would be given. This does require more changes to user code, but means that the user code can handle `config_settings`. I'm not sure there's much difference between 1 and 2 from a setuptools internal-design perspective though (as both are being handled completely within the `setup.py` module).\r\n\r\n3. Add `sdist_requires` and `wheel_requires` to `setup.cfg`. The values would follow the same format as `build-backend` from PEP 517, with the callables being pointed to matching the interface of the relevant hook. Depending on the internals of setuptools, this could allow setuptools to only run the `setup.py` file on the mandatory hooks.\n\n### Alternative Solutions\n\n_No response_\n\n### Additional context\n\nThis came from https://github.com/pypa/setuptools/issues/2823, from what I can see there's not been a discussion around this.\r\n\r\nI'm also not aware of build backends using this in anger, last time I surveyed the ecosystem none of the backends provided a way to set this, so I wouldn't be surprised if this causes some breakage in some frontends (even if it is part of PEP 517).\n\n### Code of Conduct\n\n- [X] I agree to follow the PSF Code of Conduct\n", "before_files": [{"content": "extensions = ['sphinx.ext.autodoc', 'jaraco.packaging.sphinx', 'rst.linker']\n\nmaster_doc = \"index\"\n\nlink_files = {\n    '../CHANGES.rst': dict(\n        using=dict(\n            BB='https://bitbucket.org',\n            GH='https://github.com',\n        ),\n        replace=[\n            dict(\n                pattern=r'(Issue )?#(?P<issue>\\d+)',\n                url='{package_url}/issues/{issue}',\n            ),\n            dict(\n                pattern=r'BB Pull Request ?#(?P<bb_pull_request>\\d+)',\n                url='{BB}/pypa/setuptools/pull-request/{bb_pull_request}',\n            ),\n            dict(\n                pattern=r'Distribute #(?P<distribute>\\d+)',\n                url='{BB}/tarek/distribute/issue/{distribute}',\n            ),\n            dict(\n                pattern=r'Buildout #(?P<buildout>\\d+)',\n                url='{GH}/buildout/buildout/issues/{buildout}',\n            ),\n            dict(\n                pattern=r'Old Setuptools #(?P<old_setuptools>\\d+)',\n                url='http://bugs.python.org/setuptools/issue{old_setuptools}',\n            ),\n            dict(\n                pattern=r'Jython #(?P<jython>\\d+)',\n                url='http://bugs.jython.org/issue{jython}',\n            ),\n            dict(\n                pattern=r'(Python #|bpo-)(?P<python>\\d+)',\n                url='http://bugs.python.org/issue{python}',\n            ),\n            dict(\n                pattern=r'Interop #(?P<interop>\\d+)',\n                url='{GH}/pypa/interoperability-peps/issues/{interop}',\n            ),\n            dict(\n                pattern=r'Pip #(?P<pip>\\d+)',\n                url='{GH}/pypa/pip/issues/{pip}',\n            ),\n            dict(\n                pattern=r'Packaging #(?P<packaging>\\d+)',\n                url='{GH}/pypa/packaging/issues/{packaging}',\n            ),\n            dict(\n                pattern=r'[Pp]ackaging (?P<packaging_ver>\\d+(\\.\\d+)+)',\n                url='{GH}/pypa/packaging/blob/{packaging_ver}/CHANGELOG.rst',\n            ),\n            dict(\n                pattern=r'PEP[- ](?P<pep_number>\\d+)',\n                url='https://www.python.org/dev/peps/pep-{pep_number:0>4}/',\n            ),\n            dict(\n                pattern=r'setuptools_svn #(?P<setuptools_svn>\\d+)',\n                url='{GH}/jaraco/setuptools_svn/issues/{setuptools_svn}',\n            ),\n            dict(\n                pattern=r'pypa/distutils#(?P<distutils>\\d+)',\n                url='{GH}/pypa/distutils/issues/{distutils}',\n            ),\n            dict(\n                pattern=r'pypa/distutils@(?P<distutils_commit>[\\da-f]+)',\n                url='{GH}/pypa/distutils/commit/{distutils_commit}',\n            ),\n            dict(\n                pattern=r'^(?m)((?P<scm_version>v?\\d+(\\.\\d+){1,2}))\\n[-=]+\\n',\n                with_scm='{text}\\n{rev[timestamp]:%d %b %Y}\\n',\n            ),\n        ],\n    ),\n}\n\n# Be strict about any broken references:\nnitpicky = True\n\n# Include Python intersphinx mapping to prevent failures\n# jaraco/skeleton#51\nextensions += ['sphinx.ext.intersphinx']\nintersphinx_mapping = {\n    'python': ('https://docs.python.org/3', None),\n}\n\nintersphinx_mapping.update({\n    'pypa-build': ('https://pypa-build.readthedocs.io/en/latest/', None)\n})\n\n# Add support for linking usernames\ngithub_url = 'https://github.com'\ngithub_sponsors_url = f'{github_url}/sponsors'\nextlinks = {\n    'user': (f'{github_sponsors_url}/%s', '@'),  # noqa: WPS323\n}\nextensions += ['sphinx.ext.extlinks']\n\n# Ref: https://github.com/python-attrs/attrs/pull/571/files\\\n#      #diff-85987f48f1258d9ee486e3191495582dR82\ndefault_role = 'any'\n\n# HTML theme\nhtml_theme = 'furo'\nhtml_logo = \"images/logo.svg\"\n\nhtml_theme_options = {\n    \"sidebar_hide_name\": True,\n    \"light_css_variables\": {\n        \"color-brand-primary\": \"#336790\",  # \"blue\"\n        \"color-brand-content\": \"#336790\",\n    },\n    \"dark_css_variables\": {\n        \"color-brand-primary\": \"#E5B62F\",  # \"yellow\"\n        \"color-brand-content\": \"#E5B62F\",\n    },\n}\n\n# Add support for inline tabs\nextensions += ['sphinx_inline_tabs']\n\n# Support for distutils\n\n# Ref: https://stackoverflow.com/a/30624034/595220\nnitpick_ignore = [\n    ('c:func', 'SHGetSpecialFolderPath'),  # ref to MS docs\n    ('envvar', 'DISTUTILS_DEBUG'),  # undocumented\n    ('envvar', 'HOME'),  # undocumented\n    ('envvar', 'PLAT'),  # undocumented\n    ('py:attr', 'CCompiler.language_map'),  # undocumented\n    ('py:attr', 'CCompiler.language_order'),  # undocumented\n    ('py:class', 'distutils.dist.Distribution'),  # undocumented\n    ('py:class', 'distutils.extension.Extension'),  # undocumented\n    ('py:class', 'BorlandCCompiler'),  # undocumented\n    ('py:class', 'CCompiler'),  # undocumented\n    ('py:class', 'CygwinCCompiler'),  # undocumented\n    ('py:class', 'distutils.dist.DistributionMetadata'),  # undocumented\n    ('py:class', 'FileList'),  # undocumented\n    ('py:class', 'IShellLink'),  # ref to MS docs\n    ('py:class', 'MSVCCompiler'),  # undocumented\n    ('py:class', 'OptionDummy'),  # undocumented\n    ('py:class', 'UnixCCompiler'),  # undocumented\n    ('py:exc', 'CompileError'),  # undocumented\n    ('py:exc', 'DistutilsExecError'),  # undocumented\n    ('py:exc', 'DistutilsFileError'),  # undocumented\n    ('py:exc', 'LibError'),  # undocumented\n    ('py:exc', 'LinkError'),  # undocumented\n    ('py:exc', 'PreprocessError'),  # undocumented\n    ('py:func', 'distutils.CCompiler.new_compiler'),  # undocumented\n    # undocumented:\n    ('py:func', 'distutils.dist.DistributionMetadata.read_pkg_file'),\n    ('py:func', 'distutils.file_util._copy_file_contents'),  # undocumented\n    ('py:func', 'distutils.log.debug'),  # undocumented\n    ('py:func', 'distutils.spawn.find_executable'),  # undocumented\n    ('py:func', 'distutils.spawn.spawn'),  # undocumented\n    # TODO: check https://docutils.rtfd.io in the future\n    ('py:mod', 'docutils'),  # there's no Sphinx site documenting this\n]\n\n# Allow linking objects on other Sphinx sites seamlessly:\nintersphinx_mapping.update(\n    python=('https://docs.python.org/3', None),\n    python2=('https://docs.python.org/2', None),\n)\n\n# Add support for the unreleased \"next-version\" change notes\nextensions += ['sphinxcontrib.towncrier']\n# Extension needs a path from here to the towncrier config.\ntowncrier_draft_working_directory = '..'\n# Avoid an empty section for unpublished changes.\ntowncrier_draft_include_empty = False\n\nextensions += ['jaraco.tidelift']\n\n# Add icons (aka \"favicons\") to documentation\nextensions += ['sphinx-favicon']\nhtml_static_path = ['images']  # should contain the folder with icons\n\n# List of dicts with <link> HTML attributes\n# static-file points to files in the html_static_path (href is computed)\nfavicons = [\n    {  # \"Catch-all\" goes first, otherwise some browsers will overwrite\n        \"rel\": \"icon\",\n        \"type\": \"image/svg+xml\",\n        \"static-file\": \"logo-symbol-only.svg\",\n        \"sizes\": \"any\"\n    },\n    {  # Version with thicker strokes for better visibility at smaller sizes\n        \"rel\": \"icon\",\n        \"type\": \"image/svg+xml\",\n        \"static-file\": \"favicon.svg\",\n        \"sizes\": \"16x16 24x24 32x32 48x48\"\n    },\n    # rel=\"apple-touch-icon\" does not support SVG yet\n]\n\nintersphinx_mapping['pip'] = 'https://pip.pypa.io/en/latest', None\n", "path": "docs/conf.py"}], "after_files": [{"content": "import os\nimport sys\n\nextensions = ['sphinx.ext.autodoc', 'jaraco.packaging.sphinx', 'rst.linker']\n\nmaster_doc = \"index\"\n\nlink_files = {\n    '../CHANGES.rst': dict(\n        using=dict(\n            BB='https://bitbucket.org',\n            GH='https://github.com',\n        ),\n        replace=[\n            dict(\n                pattern=r'(Issue )?#(?P<issue>\\d+)',\n                url='{package_url}/issues/{issue}',\n            ),\n            dict(\n                pattern=r'BB Pull Request ?#(?P<bb_pull_request>\\d+)',\n                url='{BB}/pypa/setuptools/pull-request/{bb_pull_request}',\n            ),\n            dict(\n                pattern=r'Distribute #(?P<distribute>\\d+)',\n                url='{BB}/tarek/distribute/issue/{distribute}',\n            ),\n            dict(\n                pattern=r'Buildout #(?P<buildout>\\d+)',\n                url='{GH}/buildout/buildout/issues/{buildout}',\n            ),\n            dict(\n                pattern=r'Old Setuptools #(?P<old_setuptools>\\d+)',\n                url='http://bugs.python.org/setuptools/issue{old_setuptools}',\n            ),\n            dict(\n                pattern=r'Jython #(?P<jython>\\d+)',\n                url='http://bugs.jython.org/issue{jython}',\n            ),\n            dict(\n                pattern=r'(Python #|bpo-)(?P<python>\\d+)',\n                url='http://bugs.python.org/issue{python}',\n            ),\n            dict(\n                pattern=r'Interop #(?P<interop>\\d+)',\n                url='{GH}/pypa/interoperability-peps/issues/{interop}',\n            ),\n            dict(\n                pattern=r'Pip #(?P<pip>\\d+)',\n                url='{GH}/pypa/pip/issues/{pip}',\n            ),\n            dict(\n                pattern=r'Packaging #(?P<packaging>\\d+)',\n                url='{GH}/pypa/packaging/issues/{packaging}',\n            ),\n            dict(\n                pattern=r'[Pp]ackaging (?P<packaging_ver>\\d+(\\.\\d+)+)',\n                url='{GH}/pypa/packaging/blob/{packaging_ver}/CHANGELOG.rst',\n            ),\n            dict(\n                pattern=r'PEP[- ](?P<pep_number>\\d+)',\n                url='https://www.python.org/dev/peps/pep-{pep_number:0>4}/',\n            ),\n            dict(\n                pattern=r'setuptools_svn #(?P<setuptools_svn>\\d+)',\n                url='{GH}/jaraco/setuptools_svn/issues/{setuptools_svn}',\n            ),\n            dict(\n                pattern=r'pypa/distutils#(?P<distutils>\\d+)',\n                url='{GH}/pypa/distutils/issues/{distutils}',\n            ),\n            dict(\n                pattern=r'^(?m)((?P<scm_version>v?\\d+(\\.\\d+){1,2}))\\n[-=]+\\n',\n                with_scm='{text}\\n{rev[timestamp]:%d %b %Y}\\n',\n            ),\n        ],\n    ),\n}\n\n# Be strict about any broken references:\nnitpicky = True\n\n# Include Python intersphinx mapping to prevent failures\n# jaraco/skeleton#51\nextensions += ['sphinx.ext.intersphinx']\nintersphinx_mapping = {\n    'python': ('https://docs.python.org/3', None),\n}\n\nintersphinx_mapping.update({\n    'pypa-build': ('https://pypa-build.readthedocs.io/en/latest/', None)\n})\n\n# Add support for linking usernames\ngithub_url = 'https://github.com'\ngithub_sponsors_url = f'{github_url}/sponsors'\nextlinks = {\n    'user': (f'{github_sponsors_url}/%s', '@'),  # noqa: WPS323\n    'pypi': ('https://pypi.org/project/%s', '%s'),\n}\nextensions += ['sphinx.ext.extlinks']\n\n# Ref: https://github.com/python-attrs/attrs/pull/571/files\\\n#      #diff-85987f48f1258d9ee486e3191495582dR82\ndefault_role = 'any'\n\n# HTML theme\nhtml_theme = 'furo'\nhtml_logo = \"images/logo.svg\"\n\nhtml_theme_options = {\n    \"sidebar_hide_name\": True,\n    \"light_css_variables\": {\n        \"color-brand-primary\": \"#336790\",  # \"blue\"\n        \"color-brand-content\": \"#336790\",\n    },\n    \"dark_css_variables\": {\n        \"color-brand-primary\": \"#E5B62F\",  # \"yellow\"\n        \"color-brand-content\": \"#E5B62F\",\n    },\n}\n\n# Add support for inline tabs\nextensions += ['sphinx_inline_tabs']\n\n# Support for distutils\n\n# Ref: https://stackoverflow.com/a/30624034/595220\nnitpick_ignore = [\n    ('c:func', 'SHGetSpecialFolderPath'),  # ref to MS docs\n    ('envvar', 'DISTUTILS_DEBUG'),  # undocumented\n    ('envvar', 'HOME'),  # undocumented\n    ('envvar', 'PLAT'),  # undocumented\n    ('py:attr', 'CCompiler.language_map'),  # undocumented\n    ('py:attr', 'CCompiler.language_order'),  # undocumented\n    ('py:class', 'distutils.dist.Distribution'),  # undocumented\n    ('py:class', 'distutils.extension.Extension'),  # undocumented\n    ('py:class', 'BorlandCCompiler'),  # undocumented\n    ('py:class', 'CCompiler'),  # undocumented\n    ('py:class', 'CygwinCCompiler'),  # undocumented\n    ('py:class', 'distutils.dist.DistributionMetadata'),  # undocumented\n    ('py:class', 'FileList'),  # undocumented\n    ('py:class', 'IShellLink'),  # ref to MS docs\n    ('py:class', 'MSVCCompiler'),  # undocumented\n    ('py:class', 'OptionDummy'),  # undocumented\n    ('py:class', 'UnixCCompiler'),  # undocumented\n    ('py:exc', 'CompileError'),  # undocumented\n    ('py:exc', 'DistutilsExecError'),  # undocumented\n    ('py:exc', 'DistutilsFileError'),  # undocumented\n    ('py:exc', 'LibError'),  # undocumented\n    ('py:exc', 'LinkError'),  # undocumented\n    ('py:exc', 'PreprocessError'),  # undocumented\n    ('py:func', 'distutils.CCompiler.new_compiler'),  # undocumented\n    # undocumented:\n    ('py:func', 'distutils.dist.DistributionMetadata.read_pkg_file'),\n    ('py:func', 'distutils.file_util._copy_file_contents'),  # undocumented\n    ('py:func', 'distutils.log.debug'),  # undocumented\n    ('py:func', 'distutils.spawn.find_executable'),  # undocumented\n    ('py:func', 'distutils.spawn.spawn'),  # undocumented\n    # TODO: check https://docutils.rtfd.io in the future\n    ('py:mod', 'docutils'),  # there's no Sphinx site documenting this\n]\n\n# Allow linking objects on other Sphinx sites seamlessly:\nintersphinx_mapping.update(\n    python=('https://docs.python.org/3', None),\n    python2=('https://docs.python.org/2', None),\n)\n\n# Add support for the unreleased \"next-version\" change notes\nextensions += ['sphinxcontrib.towncrier']\n# Extension needs a path from here to the towncrier config.\ntowncrier_draft_working_directory = '..'\n# Avoid an empty section for unpublished changes.\ntowncrier_draft_include_empty = False\n\nextensions += ['jaraco.tidelift']\n\n# Add icons (aka \"favicons\") to documentation\nsys.path.append(os.path.join(os.path.dirname(__file__), '_ext'))\nextensions += ['_custom_icons']\n\n# List of dicts with <link> HTML attributes\n# as defined in https://developer.mozilla.org/en-US/docs/Web/HTML/Element/link\n# except that ``file`` gets replaced with the correct ``href``\nicons = [\n    {  # \"Catch-all\" goes first, otherwise some browsers will overwrite\n        \"rel\": \"icon\",\n        \"type\": \"image/svg+xml\",\n        \"file\": \"images/logo-symbol-only.svg\",\n        \"sizes\": \"any\"\n    },\n    {  # Version with thicker strokes for better visibility at smaller sizes\n        \"rel\": \"icon\",\n        \"type\": \"image/svg+xml\",\n        \"file\": \"images/favicon.svg\",\n        \"sizes\": \"16x16 24x24 32x32 48x48\"\n    },\n    # rel=\"apple-touch-icon\" does not support SVG yet\n]\n\nintersphinx_mapping['pip'] = 'https://pip.pypa.io/en/latest', None\n", "path": "docs/conf.py"}]}