We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Test and build wheels on 3.8


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `setup.py`
Content:
```
1 #!/usr/bin/env python
2 
3 # This file is dual licensed under the terms of the Apache License, Version
4 # 2.0, and the BSD License. See the LICENSE file in the root of this repository
5 # for complete details.
6 
7 from __future__ import absolute_import, division, print_function
8 
9 import os
10 import platform
11 import sys
12 from distutils.command.build import build
13 
14 import pkg_resources
15 
16 import setuptools
17 from setuptools import find_packages, setup
18 from setuptools.command.install import install
19 
20 
21 if (
22     pkg_resources.parse_version(setuptools.__version__) <
23     pkg_resources.parse_version("18.5")
24 ):
25     raise RuntimeError(
26         "cryptography requires setuptools 18.5 or newer, please upgrade to a "
27         "newer version of setuptools"
28     )
29 
30 base_dir = os.path.dirname(__file__)
31 src_dir = os.path.join(base_dir, "src")
32 
33 # When executing the setup.py, we need to be able to import ourselves, this
34 # means that we need to add the src/ directory to the sys.path.
35 sys.path.insert(0, src_dir)
36 
37 about = {}
38 with open(os.path.join(src_dir, "cryptography", "__about__.py")) as f:
39     exec(f.read(), about)
40 
41 
42 # `setup_requirements` must be kept in sync with `pyproject.toml`
43 setup_requirements = ["cffi>=1.8,!=1.11.3"]
44 
45 if platform.python_implementation() == "PyPy":
46     if sys.pypy_version_info < (5, 4):
47         raise RuntimeError(
48             "cryptography is not compatible with PyPy < 5.4. Please upgrade "
49             "PyPy to use this library."
50         )
51 
52 
53 def keywords_with_side_effects(argv):
54     """
55     Get a dictionary with setup keywords that (can) have side effects.
56 
57     :param argv: A list of strings with command line arguments.
58     :returns: A dictionary with keyword arguments for the ``setup()`` function.
59 
60     This setup.py script uses the setuptools 'setup_requires' feature because
61     this is required by the cffi package to compile extension modules. The
62     purpose of ``keywords_with_side_effects()`` is to avoid triggering the cffi
63     build process as a result of setup.py invocations that don't need the cffi
64     module to be built (setup.py serves the dual purpose of exposing package
65     metadata).
66 
67     All of the options listed by ``python setup.py --help`` that print
68     information should be recognized here. The commands ``clean``,
69     ``egg_info``, ``register``, ``sdist`` and ``upload`` are also recognized.
70     Any combination of these options and commands is also supported.
71 
72     This function was originally based on the `setup.py script`_ of SciPy (see
73     also the discussion in `pip issue #25`_).
74 
75     .. _pip issue #25: https://github.com/pypa/pip/issues/25
76     .. _setup.py script: https://github.com/scipy/scipy/blob/master/setup.py
77     """
78     no_setup_requires_arguments = (
79         '-h', '--help',
80         '-n', '--dry-run',
81         '-q', '--quiet',
82         '-v', '--verbose',
83         '-V', '--version',
84         '--author',
85         '--author-email',
86         '--classifiers',
87         '--contact',
88         '--contact-email',
89         '--description',
90         '--egg-base',
91         '--fullname',
92         '--help-commands',
93         '--keywords',
94         '--licence',
95         '--license',
96         '--long-description',
97         '--maintainer',
98         '--maintainer-email',
99         '--name',
100         '--no-user-cfg',
101         '--obsoletes',
102         '--platforms',
103         '--provides',
104         '--requires',
105         '--url',
106         'clean',
107         'egg_info',
108         'register',
109         'sdist',
110         'upload',
111     )
112 
113     def is_short_option(argument):
114         """Check whether a command line argument is a short option."""
115         return len(argument) >= 2 and argument[0] == '-' and argument[1] != '-'
116 
117     def expand_short_options(argument):
118         """Expand combined short options into canonical short options."""
119         return ('-' + char for char in argument[1:])
120 
121     def argument_without_setup_requirements(argv, i):
122         """Check whether a command line argument needs setup requirements."""
123         if argv[i] in no_setup_requires_arguments:
124             # Simple case: An argument which is either an option or a command
125             # which doesn't need setup requirements.
126             return True
127         elif (is_short_option(argv[i]) and
128               all(option in no_setup_requires_arguments
129                   for option in expand_short_options(argv[i]))):
130             # Not so simple case: Combined short options none of which need
131             # setup requirements.
132             return True
133         elif argv[i - 1:i] == ['--egg-base']:
134             # Tricky case: --egg-info takes an argument which should not make
135             # us use setup_requires (defeating the purpose of this code).
136             return True
137         else:
138             return False
139 
140     if all(argument_without_setup_requirements(argv, i)
141            for i in range(1, len(argv))):
142         return {
143             "cmdclass": {
144                 "build": DummyBuild,
145                 "install": DummyInstall,
146             }
147         }
148     else:
149         cffi_modules = [
150             "src/_cffi_src/build_openssl.py:ffi",
151             "src/_cffi_src/build_constant_time.py:ffi",
152             "src/_cffi_src/build_padding.py:ffi",
153         ]
154 
155         return {
156             "setup_requires": setup_requirements,
157             "cffi_modules": cffi_modules
158         }
159 
160 
161 setup_requires_error = ("Requested setup command that needs 'setup_requires' "
162                         "while command line arguments implied a side effect "
163                         "free command or option.")
164 
165 
166 class DummyBuild(build):
167     """
168     This class makes it very obvious when ``keywords_with_side_effects()`` has
169     incorrectly interpreted the command line arguments to ``setup.py build`` as
170     one of the 'side effect free' commands or options.
171     """
172 
173     def run(self):
174         raise RuntimeError(setup_requires_error)
175 
176 
177 class DummyInstall(install):
178     """
179     This class makes it very obvious when ``keywords_with_side_effects()`` has
180     incorrectly interpreted the command line arguments to ``setup.py install``
181     as one of the 'side effect free' commands or options.
182     """
183 
184     def run(self):
185         raise RuntimeError(setup_requires_error)
186 
187 
188 with open(os.path.join(base_dir, "README.rst")) as f:
189     long_description = f.read()
190 
191 
192 setup(
193     name=about["__title__"],
194     version=about["__version__"],
195 
196     description=about["__summary__"],
197     long_description=long_description,
198     long_description_content_type="text/x-rst",
199     license=about["__license__"],
200     url=about["__uri__"],
201 
202     author=about["__author__"],
203     author_email=about["__email__"],
204 
205     classifiers=[
206         "Development Status :: 5 - Production/Stable",
207         "Intended Audience :: Developers",
208         "License :: OSI Approved :: Apache Software License",
209         "License :: OSI Approved :: BSD License",
210         "Natural Language :: English",
211         "Operating System :: MacOS :: MacOS X",
212         "Operating System :: POSIX",
213         "Operating System :: POSIX :: BSD",
214         "Operating System :: POSIX :: Linux",
215         "Operating System :: Microsoft :: Windows",
216         "Programming Language :: Python",
217         "Programming Language :: Python :: 2",
218         "Programming Language :: Python :: 2.7",
219         "Programming Language :: Python :: 3",
220         "Programming Language :: Python :: 3.4",
221         "Programming Language :: Python :: 3.5",
222         "Programming Language :: Python :: 3.6",
223         "Programming Language :: Python :: 3.7",
224         "Programming Language :: Python :: Implementation :: CPython",
225         "Programming Language :: Python :: Implementation :: PyPy",
226         "Topic :: Security :: Cryptography",
227     ],
228 
229     package_dir={"": "src"},
230     packages=find_packages(where="src", exclude=["_cffi_src", "_cffi_src.*"]),
231     include_package_data=True,
232 
233     python_requires='>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*',
234 
235     install_requires=[
236         "six >= 1.4.1",
237     ] + setup_requirements,
238     extras_require={
239         ":python_version < '3'": ["enum34", "ipaddress"],
240 
241         "test": [
242             "pytest>=3.6.0,!=3.9.0,!=3.9.1,!=3.9.2",
243             "pretend",
244             "iso8601",
245             "pytz",
246             "hypothesis>=1.11.4,!=3.79.2",
247         ],
248         "docs": [
249             "sphinx >= 1.6.5,!=1.8.0",
250             "sphinx_rtd_theme",
251         ],
252         "docstest": [
253             "doc8",
254             "pyenchant >= 1.6.11",
255             "twine >= 1.12.0",
256             "sphinxcontrib-spelling >= 4.0.1",
257         ],
258         "pep8test": [
259             "flake8",
260             "flake8-import-order",
261             "pep8-naming",
262         ],
263         # This extra is for the U-label support that was deprecated in
264         # cryptography 2.1. If you need this deprecated path install with
265         # pip install cryptography[idna]
266         "idna": [
267             "idna >= 2.1",
268         ]
269     },
270 
271     # for cffi
272     zip_safe=False,
273     ext_package="cryptography.hazmat.bindings",
274     **keywords_with_side_effects(sys.argv)
275 )
276
```
--- 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/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -221,6 +221,7 @@
         "Programming Language :: Python :: 3.5",
         "Programming Language :: Python :: 3.6",
         "Programming Language :: Python :: 3.7",
+        "Programming Language :: Python :: 3.8",
         "Programming Language :: Python :: Implementation :: CPython",
         "Programming Language :: Python :: Implementation :: PyPy",
         "Topic :: Security :: Cryptography",

{"golden_diff": "diff --git a/setup.py b/setup.py\n--- a/setup.py\n+++ b/setup.py\n@@ -221,6 +221,7 @@\n         \"Programming Language :: Python :: 3.5\",\n         \"Programming Language :: Python :: 3.6\",\n         \"Programming Language :: Python :: 3.7\",\n+        \"Programming Language :: Python :: 3.8\",\n         \"Programming Language :: Python :: Implementation :: CPython\",\n         \"Programming Language :: Python :: Implementation :: PyPy\",\n         \"Topic :: Security :: Cryptography\",\n", "issue": "Test and build wheels on 3.8\n\n", "before_files": [{"content": "#!/usr/bin/env python\n\n# This file is dual licensed under the terms of the Apache License, Version\n# 2.0, and the BSD License. See the LICENSE file in the root of this repository\n# for complete details.\n\nfrom __future__ import absolute_import, division, print_function\n\nimport os\nimport platform\nimport sys\nfrom distutils.command.build import build\n\nimport pkg_resources\n\nimport setuptools\nfrom setuptools import find_packages, setup\nfrom setuptools.command.install import install\n\n\nif (\n    pkg_resources.parse_version(setuptools.__version__) <\n    pkg_resources.parse_version(\"18.5\")\n):\n    raise RuntimeError(\n        \"cryptography requires setuptools 18.5 or newer, please upgrade to a \"\n        \"newer version of setuptools\"\n    )\n\nbase_dir = os.path.dirname(__file__)\nsrc_dir = os.path.join(base_dir, \"src\")\n\n# When executing the setup.py, we need to be able to import ourselves, this\n# means that we need to add the src/ directory to the sys.path.\nsys.path.insert(0, src_dir)\n\nabout = {}\nwith open(os.path.join(src_dir, \"cryptography\", \"__about__.py\")) as f:\n    exec(f.read(), about)\n\n\n# `setup_requirements` must be kept in sync with `pyproject.toml`\nsetup_requirements = [\"cffi>=1.8,!=1.11.3\"]\n\nif platform.python_implementation() == \"PyPy\":\n    if sys.pypy_version_info < (5, 4):\n        raise RuntimeError(\n            \"cryptography is not compatible with PyPy < 5.4. Please upgrade \"\n            \"PyPy to use this library.\"\n        )\n\n\ndef keywords_with_side_effects(argv):\n    \"\"\"\n    Get a dictionary with setup keywords that (can) have side effects.\n\n    :param argv: A list of strings with command line arguments.\n    :returns: A dictionary with keyword arguments for the ``setup()`` function.\n\n    This setup.py script uses the setuptools 'setup_requires' feature because\n    this is required by the cffi package to compile extension modules. The\n    purpose of ``keywords_with_side_effects()`` is to avoid triggering the cffi\n    build process as a result of setup.py invocations that don't need the cffi\n    module to be built (setup.py serves the dual purpose of exposing package\n    metadata).\n\n    All of the options listed by ``python setup.py --help`` that print\n    information should be recognized here. The commands ``clean``,\n    ``egg_info``, ``register``, ``sdist`` and ``upload`` are also recognized.\n    Any combination of these options and commands is also supported.\n\n    This function was originally based on the `setup.py script`_ of SciPy (see\n    also the discussion in `pip issue #25`_).\n\n    .. _pip issue #25: https://github.com/pypa/pip/issues/25\n    .. _setup.py script: https://github.com/scipy/scipy/blob/master/setup.py\n    \"\"\"\n    no_setup_requires_arguments = (\n        '-h', '--help',\n        '-n', '--dry-run',\n        '-q', '--quiet',\n        '-v', '--verbose',\n        '-V', '--version',\n        '--author',\n        '--author-email',\n        '--classifiers',\n        '--contact',\n        '--contact-email',\n        '--description',\n        '--egg-base',\n        '--fullname',\n        '--help-commands',\n        '--keywords',\n        '--licence',\n        '--license',\n        '--long-description',\n        '--maintainer',\n        '--maintainer-email',\n        '--name',\n        '--no-user-cfg',\n        '--obsoletes',\n        '--platforms',\n        '--provides',\n        '--requires',\n        '--url',\n        'clean',\n        'egg_info',\n        'register',\n        'sdist',\n        'upload',\n    )\n\n    def is_short_option(argument):\n        \"\"\"Check whether a command line argument is a short option.\"\"\"\n        return len(argument) >= 2 and argument[0] == '-' and argument[1] != '-'\n\n    def expand_short_options(argument):\n        \"\"\"Expand combined short options into canonical short options.\"\"\"\n        return ('-' + char for char in argument[1:])\n\n    def argument_without_setup_requirements(argv, i):\n        \"\"\"Check whether a command line argument needs setup requirements.\"\"\"\n        if argv[i] in no_setup_requires_arguments:\n            # Simple case: An argument which is either an option or a command\n            # which doesn't need setup requirements.\n            return True\n        elif (is_short_option(argv[i]) and\n              all(option in no_setup_requires_arguments\n                  for option in expand_short_options(argv[i]))):\n            # Not so simple case: Combined short options none of which need\n            # setup requirements.\n            return True\n        elif argv[i - 1:i] == ['--egg-base']:\n            # Tricky case: --egg-info takes an argument which should not make\n            # us use setup_requires (defeating the purpose of this code).\n            return True\n        else:\n            return False\n\n    if all(argument_without_setup_requirements(argv, i)\n           for i in range(1, len(argv))):\n        return {\n            \"cmdclass\": {\n                \"build\": DummyBuild,\n                \"install\": DummyInstall,\n            }\n        }\n    else:\n        cffi_modules = [\n            \"src/_cffi_src/build_openssl.py:ffi\",\n            \"src/_cffi_src/build_constant_time.py:ffi\",\n            \"src/_cffi_src/build_padding.py:ffi\",\n        ]\n\n        return {\n            \"setup_requires\": setup_requirements,\n            \"cffi_modules\": cffi_modules\n        }\n\n\nsetup_requires_error = (\"Requested setup command that needs 'setup_requires' \"\n                        \"while command line arguments implied a side effect \"\n                        \"free command or option.\")\n\n\nclass DummyBuild(build):\n    \"\"\"\n    This class makes it very obvious when ``keywords_with_side_effects()`` has\n    incorrectly interpreted the command line arguments to ``setup.py build`` as\n    one of the 'side effect free' commands or options.\n    \"\"\"\n\n    def run(self):\n        raise RuntimeError(setup_requires_error)\n\n\nclass DummyInstall(install):\n    \"\"\"\n    This class makes it very obvious when ``keywords_with_side_effects()`` has\n    incorrectly interpreted the command line arguments to ``setup.py install``\n    as one of the 'side effect free' commands or options.\n    \"\"\"\n\n    def run(self):\n        raise RuntimeError(setup_requires_error)\n\n\nwith open(os.path.join(base_dir, \"README.rst\")) as f:\n    long_description = f.read()\n\n\nsetup(\n    name=about[\"__title__\"],\n    version=about[\"__version__\"],\n\n    description=about[\"__summary__\"],\n    long_description=long_description,\n    long_description_content_type=\"text/x-rst\",\n    license=about[\"__license__\"],\n    url=about[\"__uri__\"],\n\n    author=about[\"__author__\"],\n    author_email=about[\"__email__\"],\n\n    classifiers=[\n        \"Development Status :: 5 - Production/Stable\",\n        \"Intended Audience :: Developers\",\n        \"License :: OSI Approved :: Apache Software License\",\n        \"License :: OSI Approved :: BSD License\",\n        \"Natural Language :: English\",\n        \"Operating System :: MacOS :: MacOS X\",\n        \"Operating System :: POSIX\",\n        \"Operating System :: POSIX :: BSD\",\n        \"Operating System :: POSIX :: Linux\",\n        \"Operating System :: Microsoft :: Windows\",\n        \"Programming Language :: Python\",\n        \"Programming Language :: Python :: 2\",\n        \"Programming Language :: Python :: 2.7\",\n        \"Programming Language :: Python :: 3\",\n        \"Programming Language :: Python :: 3.4\",\n        \"Programming Language :: Python :: 3.5\",\n        \"Programming Language :: Python :: 3.6\",\n        \"Programming Language :: Python :: 3.7\",\n        \"Programming Language :: Python :: Implementation :: CPython\",\n        \"Programming Language :: Python :: Implementation :: PyPy\",\n        \"Topic :: Security :: Cryptography\",\n    ],\n\n    package_dir={\"\": \"src\"},\n    packages=find_packages(where=\"src\", exclude=[\"_cffi_src\", \"_cffi_src.*\"]),\n    include_package_data=True,\n\n    python_requires='>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*',\n\n    install_requires=[\n        \"six >= 1.4.1\",\n    ] + setup_requirements,\n    extras_require={\n        \":python_version < '3'\": [\"enum34\", \"ipaddress\"],\n\n        \"test\": [\n            \"pytest>=3.6.0,!=3.9.0,!=3.9.1,!=3.9.2\",\n            \"pretend\",\n            \"iso8601\",\n            \"pytz\",\n            \"hypothesis>=1.11.4,!=3.79.2\",\n        ],\n        \"docs\": [\n            \"sphinx >= 1.6.5,!=1.8.0\",\n            \"sphinx_rtd_theme\",\n        ],\n        \"docstest\": [\n            \"doc8\",\n            \"pyenchant >= 1.6.11\",\n            \"twine >= 1.12.0\",\n            \"sphinxcontrib-spelling >= 4.0.1\",\n        ],\n        \"pep8test\": [\n            \"flake8\",\n            \"flake8-import-order\",\n            \"pep8-naming\",\n        ],\n        # This extra is for the U-label support that was deprecated in\n        # cryptography 2.1. If you need this deprecated path install with\n        # pip install cryptography[idna]\n        \"idna\": [\n            \"idna >= 2.1\",\n        ]\n    },\n\n    # for cffi\n    zip_safe=False,\n    ext_package=\"cryptography.hazmat.bindings\",\n    **keywords_with_side_effects(sys.argv)\n)\n", "path": "setup.py"}], "after_files": [{"content": "#!/usr/bin/env python\n\n# This file is dual licensed under the terms of the Apache License, Version\n# 2.0, and the BSD License. See the LICENSE file in the root of this repository\n# for complete details.\n\nfrom __future__ import absolute_import, division, print_function\n\nimport os\nimport platform\nimport sys\nfrom distutils.command.build import build\n\nimport pkg_resources\n\nimport setuptools\nfrom setuptools import find_packages, setup\nfrom setuptools.command.install import install\n\n\nif (\n    pkg_resources.parse_version(setuptools.__version__) <\n    pkg_resources.parse_version(\"18.5\")\n):\n    raise RuntimeError(\n        \"cryptography requires setuptools 18.5 or newer, please upgrade to a \"\n        \"newer version of setuptools\"\n    )\n\nbase_dir = os.path.dirname(__file__)\nsrc_dir = os.path.join(base_dir, \"src\")\n\n# When executing the setup.py, we need to be able to import ourselves, this\n# means that we need to add the src/ directory to the sys.path.\nsys.path.insert(0, src_dir)\n\nabout = {}\nwith open(os.path.join(src_dir, \"cryptography\", \"__about__.py\")) as f:\n    exec(f.read(), about)\n\n\n# `setup_requirements` must be kept in sync with `pyproject.toml`\nsetup_requirements = [\"cffi>=1.8,!=1.11.3\"]\n\nif platform.python_implementation() == \"PyPy\":\n    if sys.pypy_version_info < (5, 4):\n        raise RuntimeError(\n            \"cryptography is not compatible with PyPy < 5.4. Please upgrade \"\n            \"PyPy to use this library.\"\n        )\n\n\ndef keywords_with_side_effects(argv):\n    \"\"\"\n    Get a dictionary with setup keywords that (can) have side effects.\n\n    :param argv: A list of strings with command line arguments.\n    :returns: A dictionary with keyword arguments for the ``setup()`` function.\n\n    This setup.py script uses the setuptools 'setup_requires' feature because\n    this is required by the cffi package to compile extension modules. The\n    purpose of ``keywords_with_side_effects()`` is to avoid triggering the cffi\n    build process as a result of setup.py invocations that don't need the cffi\n    module to be built (setup.py serves the dual purpose of exposing package\n    metadata).\n\n    All of the options listed by ``python setup.py --help`` that print\n    information should be recognized here. The commands ``clean``,\n    ``egg_info``, ``register``, ``sdist`` and ``upload`` are also recognized.\n    Any combination of these options and commands is also supported.\n\n    This function was originally based on the `setup.py script`_ of SciPy (see\n    also the discussion in `pip issue #25`_).\n\n    .. _pip issue #25: https://github.com/pypa/pip/issues/25\n    .. _setup.py script: https://github.com/scipy/scipy/blob/master/setup.py\n    \"\"\"\n    no_setup_requires_arguments = (\n        '-h', '--help',\n        '-n', '--dry-run',\n        '-q', '--quiet',\n        '-v', '--verbose',\n        '-V', '--version',\n        '--author',\n        '--author-email',\n        '--classifiers',\n        '--contact',\n        '--contact-email',\n        '--description',\n        '--egg-base',\n        '--fullname',\n        '--help-commands',\n        '--keywords',\n        '--licence',\n        '--license',\n        '--long-description',\n        '--maintainer',\n        '--maintainer-email',\n        '--name',\n        '--no-user-cfg',\n        '--obsoletes',\n        '--platforms',\n        '--provides',\n        '--requires',\n        '--url',\n        'clean',\n        'egg_info',\n        'register',\n        'sdist',\n        'upload',\n    )\n\n    def is_short_option(argument):\n        \"\"\"Check whether a command line argument is a short option.\"\"\"\n        return len(argument) >= 2 and argument[0] == '-' and argument[1] != '-'\n\n    def expand_short_options(argument):\n        \"\"\"Expand combined short options into canonical short options.\"\"\"\n        return ('-' + char for char in argument[1:])\n\n    def argument_without_setup_requirements(argv, i):\n        \"\"\"Check whether a command line argument needs setup requirements.\"\"\"\n        if argv[i] in no_setup_requires_arguments:\n            # Simple case: An argument which is either an option or a command\n            # which doesn't need setup requirements.\n            return True\n        elif (is_short_option(argv[i]) and\n              all(option in no_setup_requires_arguments\n                  for option in expand_short_options(argv[i]))):\n            # Not so simple case: Combined short options none of which need\n            # setup requirements.\n            return True\n        elif argv[i - 1:i] == ['--egg-base']:\n            # Tricky case: --egg-info takes an argument which should not make\n            # us use setup_requires (defeating the purpose of this code).\n            return True\n        else:\n            return False\n\n    if all(argument_without_setup_requirements(argv, i)\n           for i in range(1, len(argv))):\n        return {\n            \"cmdclass\": {\n                \"build\": DummyBuild,\n                \"install\": DummyInstall,\n            }\n        }\n    else:\n        cffi_modules = [\n            \"src/_cffi_src/build_openssl.py:ffi\",\n            \"src/_cffi_src/build_constant_time.py:ffi\",\n            \"src/_cffi_src/build_padding.py:ffi\",\n        ]\n\n        return {\n            \"setup_requires\": setup_requirements,\n            \"cffi_modules\": cffi_modules\n        }\n\n\nsetup_requires_error = (\"Requested setup command that needs 'setup_requires' \"\n                        \"while command line arguments implied a side effect \"\n                        \"free command or option.\")\n\n\nclass DummyBuild(build):\n    \"\"\"\n    This class makes it very obvious when ``keywords_with_side_effects()`` has\n    incorrectly interpreted the command line arguments to ``setup.py build`` as\n    one of the 'side effect free' commands or options.\n    \"\"\"\n\n    def run(self):\n        raise RuntimeError(setup_requires_error)\n\n\nclass DummyInstall(install):\n    \"\"\"\n    This class makes it very obvious when ``keywords_with_side_effects()`` has\n    incorrectly interpreted the command line arguments to ``setup.py install``\n    as one of the 'side effect free' commands or options.\n    \"\"\"\n\n    def run(self):\n        raise RuntimeError(setup_requires_error)\n\n\nwith open(os.path.join(base_dir, \"README.rst\")) as f:\n    long_description = f.read()\n\n\nsetup(\n    name=about[\"__title__\"],\n    version=about[\"__version__\"],\n\n    description=about[\"__summary__\"],\n    long_description=long_description,\n    long_description_content_type=\"text/x-rst\",\n    license=about[\"__license__\"],\n    url=about[\"__uri__\"],\n\n    author=about[\"__author__\"],\n    author_email=about[\"__email__\"],\n\n    classifiers=[\n        \"Development Status :: 5 - Production/Stable\",\n        \"Intended Audience :: Developers\",\n        \"License :: OSI Approved :: Apache Software License\",\n        \"License :: OSI Approved :: BSD License\",\n        \"Natural Language :: English\",\n        \"Operating System :: MacOS :: MacOS X\",\n        \"Operating System :: POSIX\",\n        \"Operating System :: POSIX :: BSD\",\n        \"Operating System :: POSIX :: Linux\",\n        \"Operating System :: Microsoft :: Windows\",\n        \"Programming Language :: Python\",\n        \"Programming Language :: Python :: 2\",\n        \"Programming Language :: Python :: 2.7\",\n        \"Programming Language :: Python :: 3\",\n        \"Programming Language :: Python :: 3.4\",\n        \"Programming Language :: Python :: 3.5\",\n        \"Programming Language :: Python :: 3.6\",\n        \"Programming Language :: Python :: 3.7\",\n        \"Programming Language :: Python :: 3.8\",\n        \"Programming Language :: Python :: Implementation :: CPython\",\n        \"Programming Language :: Python :: Implementation :: PyPy\",\n        \"Topic :: Security :: Cryptography\",\n    ],\n\n    package_dir={\"\": \"src\"},\n    packages=find_packages(where=\"src\", exclude=[\"_cffi_src\", \"_cffi_src.*\"]),\n    include_package_data=True,\n\n    python_requires='>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*',\n\n    install_requires=[\n        \"six >= 1.4.1\",\n    ] + setup_requirements,\n    extras_require={\n        \":python_version < '3'\": [\"enum34\", \"ipaddress\"],\n\n        \"test\": [\n            \"pytest>=3.6.0,!=3.9.0,!=3.9.1,!=3.9.2\",\n            \"pretend\",\n            \"iso8601\",\n            \"pytz\",\n            \"hypothesis>=1.11.4,!=3.79.2\",\n        ],\n        \"docs\": [\n            \"sphinx >= 1.6.5,!=1.8.0\",\n            \"sphinx_rtd_theme\",\n        ],\n        \"docstest\": [\n            \"doc8\",\n            \"pyenchant >= 1.6.11\",\n            \"twine >= 1.12.0\",\n            \"sphinxcontrib-spelling >= 4.0.1\",\n        ],\n        \"pep8test\": [\n            \"flake8\",\n            \"flake8-import-order\",\n            \"pep8-naming\",\n        ],\n        # This extra is for the U-label support that was deprecated in\n        # cryptography 2.1. If you need this deprecated path install with\n        # pip install cryptography[idna]\n        \"idna\": [\n            \"idna >= 2.1\",\n        ]\n    },\n\n    # for cffi\n    zip_safe=False,\n    ext_package=\"cryptography.hazmat.bindings\",\n    **keywords_with_side_effects(sys.argv)\n)\n", "path": "setup.py"}]}