We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Make the build reproducible
Whilst working on the [Reproducible Builds](https://reproducible-builds.org/) effort I noticed that scrapy could not be built reproducibly

This is due to the documentation embedding the current build year in the generated files, therefore making the build vary depending on when you build it. The fix is to use [`SOURCE_DATE_EPOCH`](https://reproducible-builds.org/specs/source-date-epoch/) if it is exported to the surrounding environment.

I originally filed this in Debian as bug [#983852](https://bugs.debian.org/983852).

--- 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 # Scrapy documentation build configuration file, created by
2 # sphinx-quickstart on Mon Nov 24 12:02:52 2008.
3 #
4 # This file is execfile()d with the current directory set to its containing dir.
5 #
6 # The contents of this file are pickled, so don't put values in the namespace
7 # that aren't pickleable (module imports are okay, they're removed automatically).
8 #
9 # All configuration values have a default; values that are commented out
10 # serve to show the default.
11 
12 import sys
13 from datetime import datetime
14 from pathlib import Path
15 
16 # If your extensions are in another directory, add it here. If the directory
17 # is relative to the documentation root, use Path.absolute to make it absolute.
18 sys.path.append(str(Path(__file__).parent / "_ext"))
19 sys.path.insert(0, str(Path(__file__).parent.parent))
20 
21 
22 # General configuration
23 # ---------------------
24 
25 # Add any Sphinx extension module names here, as strings. They can be extensions
26 # coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
27 extensions = [
28     "hoverxref.extension",
29     "notfound.extension",
30     "scrapydocs",
31     "sphinx.ext.autodoc",
32     "sphinx.ext.coverage",
33     "sphinx.ext.intersphinx",
34     "sphinx.ext.viewcode",
35 ]
36 
37 # Add any paths that contain templates here, relative to this directory.
38 templates_path = ["_templates"]
39 
40 # The suffix of source filenames.
41 source_suffix = ".rst"
42 
43 # The encoding of source files.
44 # source_encoding = 'utf-8'
45 
46 # The master toctree document.
47 master_doc = "index"
48 
49 # General information about the project.
50 project = "Scrapy"
51 copyright = f"2008–{datetime.now().year}, Scrapy developers"
52 
53 # The version info for the project you're documenting, acts as replacement for
54 # |version| and |release|, also used in various other places throughout the
55 # built documents.
56 #
57 # The short X.Y version.
58 try:
59     import scrapy
60 
61     version = ".".join(map(str, scrapy.version_info[:2]))
62     release = scrapy.__version__
63 except ImportError:
64     version = ""
65     release = ""
66 
67 # The language for content autogenerated by Sphinx. Refer to documentation
68 # for a list of supported languages.
69 language = "en"
70 
71 # There are two options for replacing |today|: either, you set today to some
72 # non-false value, then it is used:
73 # today = ''
74 # Else, today_fmt is used as the format for a strftime call.
75 # today_fmt = '%B %d, %Y'
76 
77 # List of documents that shouldn't be included in the build.
78 # unused_docs = []
79 
80 exclude_patterns = ["build"]
81 
82 # List of directories, relative to source directory, that shouldn't be searched
83 # for source files.
84 exclude_trees = [".build"]
85 
86 # The reST default role (used for this markup: `text`) to use for all documents.
87 # default_role = None
88 
89 # If true, '()' will be appended to :func: etc. cross-reference text.
90 # add_function_parentheses = True
91 
92 # If true, the current module name will be prepended to all description
93 # unit titles (such as .. function::).
94 # add_module_names = True
95 
96 # If true, sectionauthor and moduleauthor directives will be shown in the
97 # output. They are ignored by default.
98 # show_authors = False
99 
100 # The name of the Pygments (syntax highlighting) style to use.
101 pygments_style = "sphinx"
102 
103 # List of Sphinx warnings that will not be raised
104 suppress_warnings = ["epub.unknown_project_files"]
105 
106 
107 # Options for HTML output
108 # -----------------------
109 
110 # The theme to use for HTML and HTML Help pages.  See the documentation for
111 # a list of builtin themes.
112 html_theme = "sphinx_rtd_theme"
113 
114 # Theme options are theme-specific and customize the look and feel of a theme
115 # further.  For a list of options available for each theme, see the
116 # documentation.
117 # html_theme_options = {}
118 
119 # Add any paths that contain custom themes here, relative to this directory.
120 # Add path to the RTD explicitly to robustify builds (otherwise might
121 # fail in a clean Debian build env)
122 import sphinx_rtd_theme
123 
124 html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
125 
126 # The style sheet to use for HTML and HTML Help pages. A file of that name
127 # must exist either in Sphinx' static/ path, or in one of the custom paths
128 # given in html_static_path.
129 # html_style = 'scrapydoc.css'
130 
131 # The name for this set of Sphinx documents.  If None, it defaults to
132 # "<project> v<release> documentation".
133 # html_title = None
134 
135 # A shorter title for the navigation bar.  Default is the same as html_title.
136 # html_short_title = None
137 
138 # The name of an image file (relative to this directory) to place at the top
139 # of the sidebar.
140 # html_logo = None
141 
142 # The name of an image file (within the static path) to use as favicon of the
143 # docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
144 # pixels large.
145 # html_favicon = None
146 
147 # Add any paths that contain custom static files (such as style sheets) here,
148 # relative to this directory. They are copied after the builtin static files,
149 # so a file named "default.css" will overwrite the builtin "default.css".
150 html_static_path = ["_static"]
151 
152 # If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
153 # using the given strftime format.
154 html_last_updated_fmt = "%b %d, %Y"
155 
156 # Custom sidebar templates, maps document names to template names.
157 # html_sidebars = {}
158 
159 # Additional templates that should be rendered to pages, maps page names to
160 # template names.
161 # html_additional_pages = {}
162 
163 # If false, no module index is generated.
164 # html_use_modindex = True
165 
166 # If false, no index is generated.
167 # html_use_index = True
168 
169 # If true, the index is split into individual pages for each letter.
170 # html_split_index = False
171 
172 # If true, the reST sources are included in the HTML build as _sources/<name>.
173 html_copy_source = True
174 
175 # If true, an OpenSearch description file will be output, and all pages will
176 # contain a <link> tag referring to it.  The value of this option must be the
177 # base URL from which the finished HTML is served.
178 # html_use_opensearch = ''
179 
180 # If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml").
181 # html_file_suffix = ''
182 
183 # Output file base name for HTML help builder.
184 htmlhelp_basename = "Scrapydoc"
185 
186 html_css_files = [
187     "custom.css",
188 ]
189 
190 
191 # Options for LaTeX output
192 # ------------------------
193 
194 # The paper size ('letter' or 'a4').
195 # latex_paper_size = 'letter'
196 
197 # The font size ('10pt', '11pt' or '12pt').
198 # latex_font_size = '10pt'
199 
200 # Grouping the document tree into LaTeX files. List of tuples
201 # (source start file, target name, title, author, document class [howto/manual]).
202 latex_documents = [
203     ("index", "Scrapy.tex", "Scrapy Documentation", "Scrapy developers", "manual"),
204 ]
205 
206 # The name of an image file (relative to this directory) to place at the top of
207 # the title page.
208 # latex_logo = None
209 
210 # For "manual" documents, if this is true, then toplevel headings are parts,
211 # not chapters.
212 # latex_use_parts = False
213 
214 # Additional stuff for the LaTeX preamble.
215 # latex_preamble = ''
216 
217 # Documents to append as an appendix to all manuals.
218 # latex_appendices = []
219 
220 # If false, no module index is generated.
221 # latex_use_modindex = True
222 
223 
224 # Options for the linkcheck builder
225 # ---------------------------------
226 
227 # A list of regular expressions that match URIs that should not be checked when
228 # doing a linkcheck build.
229 linkcheck_ignore = [
230     r"http://localhost:\d+",
231     "http://hg.scrapy.org",
232     "http://directory.google.com/",
233 ]
234 
235 
236 # Options for the Coverage extension
237 # ----------------------------------
238 coverage_ignore_pyobjects = [
239     # Contract’s add_pre_hook and add_post_hook are not documented because
240     # they should be transparent to contract developers, for whom pre_hook and
241     # post_hook should be the actual concern.
242     r"\bContract\.add_(pre|post)_hook$",
243     # ContractsManager is an internal class, developers are not expected to
244     # interact with it directly in any way.
245     r"\bContractsManager\b$",
246     # For default contracts we only want to document their general purpose in
247     # their __init__ method, the methods they reimplement to achieve that purpose
248     # should be irrelevant to developers using those contracts.
249     r"\w+Contract\.(adjust_request_args|(pre|post)_process)$",
250     # Methods of downloader middlewares are not documented, only the classes
251     # themselves, since downloader middlewares are controlled through Scrapy
252     # settings.
253     r"^scrapy\.downloadermiddlewares\.\w*?\.(\w*?Middleware|DownloaderStats)\.",
254     # Base classes of downloader middlewares are implementation details that
255     # are not meant for users.
256     r"^scrapy\.downloadermiddlewares\.\w*?\.Base\w*?Middleware",
257     # Private exception used by the command-line interface implementation.
258     r"^scrapy\.exceptions\.UsageError",
259     # Methods of BaseItemExporter subclasses are only documented in
260     # BaseItemExporter.
261     r"^scrapy\.exporters\.(?!BaseItemExporter\b)\w*?\.",
262     # Extension behavior is only modified through settings. Methods of
263     # extension classes, as well as helper functions, are implementation
264     # details that are not documented.
265     r"^scrapy\.extensions\.[a-z]\w*?\.[A-Z]\w*?\.",  # methods
266     r"^scrapy\.extensions\.[a-z]\w*?\.[a-z]",  # helper functions
267     # Never documented before, and deprecated now.
268     r"^scrapy\.linkextractors\.FilteringLinkExtractor$",
269     # Implementation detail of LxmlLinkExtractor
270     r"^scrapy\.linkextractors\.lxmlhtml\.LxmlParserLinkExtractor",
271 ]
272 
273 
274 # Options for the InterSphinx extension
275 # -------------------------------------
276 
277 intersphinx_mapping = {
278     "attrs": ("https://www.attrs.org/en/stable/", None),
279     "coverage": ("https://coverage.readthedocs.io/en/latest", None),
280     "cryptography": ("https://cryptography.io/en/latest/", None),
281     "cssselect": ("https://cssselect.readthedocs.io/en/latest", None),
282     "itemloaders": ("https://itemloaders.readthedocs.io/en/latest/", None),
283     "pytest": ("https://docs.pytest.org/en/latest", None),
284     "python": ("https://docs.python.org/3", None),
285     "sphinx": ("https://www.sphinx-doc.org/en/master", None),
286     "tox": ("https://tox.wiki/en/latest/", None),
287     "twisted": ("https://docs.twisted.org/en/stable/", None),
288     "twistedapi": ("https://docs.twisted.org/en/stable/api/", None),
289     "w3lib": ("https://w3lib.readthedocs.io/en/latest", None),
290 }
291 intersphinx_disabled_reftypes = []
292 
293 
294 # Options for sphinx-hoverxref options
295 # ------------------------------------
296 
297 hoverxref_auto_ref = True
298 hoverxref_role_types = {
299     "class": "tooltip",
300     "command": "tooltip",
301     "confval": "tooltip",
302     "hoverxref": "tooltip",
303     "mod": "tooltip",
304     "ref": "tooltip",
305     "reqmeta": "tooltip",
306     "setting": "tooltip",
307     "signal": "tooltip",
308 }
309 hoverxref_roles = ["command", "reqmeta", "setting", "signal"]
310 
311 
312 def setup(app):
313     app.connect("autodoc-skip-member", maybe_skip_member)
314 
315 
316 def maybe_skip_member(app, what, name, obj, skip, options):
317     if not skip:
318         # autodocs was generating a text "alias of" for the following members
319         # https://github.com/sphinx-doc/sphinx/issues/4422
320         return name in {"default_item_class", "default_selector_class"}
321     return skip
322
```
--- 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
@@ -10,7 +10,6 @@
 # serve to show the default.
 
 import sys
-from datetime import datetime
 from pathlib import Path
 
 # If your extensions are in another directory, add it here. If the directory
@@ -48,7 +47,7 @@
 
 # General information about the project.
 project = "Scrapy"
-copyright = f"2008–{datetime.now().year}, Scrapy developers"
+copyright = "Scrapy developers"
 
 # The version info for the project you're documenting, acts as replacement for
 # |version| and |release|, also used in various other places throughout the

{"golden_diff": "diff --git a/docs/conf.py b/docs/conf.py\n--- a/docs/conf.py\n+++ b/docs/conf.py\n@@ -10,7 +10,6 @@\n # serve to show the default.\n \n import sys\n-from datetime import datetime\n from pathlib import Path\n \n # If your extensions are in another directory, add it here. If the directory\n@@ -48,7 +47,7 @@\n \n # General information about the project.\n project = \"Scrapy\"\n-copyright = f\"2008\u2013{datetime.now().year}, Scrapy developers\"\n+copyright = \"Scrapy developers\"\n \n # The version info for the project you're documenting, acts as replacement for\n # |version| and |release|, also used in various other places throughout the\n", "issue": "Make the build reproducible\nWhilst working on the [Reproducible Builds](https://reproducible-builds.org/) effort I noticed that scrapy could not be built reproducibly\r\n\r\nThis is due to the documentation embedding the current build year in the generated files, therefore making the build vary depending on when you build it. The fix is to use [`SOURCE_DATE_EPOCH`](https://reproducible-builds.org/specs/source-date-epoch/) if it is exported to the surrounding environment.\r\n\r\nI originally filed this in Debian as bug [#983852](https://bugs.debian.org/983852).\n", "before_files": [{"content": "# Scrapy documentation build configuration file, created by\n# sphinx-quickstart on Mon Nov 24 12:02:52 2008.\n#\n# This file is execfile()d with the current directory set to its containing dir.\n#\n# The contents of this file are pickled, so don't put values in the namespace\n# that aren't pickleable (module imports are okay, they're removed automatically).\n#\n# All configuration values have a default; values that are commented out\n# serve to show the default.\n\nimport sys\nfrom datetime import datetime\nfrom pathlib import Path\n\n# If your extensions are in another directory, add it here. If the directory\n# is relative to the documentation root, use Path.absolute to make it absolute.\nsys.path.append(str(Path(__file__).parent / \"_ext\"))\nsys.path.insert(0, str(Path(__file__).parent.parent))\n\n\n# General configuration\n# ---------------------\n\n# Add any Sphinx extension module names here, as strings. They can be extensions\n# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.\nextensions = [\n    \"hoverxref.extension\",\n    \"notfound.extension\",\n    \"scrapydocs\",\n    \"sphinx.ext.autodoc\",\n    \"sphinx.ext.coverage\",\n    \"sphinx.ext.intersphinx\",\n    \"sphinx.ext.viewcode\",\n]\n\n# Add any paths that contain templates here, relative to this directory.\ntemplates_path = [\"_templates\"]\n\n# The suffix of source filenames.\nsource_suffix = \".rst\"\n\n# The encoding of source files.\n# source_encoding = 'utf-8'\n\n# The master toctree document.\nmaster_doc = \"index\"\n\n# General information about the project.\nproject = \"Scrapy\"\ncopyright = f\"2008\u2013{datetime.now().year}, Scrapy developers\"\n\n# The version info for the project you're documenting, acts as replacement for\n# |version| and |release|, also used in various other places throughout the\n# built documents.\n#\n# The short X.Y version.\ntry:\n    import scrapy\n\n    version = \".\".join(map(str, scrapy.version_info[:2]))\n    release = scrapy.__version__\nexcept ImportError:\n    version = \"\"\n    release = \"\"\n\n# The language for content autogenerated by Sphinx. Refer to documentation\n# for a list of supported languages.\nlanguage = \"en\"\n\n# There are two options for replacing |today|: either, you set today to some\n# non-false value, then it is used:\n# today = ''\n# Else, today_fmt is used as the format for a strftime call.\n# today_fmt = '%B %d, %Y'\n\n# List of documents that shouldn't be included in the build.\n# unused_docs = []\n\nexclude_patterns = [\"build\"]\n\n# List of directories, relative to source directory, that shouldn't be searched\n# for source files.\nexclude_trees = [\".build\"]\n\n# The reST default role (used for this markup: `text`) to use for all documents.\n# default_role = None\n\n# If true, '()' will be appended to :func: etc. cross-reference text.\n# add_function_parentheses = True\n\n# If true, the current module name will be prepended to all description\n# unit titles (such as .. function::).\n# add_module_names = True\n\n# If true, sectionauthor and moduleauthor directives will be shown in the\n# output. They are ignored by default.\n# show_authors = False\n\n# The name of the Pygments (syntax highlighting) style to use.\npygments_style = \"sphinx\"\n\n# List of Sphinx warnings that will not be raised\nsuppress_warnings = [\"epub.unknown_project_files\"]\n\n\n# Options for HTML output\n# -----------------------\n\n# The theme to use for HTML and HTML Help pages.  See the documentation for\n# a list of builtin themes.\nhtml_theme = \"sphinx_rtd_theme\"\n\n# Theme options are theme-specific and customize the look and feel of a theme\n# further.  For a list of options available for each theme, see the\n# documentation.\n# html_theme_options = {}\n\n# Add any paths that contain custom themes here, relative to this directory.\n# Add path to the RTD explicitly to robustify builds (otherwise might\n# fail in a clean Debian build env)\nimport sphinx_rtd_theme\n\nhtml_theme_path = [sphinx_rtd_theme.get_html_theme_path()]\n\n# The style sheet to use for HTML and HTML Help pages. A file of that name\n# must exist either in Sphinx' static/ path, or in one of the custom paths\n# given in html_static_path.\n# html_style = 'scrapydoc.css'\n\n# The name for this set of Sphinx documents.  If None, it defaults to\n# \"<project> v<release> documentation\".\n# html_title = None\n\n# A shorter title for the navigation bar.  Default is the same as html_title.\n# html_short_title = None\n\n# The name of an image file (relative to this directory) to place at the top\n# of the sidebar.\n# html_logo = None\n\n# The name of an image file (within the static path) to use as favicon of the\n# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32\n# pixels large.\n# html_favicon = None\n\n# Add any paths that contain custom static files (such as style sheets) here,\n# relative to this directory. They are copied after the builtin static files,\n# so a file named \"default.css\" will overwrite the builtin \"default.css\".\nhtml_static_path = [\"_static\"]\n\n# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,\n# using the given strftime format.\nhtml_last_updated_fmt = \"%b %d, %Y\"\n\n# Custom sidebar templates, maps document names to template names.\n# html_sidebars = {}\n\n# Additional templates that should be rendered to pages, maps page names to\n# template names.\n# html_additional_pages = {}\n\n# If false, no module index is generated.\n# html_use_modindex = True\n\n# If false, no index is generated.\n# html_use_index = True\n\n# If true, the index is split into individual pages for each letter.\n# html_split_index = False\n\n# If true, the reST sources are included in the HTML build as _sources/<name>.\nhtml_copy_source = True\n\n# If true, an OpenSearch description file will be output, and all pages will\n# contain a <link> tag referring to it.  The value of this option must be the\n# base URL from which the finished HTML is served.\n# html_use_opensearch = ''\n\n# If nonempty, this is the file name suffix for HTML files (e.g. \".xhtml\").\n# html_file_suffix = ''\n\n# Output file base name for HTML help builder.\nhtmlhelp_basename = \"Scrapydoc\"\n\nhtml_css_files = [\n    \"custom.css\",\n]\n\n\n# Options for LaTeX output\n# ------------------------\n\n# The paper size ('letter' or 'a4').\n# latex_paper_size = 'letter'\n\n# The font size ('10pt', '11pt' or '12pt').\n# latex_font_size = '10pt'\n\n# Grouping the document tree into LaTeX files. List of tuples\n# (source start file, target name, title, author, document class [howto/manual]).\nlatex_documents = [\n    (\"index\", \"Scrapy.tex\", \"Scrapy Documentation\", \"Scrapy developers\", \"manual\"),\n]\n\n# The name of an image file (relative to this directory) to place at the top of\n# the title page.\n# latex_logo = None\n\n# For \"manual\" documents, if this is true, then toplevel headings are parts,\n# not chapters.\n# latex_use_parts = False\n\n# Additional stuff for the LaTeX preamble.\n# latex_preamble = ''\n\n# Documents to append as an appendix to all manuals.\n# latex_appendices = []\n\n# If false, no module index is generated.\n# latex_use_modindex = True\n\n\n# Options for the linkcheck builder\n# ---------------------------------\n\n# A list of regular expressions that match URIs that should not be checked when\n# doing a linkcheck build.\nlinkcheck_ignore = [\n    r\"http://localhost:\\d+\",\n    \"http://hg.scrapy.org\",\n    \"http://directory.google.com/\",\n]\n\n\n# Options for the Coverage extension\n# ----------------------------------\ncoverage_ignore_pyobjects = [\n    # Contract\u2019s add_pre_hook and add_post_hook are not documented because\n    # they should be transparent to contract developers, for whom pre_hook and\n    # post_hook should be the actual concern.\n    r\"\\bContract\\.add_(pre|post)_hook$\",\n    # ContractsManager is an internal class, developers are not expected to\n    # interact with it directly in any way.\n    r\"\\bContractsManager\\b$\",\n    # For default contracts we only want to document their general purpose in\n    # their __init__ method, the methods they reimplement to achieve that purpose\n    # should be irrelevant to developers using those contracts.\n    r\"\\w+Contract\\.(adjust_request_args|(pre|post)_process)$\",\n    # Methods of downloader middlewares are not documented, only the classes\n    # themselves, since downloader middlewares are controlled through Scrapy\n    # settings.\n    r\"^scrapy\\.downloadermiddlewares\\.\\w*?\\.(\\w*?Middleware|DownloaderStats)\\.\",\n    # Base classes of downloader middlewares are implementation details that\n    # are not meant for users.\n    r\"^scrapy\\.downloadermiddlewares\\.\\w*?\\.Base\\w*?Middleware\",\n    # Private exception used by the command-line interface implementation.\n    r\"^scrapy\\.exceptions\\.UsageError\",\n    # Methods of BaseItemExporter subclasses are only documented in\n    # BaseItemExporter.\n    r\"^scrapy\\.exporters\\.(?!BaseItemExporter\\b)\\w*?\\.\",\n    # Extension behavior is only modified through settings. Methods of\n    # extension classes, as well as helper functions, are implementation\n    # details that are not documented.\n    r\"^scrapy\\.extensions\\.[a-z]\\w*?\\.[A-Z]\\w*?\\.\",  # methods\n    r\"^scrapy\\.extensions\\.[a-z]\\w*?\\.[a-z]\",  # helper functions\n    # Never documented before, and deprecated now.\n    r\"^scrapy\\.linkextractors\\.FilteringLinkExtractor$\",\n    # Implementation detail of LxmlLinkExtractor\n    r\"^scrapy\\.linkextractors\\.lxmlhtml\\.LxmlParserLinkExtractor\",\n]\n\n\n# Options for the InterSphinx extension\n# -------------------------------------\n\nintersphinx_mapping = {\n    \"attrs\": (\"https://www.attrs.org/en/stable/\", None),\n    \"coverage\": (\"https://coverage.readthedocs.io/en/latest\", None),\n    \"cryptography\": (\"https://cryptography.io/en/latest/\", None),\n    \"cssselect\": (\"https://cssselect.readthedocs.io/en/latest\", None),\n    \"itemloaders\": (\"https://itemloaders.readthedocs.io/en/latest/\", None),\n    \"pytest\": (\"https://docs.pytest.org/en/latest\", None),\n    \"python\": (\"https://docs.python.org/3\", None),\n    \"sphinx\": (\"https://www.sphinx-doc.org/en/master\", None),\n    \"tox\": (\"https://tox.wiki/en/latest/\", None),\n    \"twisted\": (\"https://docs.twisted.org/en/stable/\", None),\n    \"twistedapi\": (\"https://docs.twisted.org/en/stable/api/\", None),\n    \"w3lib\": (\"https://w3lib.readthedocs.io/en/latest\", None),\n}\nintersphinx_disabled_reftypes = []\n\n\n# Options for sphinx-hoverxref options\n# ------------------------------------\n\nhoverxref_auto_ref = True\nhoverxref_role_types = {\n    \"class\": \"tooltip\",\n    \"command\": \"tooltip\",\n    \"confval\": \"tooltip\",\n    \"hoverxref\": \"tooltip\",\n    \"mod\": \"tooltip\",\n    \"ref\": \"tooltip\",\n    \"reqmeta\": \"tooltip\",\n    \"setting\": \"tooltip\",\n    \"signal\": \"tooltip\",\n}\nhoverxref_roles = [\"command\", \"reqmeta\", \"setting\", \"signal\"]\n\n\ndef setup(app):\n    app.connect(\"autodoc-skip-member\", maybe_skip_member)\n\n\ndef maybe_skip_member(app, what, name, obj, skip, options):\n    if not skip:\n        # autodocs was generating a text \"alias of\" for the following members\n        # https://github.com/sphinx-doc/sphinx/issues/4422\n        return name in {\"default_item_class\", \"default_selector_class\"}\n    return skip\n", "path": "docs/conf.py"}], "after_files": [{"content": "# Scrapy documentation build configuration file, created by\n# sphinx-quickstart on Mon Nov 24 12:02:52 2008.\n#\n# This file is execfile()d with the current directory set to its containing dir.\n#\n# The contents of this file are pickled, so don't put values in the namespace\n# that aren't pickleable (module imports are okay, they're removed automatically).\n#\n# All configuration values have a default; values that are commented out\n# serve to show the default.\n\nimport sys\nfrom pathlib import Path\n\n# If your extensions are in another directory, add it here. If the directory\n# is relative to the documentation root, use Path.absolute to make it absolute.\nsys.path.append(str(Path(__file__).parent / \"_ext\"))\nsys.path.insert(0, str(Path(__file__).parent.parent))\n\n\n# General configuration\n# ---------------------\n\n# Add any Sphinx extension module names here, as strings. They can be extensions\n# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.\nextensions = [\n    \"hoverxref.extension\",\n    \"notfound.extension\",\n    \"scrapydocs\",\n    \"sphinx.ext.autodoc\",\n    \"sphinx.ext.coverage\",\n    \"sphinx.ext.intersphinx\",\n    \"sphinx.ext.viewcode\",\n]\n\n# Add any paths that contain templates here, relative to this directory.\ntemplates_path = [\"_templates\"]\n\n# The suffix of source filenames.\nsource_suffix = \".rst\"\n\n# The encoding of source files.\n# source_encoding = 'utf-8'\n\n# The master toctree document.\nmaster_doc = \"index\"\n\n# General information about the project.\nproject = \"Scrapy\"\ncopyright = \"Scrapy developers\"\n\n# The version info for the project you're documenting, acts as replacement for\n# |version| and |release|, also used in various other places throughout the\n# built documents.\n#\n# The short X.Y version.\ntry:\n    import scrapy\n\n    version = \".\".join(map(str, scrapy.version_info[:2]))\n    release = scrapy.__version__\nexcept ImportError:\n    version = \"\"\n    release = \"\"\n\n# The language for content autogenerated by Sphinx. Refer to documentation\n# for a list of supported languages.\nlanguage = \"en\"\n\n# There are two options for replacing |today|: either, you set today to some\n# non-false value, then it is used:\n# today = ''\n# Else, today_fmt is used as the format for a strftime call.\n# today_fmt = '%B %d, %Y'\n\n# List of documents that shouldn't be included in the build.\n# unused_docs = []\n\nexclude_patterns = [\"build\"]\n\n# List of directories, relative to source directory, that shouldn't be searched\n# for source files.\nexclude_trees = [\".build\"]\n\n# The reST default role (used for this markup: `text`) to use for all documents.\n# default_role = None\n\n# If true, '()' will be appended to :func: etc. cross-reference text.\n# add_function_parentheses = True\n\n# If true, the current module name will be prepended to all description\n# unit titles (such as .. function::).\n# add_module_names = True\n\n# If true, sectionauthor and moduleauthor directives will be shown in the\n# output. They are ignored by default.\n# show_authors = False\n\n# The name of the Pygments (syntax highlighting) style to use.\npygments_style = \"sphinx\"\n\n# List of Sphinx warnings that will not be raised\nsuppress_warnings = [\"epub.unknown_project_files\"]\n\n\n# Options for HTML output\n# -----------------------\n\n# The theme to use for HTML and HTML Help pages.  See the documentation for\n# a list of builtin themes.\nhtml_theme = \"sphinx_rtd_theme\"\n\n# Theme options are theme-specific and customize the look and feel of a theme\n# further.  For a list of options available for each theme, see the\n# documentation.\n# html_theme_options = {}\n\n# Add any paths that contain custom themes here, relative to this directory.\n# Add path to the RTD explicitly to robustify builds (otherwise might\n# fail in a clean Debian build env)\nimport sphinx_rtd_theme\n\nhtml_theme_path = [sphinx_rtd_theme.get_html_theme_path()]\n\n# The style sheet to use for HTML and HTML Help pages. A file of that name\n# must exist either in Sphinx' static/ path, or in one of the custom paths\n# given in html_static_path.\n# html_style = 'scrapydoc.css'\n\n# The name for this set of Sphinx documents.  If None, it defaults to\n# \"<project> v<release> documentation\".\n# html_title = None\n\n# A shorter title for the navigation bar.  Default is the same as html_title.\n# html_short_title = None\n\n# The name of an image file (relative to this directory) to place at the top\n# of the sidebar.\n# html_logo = None\n\n# The name of an image file (within the static path) to use as favicon of the\n# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32\n# pixels large.\n# html_favicon = None\n\n# Add any paths that contain custom static files (such as style sheets) here,\n# relative to this directory. They are copied after the builtin static files,\n# so a file named \"default.css\" will overwrite the builtin \"default.css\".\nhtml_static_path = [\"_static\"]\n\n# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,\n# using the given strftime format.\nhtml_last_updated_fmt = \"%b %d, %Y\"\n\n# Custom sidebar templates, maps document names to template names.\n# html_sidebars = {}\n\n# Additional templates that should be rendered to pages, maps page names to\n# template names.\n# html_additional_pages = {}\n\n# If false, no module index is generated.\n# html_use_modindex = True\n\n# If false, no index is generated.\n# html_use_index = True\n\n# If true, the index is split into individual pages for each letter.\n# html_split_index = False\n\n# If true, the reST sources are included in the HTML build as _sources/<name>.\nhtml_copy_source = True\n\n# If true, an OpenSearch description file will be output, and all pages will\n# contain a <link> tag referring to it.  The value of this option must be the\n# base URL from which the finished HTML is served.\n# html_use_opensearch = ''\n\n# If nonempty, this is the file name suffix for HTML files (e.g. \".xhtml\").\n# html_file_suffix = ''\n\n# Output file base name for HTML help builder.\nhtmlhelp_basename = \"Scrapydoc\"\n\nhtml_css_files = [\n    \"custom.css\",\n]\n\n\n# Options for LaTeX output\n# ------------------------\n\n# The paper size ('letter' or 'a4').\n# latex_paper_size = 'letter'\n\n# The font size ('10pt', '11pt' or '12pt').\n# latex_font_size = '10pt'\n\n# Grouping the document tree into LaTeX files. List of tuples\n# (source start file, target name, title, author, document class [howto/manual]).\nlatex_documents = [\n    (\"index\", \"Scrapy.tex\", \"Scrapy Documentation\", \"Scrapy developers\", \"manual\"),\n]\n\n# The name of an image file (relative to this directory) to place at the top of\n# the title page.\n# latex_logo = None\n\n# For \"manual\" documents, if this is true, then toplevel headings are parts,\n# not chapters.\n# latex_use_parts = False\n\n# Additional stuff for the LaTeX preamble.\n# latex_preamble = ''\n\n# Documents to append as an appendix to all manuals.\n# latex_appendices = []\n\n# If false, no module index is generated.\n# latex_use_modindex = True\n\n\n# Options for the linkcheck builder\n# ---------------------------------\n\n# A list of regular expressions that match URIs that should not be checked when\n# doing a linkcheck build.\nlinkcheck_ignore = [\n    r\"http://localhost:\\d+\",\n    \"http://hg.scrapy.org\",\n    \"http://directory.google.com/\",\n]\n\n\n# Options for the Coverage extension\n# ----------------------------------\ncoverage_ignore_pyobjects = [\n    # Contract\u2019s add_pre_hook and add_post_hook are not documented because\n    # they should be transparent to contract developers, for whom pre_hook and\n    # post_hook should be the actual concern.\n    r\"\\bContract\\.add_(pre|post)_hook$\",\n    # ContractsManager is an internal class, developers are not expected to\n    # interact with it directly in any way.\n    r\"\\bContractsManager\\b$\",\n    # For default contracts we only want to document their general purpose in\n    # their __init__ method, the methods they reimplement to achieve that purpose\n    # should be irrelevant to developers using those contracts.\n    r\"\\w+Contract\\.(adjust_request_args|(pre|post)_process)$\",\n    # Methods of downloader middlewares are not documented, only the classes\n    # themselves, since downloader middlewares are controlled through Scrapy\n    # settings.\n    r\"^scrapy\\.downloadermiddlewares\\.\\w*?\\.(\\w*?Middleware|DownloaderStats)\\.\",\n    # Base classes of downloader middlewares are implementation details that\n    # are not meant for users.\n    r\"^scrapy\\.downloadermiddlewares\\.\\w*?\\.Base\\w*?Middleware\",\n    # Private exception used by the command-line interface implementation.\n    r\"^scrapy\\.exceptions\\.UsageError\",\n    # Methods of BaseItemExporter subclasses are only documented in\n    # BaseItemExporter.\n    r\"^scrapy\\.exporters\\.(?!BaseItemExporter\\b)\\w*?\\.\",\n    # Extension behavior is only modified through settings. Methods of\n    # extension classes, as well as helper functions, are implementation\n    # details that are not documented.\n    r\"^scrapy\\.extensions\\.[a-z]\\w*?\\.[A-Z]\\w*?\\.\",  # methods\n    r\"^scrapy\\.extensions\\.[a-z]\\w*?\\.[a-z]\",  # helper functions\n    # Never documented before, and deprecated now.\n    r\"^scrapy\\.linkextractors\\.FilteringLinkExtractor$\",\n    # Implementation detail of LxmlLinkExtractor\n    r\"^scrapy\\.linkextractors\\.lxmlhtml\\.LxmlParserLinkExtractor\",\n]\n\n\n# Options for the InterSphinx extension\n# -------------------------------------\n\nintersphinx_mapping = {\n    \"attrs\": (\"https://www.attrs.org/en/stable/\", None),\n    \"coverage\": (\"https://coverage.readthedocs.io/en/latest\", None),\n    \"cryptography\": (\"https://cryptography.io/en/latest/\", None),\n    \"cssselect\": (\"https://cssselect.readthedocs.io/en/latest\", None),\n    \"itemloaders\": (\"https://itemloaders.readthedocs.io/en/latest/\", None),\n    \"pytest\": (\"https://docs.pytest.org/en/latest\", None),\n    \"python\": (\"https://docs.python.org/3\", None),\n    \"sphinx\": (\"https://www.sphinx-doc.org/en/master\", None),\n    \"tox\": (\"https://tox.wiki/en/latest/\", None),\n    \"twisted\": (\"https://docs.twisted.org/en/stable/\", None),\n    \"twistedapi\": (\"https://docs.twisted.org/en/stable/api/\", None),\n    \"w3lib\": (\"https://w3lib.readthedocs.io/en/latest\", None),\n}\nintersphinx_disabled_reftypes = []\n\n\n# Options for sphinx-hoverxref options\n# ------------------------------------\n\nhoverxref_auto_ref = True\nhoverxref_role_types = {\n    \"class\": \"tooltip\",\n    \"command\": \"tooltip\",\n    \"confval\": \"tooltip\",\n    \"hoverxref\": \"tooltip\",\n    \"mod\": \"tooltip\",\n    \"ref\": \"tooltip\",\n    \"reqmeta\": \"tooltip\",\n    \"setting\": \"tooltip\",\n    \"signal\": \"tooltip\",\n}\nhoverxref_roles = [\"command\", \"reqmeta\", \"setting\", \"signal\"]\n\n\ndef setup(app):\n    app.connect(\"autodoc-skip-member\", maybe_skip_member)\n\n\ndef maybe_skip_member(app, what, name, obj, skip, options):\n    if not skip:\n        # autodocs was generating a text \"alias of\" for the following members\n        # https://github.com/sphinx-doc/sphinx/issues/4422\n        return name in {\"default_item_class\", \"default_selector_class\"}\n    return skip\n", "path": "docs/conf.py"}]}