We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Missing classifiers for Python 3.8/3.9
Python 3.8 and 3.9 are missing from the classifiers in `setup.py`:

https://github.com/plotly/dash/blob/358c5089c929b2e99996f9d4ee6ec634f65437fe/setup.py#L55-L63

But there is no restriction to 3.7 or below in `python_requires`:
https://github.com/plotly/dash/blob/358c5089c929b2e99996f9d4ee6ec634f65437fe/setup.py#L29

Anecdotally, I've been using Dash on Python 3.9 with no issues. Reporting as an issue as I can't see any mention of Python 3.8 and 3.9 compatibility so far!

--- 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 import io
2 from setuptools import setup, find_packages
3 
4 main_ns = {}
5 exec(open("dash/version.py").read(), main_ns)  # pylint: disable=exec-used
6 
7 
8 def read_req_file(req_type):
9     with open("requires-{}.txt".format(req_type)) as fp:
10         requires = (line.strip() for line in fp)
11         return [req for req in requires if req and not req.startswith("#")]
12 
13 
14 setup(
15     name="dash",
16     version=main_ns["__version__"],
17     author="Chris Parmer",
18     author_email="chris@plotly.com",
19     packages=find_packages(exclude=["tests*"]),
20     include_package_data=True,
21     license="MIT",
22     description=(
23         "A Python framework for building reactive web-apps. "
24         "Developed by Plotly."
25     ),
26     long_description=io.open("README.md", encoding="utf-8").read(),
27     long_description_content_type="text/markdown",
28     install_requires=read_req_file("install"),
29     python_requires=">=2.7, !=3.0.*, !=3.1.*, !=3.2.*",
30     extras_require={
31         "dev": read_req_file("dev"),
32         "testing": read_req_file("testing"),
33     },
34     entry_points={
35         "console_scripts": [
36             "dash-generate-components = "
37             "dash.development.component_generator:cli",
38             "renderer = dash.development.build_process:renderer",
39         ],
40         "pytest11": ["dash = dash.testing.plugin"],
41     },
42     url="https://plotly.com/dash",
43     classifiers=[
44         "Development Status :: 5 - Production/Stable",
45         "Environment :: Web Environment",
46         "Framework :: Dash",
47         "Framework :: Flask",
48         "Intended Audience :: Developers",
49         "Intended Audience :: Education",
50         "Intended Audience :: Financial and Insurance Industry",
51         "Intended Audience :: Healthcare Industry",
52         "Intended Audience :: Manufacturing",
53         "Intended Audience :: Science/Research",
54         "License :: OSI Approved :: MIT License",
55         "Programming Language :: Python",
56         "Programming Language :: Python :: 2",
57         "Programming Language :: Python :: 2.7",
58         "Programming Language :: Python :: 3",
59         "Programming Language :: Python :: 3.3",
60         "Programming Language :: Python :: 3.4",
61         "Programming Language :: Python :: 3.5",
62         "Programming Language :: Python :: 3.6",
63         "Programming Language :: Python :: 3.7",
64         "Topic :: Database :: Front-Ends",
65         "Topic :: Office/Business :: Financial :: Spreadsheet",
66         "Topic :: Scientific/Engineering :: Visualization",
67         "Topic :: Software Development :: Libraries :: Application Frameworks",
68         "Topic :: Software Development :: Widget Sets",
69     ],
70 )
71
```
--- 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
@@ -61,6 +61,8 @@
         "Programming Language :: Python :: 3.5",
         "Programming Language :: Python :: 3.6",
         "Programming Language :: Python :: 3.7",
+        "Programming Language :: Python :: 3.8",
+        "Programming Language :: Python :: 3.9",
         "Topic :: Database :: Front-Ends",
         "Topic :: Office/Business :: Financial :: Spreadsheet",
         "Topic :: Scientific/Engineering :: Visualization",

{"golden_diff": "diff --git a/setup.py b/setup.py\n--- a/setup.py\n+++ b/setup.py\n@@ -61,6 +61,8 @@\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 :: 3.9\",\n         \"Topic :: Database :: Front-Ends\",\n         \"Topic :: Office/Business :: Financial :: Spreadsheet\",\n         \"Topic :: Scientific/Engineering :: Visualization\",\n", "issue": "Missing classifiers for Python 3.8/3.9\nPython 3.8 and 3.9 are missing from the classifiers in `setup.py`:\r\n\r\nhttps://github.com/plotly/dash/blob/358c5089c929b2e99996f9d4ee6ec634f65437fe/setup.py#L55-L63\r\n\r\nBut there is no restriction to 3.7 or below in `python_requires`:\r\nhttps://github.com/plotly/dash/blob/358c5089c929b2e99996f9d4ee6ec634f65437fe/setup.py#L29\r\n\r\nAnecdotally, I've been using Dash on Python 3.9 with no issues. Reporting as an issue as I can't see any mention of Python 3.8 and 3.9 compatibility so far!\n", "before_files": [{"content": "import io\nfrom setuptools import setup, find_packages\n\nmain_ns = {}\nexec(open(\"dash/version.py\").read(), main_ns)  # pylint: disable=exec-used\n\n\ndef read_req_file(req_type):\n    with open(\"requires-{}.txt\".format(req_type)) as fp:\n        requires = (line.strip() for line in fp)\n        return [req for req in requires if req and not req.startswith(\"#\")]\n\n\nsetup(\n    name=\"dash\",\n    version=main_ns[\"__version__\"],\n    author=\"Chris Parmer\",\n    author_email=\"chris@plotly.com\",\n    packages=find_packages(exclude=[\"tests*\"]),\n    include_package_data=True,\n    license=\"MIT\",\n    description=(\n        \"A Python framework for building reactive web-apps. \"\n        \"Developed by Plotly.\"\n    ),\n    long_description=io.open(\"README.md\", encoding=\"utf-8\").read(),\n    long_description_content_type=\"text/markdown\",\n    install_requires=read_req_file(\"install\"),\n    python_requires=\">=2.7, !=3.0.*, !=3.1.*, !=3.2.*\",\n    extras_require={\n        \"dev\": read_req_file(\"dev\"),\n        \"testing\": read_req_file(\"testing\"),\n    },\n    entry_points={\n        \"console_scripts\": [\n            \"dash-generate-components = \"\n            \"dash.development.component_generator:cli\",\n            \"renderer = dash.development.build_process:renderer\",\n        ],\n        \"pytest11\": [\"dash = dash.testing.plugin\"],\n    },\n    url=\"https://plotly.com/dash\",\n    classifiers=[\n        \"Development Status :: 5 - Production/Stable\",\n        \"Environment :: Web Environment\",\n        \"Framework :: Dash\",\n        \"Framework :: Flask\",\n        \"Intended Audience :: Developers\",\n        \"Intended Audience :: Education\",\n        \"Intended Audience :: Financial and Insurance Industry\",\n        \"Intended Audience :: Healthcare Industry\",\n        \"Intended Audience :: Manufacturing\",\n        \"Intended Audience :: Science/Research\",\n        \"License :: OSI Approved :: MIT License\",\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.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        \"Topic :: Database :: Front-Ends\",\n        \"Topic :: Office/Business :: Financial :: Spreadsheet\",\n        \"Topic :: Scientific/Engineering :: Visualization\",\n        \"Topic :: Software Development :: Libraries :: Application Frameworks\",\n        \"Topic :: Software Development :: Widget Sets\",\n    ],\n)\n", "path": "setup.py"}], "after_files": [{"content": "import io\nfrom setuptools import setup, find_packages\n\nmain_ns = {}\nexec(open(\"dash/version.py\").read(), main_ns)  # pylint: disable=exec-used\n\n\ndef read_req_file(req_type):\n    with open(\"requires-{}.txt\".format(req_type)) as fp:\n        requires = (line.strip() for line in fp)\n        return [req for req in requires if req and not req.startswith(\"#\")]\n\n\nsetup(\n    name=\"dash\",\n    version=main_ns[\"__version__\"],\n    author=\"Chris Parmer\",\n    author_email=\"chris@plotly.com\",\n    packages=find_packages(exclude=[\"tests*\"]),\n    include_package_data=True,\n    license=\"MIT\",\n    description=(\n        \"A Python framework for building reactive web-apps. \"\n        \"Developed by Plotly.\"\n    ),\n    long_description=io.open(\"README.md\", encoding=\"utf-8\").read(),\n    long_description_content_type=\"text/markdown\",\n    install_requires=read_req_file(\"install\"),\n    python_requires=\">=2.7, !=3.0.*, !=3.1.*, !=3.2.*\",\n    extras_require={\n        \"dev\": read_req_file(\"dev\"),\n        \"testing\": read_req_file(\"testing\"),\n    },\n    entry_points={\n        \"console_scripts\": [\n            \"dash-generate-components = \"\n            \"dash.development.component_generator:cli\",\n            \"renderer = dash.development.build_process:renderer\",\n        ],\n        \"pytest11\": [\"dash = dash.testing.plugin\"],\n    },\n    url=\"https://plotly.com/dash\",\n    classifiers=[\n        \"Development Status :: 5 - Production/Stable\",\n        \"Environment :: Web Environment\",\n        \"Framework :: Dash\",\n        \"Framework :: Flask\",\n        \"Intended Audience :: Developers\",\n        \"Intended Audience :: Education\",\n        \"Intended Audience :: Financial and Insurance Industry\",\n        \"Intended Audience :: Healthcare Industry\",\n        \"Intended Audience :: Manufacturing\",\n        \"Intended Audience :: Science/Research\",\n        \"License :: OSI Approved :: MIT License\",\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.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 :: 3.9\",\n        \"Topic :: Database :: Front-Ends\",\n        \"Topic :: Office/Business :: Financial :: Spreadsheet\",\n        \"Topic :: Scientific/Engineering :: Visualization\",\n        \"Topic :: Software Development :: Libraries :: Application Frameworks\",\n        \"Topic :: Software Development :: Widget Sets\",\n    ],\n)\n", "path": "setup.py"}]}