prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Official support for CPython 3.8
  CPython 3.8.0 was [released Oct 14, 2019](https://www.python.org/downloads/release/python-380/).
  
  Make Falcon offically support CPython 3.8:
  - [ ] README
  - [ ] Docker images
  - [ ] Docs
  - [ ] Tox
  - [ ] Travis
  - [ ] setup.py
  
  --- 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 glob
  2 import imp
  3 import io
  4 import os
  5 from os import path
  6 import re
  7 import sys
  8 
  9 from setuptools import Extension, find_packages, setup
  10 
  11 MYDIR = path.abspath(os.path.dirname(__file__))
  12 
  13 VERSION = imp.load_source('version', path.join('.', 'falcon', 'version.py'))
  14 VERSION = VERSION.__version__
  15 
  16 REQUIRES = []
  17 
  18 try:
  19     sys.pypy_version_info
  20     PYPY = True
  21 except AttributeError:
  22     PYPY = False
  23 
  24 if PYPY:
  25     CYTHON = False
  26 else:
  27     try:
  28         from Cython.Distutils import build_ext
  29         CYTHON = True
  30     except ImportError:
  31         # TODO(kgriffs): pip now ignores all output, so the user
  32         # may not see this message. See also:
  33         #
  34         #   https://github.com/pypa/pip/issues/2732
  35         #
  36         print('\nNOTE: Cython not installed. '
  37               'Falcon will still work fine, but may run '
  38               'a bit slower.\n')
  39         CYTHON = False
  40 
  41 if CYTHON:
  42     def list_modules(dirname):
  43         filenames = glob.glob(path.join(dirname, '*.py'))
  44 
  45         module_names = []
  46         for name in filenames:
  47             module, ext = path.splitext(path.basename(name))
  48             if module != '__init__':
  49                 module_names.append(module)
  50 
  51         return module_names
  52 
  53     package_names = [
  54         'falcon',
  55         'falcon.media',
  56         'falcon.routing',
  57         'falcon.util',
  58         'falcon.vendor.mimeparse',
  59     ]
  60     ext_modules = [
  61         Extension(
  62             package + '.' + module,
  63             [path.join(*(package.split('.') + [module + '.py']))]
  64         )
  65         for package in package_names
  66         for module in list_modules(path.join(MYDIR, *package.split('.')))
  67     ]
  68 
  69     cmdclass = {'build_ext': build_ext}
  70 
  71 else:
  72     cmdclass = {}
  73     ext_modules = []
  74 
  75 
  76 def load_description():
  77     in_patron_list = False
  78     in_patron_replacement = False
  79     in_raw = False
  80 
  81     description_lines = []
  82 
  83     # NOTE(kgriffs): PyPI does not support the raw directive
  84     for readme_line in io.open('README.rst', 'r', encoding='utf-8'):
  85 
  86         # NOTE(vytas): The patron list largely builds upon raw sections
  87         if readme_line.startswith('.. Patron list starts'):
  88             in_patron_list = True
  89             in_patron_replacement = True
  90             continue
  91         elif in_patron_list:
  92             if not readme_line.strip():
  93                 in_patron_replacement = False
  94             elif in_patron_replacement:
  95                 description_lines.append(readme_line.lstrip())
  96             if readme_line.startswith('.. Patron list ends'):
  97                 in_patron_list = False
  98             continue
  99         elif readme_line.startswith('.. raw::'):
  100             in_raw = True
  101         elif in_raw:
  102             if readme_line and not re.match(r'\s', readme_line):
  103                 in_raw = False
  104 
  105         if not in_raw:
  106             description_lines.append(readme_line)
  107 
  108     return ''.join(description_lines)
  109 
  110 
  111 setup(
  112     name='falcon',
  113     version=VERSION,
  114     description='An unladen web framework for building APIs and app backends.',
  115     long_description=load_description(),
  116     long_description_content_type='text/x-rst',
  117     classifiers=[
  118         'Development Status :: 5 - Production/Stable',
  119         'Environment :: Web Environment',
  120         'Natural Language :: English',
  121         'Intended Audience :: Developers',
  122         'Intended Audience :: System Administrators',
  123         'License :: OSI Approved :: Apache Software License',
  124         'Operating System :: MacOS :: MacOS X',
  125         'Operating System :: Microsoft :: Windows',
  126         'Operating System :: POSIX',
  127         'Topic :: Internet :: WWW/HTTP :: WSGI',
  128         'Topic :: Software Development :: Libraries :: Application Frameworks',
  129         'Programming Language :: Python',
  130         'Programming Language :: Python :: Implementation :: CPython',
  131         'Programming Language :: Python :: Implementation :: PyPy',
  132         'Programming Language :: Python :: 3',
  133         'Programming Language :: Python :: 3.5',
  134         'Programming Language :: Python :: 3.6',
  135         'Programming Language :: Python :: 3.7',
  136     ],
  137     keywords='wsgi web api framework rest http cloud',
  138     author='Kurt Griffiths',
  139     author_email='mail@kgriffs.com',
  140     url='https://falconframework.org',
  141     license='Apache 2.0',
  142     packages=find_packages(exclude=['tests']),
  143     include_package_data=True,
  144     zip_safe=False,
  145     python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*',
  146     install_requires=REQUIRES,
  147     cmdclass=cmdclass,
  148     ext_modules=ext_modules,
  149     tests_require=['testtools', 'requests', 'pyyaml', 'pytest', 'pytest-runner'],
  150     entry_points={
  151         'console_scripts': [
  152             'falcon-bench = falcon.cmd.bench:main',
  153             'falcon-print-routes = falcon.cmd.print_routes:main'
  154         ]
  155     }
  156 )
  157
  ```
  --- 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()
  
  ```
  
golden_diff: diff --git a/setup.py b/setup.py
  --- a/setup.py
  +++ b/setup.py
  @@ -133,6 +133,7 @@
           'Programming Language :: Python :: 3.5',
           'Programming Language :: Python :: 3.6',
           'Programming Language :: Python :: 3.7',
  +        'Programming Language :: Python :: 3.8',
       ],
       keywords='wsgi web api framework rest http cloud',
       author='Kurt Griffiths',
  
verification_info: {"golden_diff": "diff --git a/setup.py b/setup.py\n--- a/setup.py\n+++ b/setup.py\n@@ -133,6 +133,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     ],\n     keywords='wsgi web api framework rest http cloud',\n     author='Kurt Griffiths',\n", "issue": "Official support for CPython 3.8\nCPython 3.8.0 was [released Oct 14, 2019](https://www.python.org/downloads/release/python-380/).\r\n\r\nMake Falcon offically support CPython 3.8:\r\n- [ ] README\r\n- [ ] Docker images\r\n- [ ] Docs\r\n- [ ] Tox\r\n- [ ] Travis\r\n- [ ] setup.py\n", "before_files": [{"content": "import glob\nimport imp\nimport io\nimport os\nfrom os import path\nimport re\nimport sys\n\nfrom setuptools import Extension, find_packages, setup\n\nMYDIR = path.abspath(os.path.dirname(__file__))\n\nVERSION = imp.load_source('version', path.join('.', 'falcon', 'version.py'))\nVERSION = VERSION.__version__\n\nREQUIRES = []\n\ntry:\n    sys.pypy_version_info\n    PYPY = True\nexcept AttributeError:\n    PYPY = False\n\nif PYPY:\n    CYTHON = False\nelse:\n    try:\n        from Cython.Distutils import build_ext\n        CYTHON = True\n    except ImportError:\n        # TODO(kgriffs): pip now ignores all output, so the user\n        # may not see this message. See also:\n        #\n        #   https://github.com/pypa/pip/issues/2732\n        #\n        print('\\nNOTE: Cython not installed. '\n              'Falcon will still work fine, but may run '\n              'a bit slower.\\n')\n        CYTHON = False\n\nif CYTHON:\n    def list_modules(dirname):\n        filenames = glob.glob(path.join(dirname, '*.py'))\n\n        module_names = []\n        for name in filenames:\n            module, ext = path.splitext(path.basename(name))\n            if module != '__init__':\n                module_names.append(module)\n\n        return module_names\n\n    package_names = [\n        'falcon',\n        'falcon.media',\n        'falcon.routing',\n        'falcon.util',\n        'falcon.vendor.mimeparse',\n    ]\n    ext_modules = [\n        Extension(\n            package + '.' + module,\n            [path.join(*(package.split('.') + [module + '.py']))]\n        )\n        for package in package_names\n        for module in list_modules(path.join(MYDIR, *package.split('.')))\n    ]\n\n    cmdclass = {'build_ext': build_ext}\n\nelse:\n    cmdclass = {}\n    ext_modules = []\n\n\ndef load_description():\n    in_patron_list = False\n    in_patron_replacement = False\n    in_raw = False\n\n    description_lines = []\n\n    # NOTE(kgriffs): PyPI does not support the raw directive\n    for readme_line in io.open('README.rst', 'r', encoding='utf-8'):\n\n        # NOTE(vytas): The patron list largely builds upon raw sections\n        if readme_line.startswith('.. Patron list starts'):\n            in_patron_list = True\n            in_patron_replacement = True\n            continue\n        elif in_patron_list:\n            if not readme_line.strip():\n                in_patron_replacement = False\n            elif in_patron_replacement:\n                description_lines.append(readme_line.lstrip())\n            if readme_line.startswith('.. Patron list ends'):\n                in_patron_list = False\n            continue\n        elif readme_line.startswith('.. raw::'):\n            in_raw = True\n        elif in_raw:\n            if readme_line and not re.match(r'\\s', readme_line):\n                in_raw = False\n\n        if not in_raw:\n            description_lines.append(readme_line)\n\n    return ''.join(description_lines)\n\n\nsetup(\n    name='falcon',\n    version=VERSION,\n    description='An unladen web framework for building APIs and app backends.',\n    long_description=load_description(),\n    long_description_content_type='text/x-rst',\n    classifiers=[\n        'Development Status :: 5 - Production/Stable',\n        'Environment :: Web Environment',\n        'Natural Language :: English',\n        'Intended Audience :: Developers',\n        'Intended Audience :: System Administrators',\n        'License :: OSI Approved :: Apache Software License',\n        'Operating System :: MacOS :: MacOS X',\n        'Operating System :: Microsoft :: Windows',\n        'Operating System :: POSIX',\n        'Topic :: Internet :: WWW/HTTP :: WSGI',\n        'Topic :: Software Development :: Libraries :: Application Frameworks',\n        'Programming Language :: Python',\n        'Programming Language :: Python :: Implementation :: CPython',\n        'Programming Language :: Python :: Implementation :: PyPy',\n        'Programming Language :: Python :: 3',\n        'Programming Language :: Python :: 3.5',\n        'Programming Language :: Python :: 3.6',\n        'Programming Language :: Python :: 3.7',\n    ],\n    keywords='wsgi web api framework rest http cloud',\n    author='Kurt Griffiths',\n    author_email='mail@kgriffs.com',\n    url='https://falconframework.org',\n    license='Apache 2.0',\n    packages=find_packages(exclude=['tests']),\n    include_package_data=True,\n    zip_safe=False,\n    python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*',\n    install_requires=REQUIRES,\n    cmdclass=cmdclass,\n    ext_modules=ext_modules,\n    tests_require=['testtools', 'requests', 'pyyaml', 'pytest', 'pytest-runner'],\n    entry_points={\n        'console_scripts': [\n            'falcon-bench = falcon.cmd.bench:main',\n            'falcon-print-routes = falcon.cmd.print_routes:main'\n        ]\n    }\n)\n", "path": "setup.py"}], "after_files": [{"content": "import glob\nimport imp\nimport io\nimport os\nfrom os import path\nimport re\nimport sys\n\nfrom setuptools import Extension, find_packages, setup\n\nMYDIR = path.abspath(os.path.dirname(__file__))\n\nVERSION = imp.load_source('version', path.join('.', 'falcon', 'version.py'))\nVERSION = VERSION.__version__\n\nREQUIRES = []\n\ntry:\n    sys.pypy_version_info\n    PYPY = True\nexcept AttributeError:\n    PYPY = False\n\nif PYPY:\n    CYTHON = False\nelse:\n    try:\n        from Cython.Distutils import build_ext\n        CYTHON = True\n    except ImportError:\n        # TODO(kgriffs): pip now ignores all output, so the user\n        # may not see this message. See also:\n        #\n        #   https://github.com/pypa/pip/issues/2732\n        #\n        print('\\nNOTE: Cython not installed. '\n              'Falcon will still work fine, but may run '\n              'a bit slower.\\n')\n        CYTHON = False\n\nif CYTHON:\n    def list_modules(dirname):\n        filenames = glob.glob(path.join(dirname, '*.py'))\n\n        module_names = []\n        for name in filenames:\n            module, ext = path.splitext(path.basename(name))\n            if module != '__init__':\n                module_names.append(module)\n\n        return module_names\n\n    package_names = [\n        'falcon',\n        'falcon.media',\n        'falcon.routing',\n        'falcon.util',\n        'falcon.vendor.mimeparse',\n    ]\n    ext_modules = [\n        Extension(\n            package + '.' + module,\n            [path.join(*(package.split('.') + [module + '.py']))]\n        )\n        for package in package_names\n        for module in list_modules(path.join(MYDIR, *package.split('.')))\n    ]\n\n    cmdclass = {'build_ext': build_ext}\n\nelse:\n    cmdclass = {}\n    ext_modules = []\n\n\ndef load_description():\n    in_patron_list = False\n    in_patron_replacement = False\n    in_raw = False\n\n    description_lines = []\n\n    # NOTE(kgriffs): PyPI does not support the raw directive\n    for readme_line in io.open('README.rst', 'r', encoding='utf-8'):\n\n        # NOTE(vytas): The patron list largely builds upon raw sections\n        if readme_line.startswith('.. Patron list starts'):\n            in_patron_list = True\n            in_patron_replacement = True\n            continue\n        elif in_patron_list:\n            if not readme_line.strip():\n                in_patron_replacement = False\n            elif in_patron_replacement:\n                description_lines.append(readme_line.lstrip())\n            if readme_line.startswith('.. Patron list ends'):\n                in_patron_list = False\n            continue\n        elif readme_line.startswith('.. raw::'):\n            in_raw = True\n        elif in_raw:\n            if readme_line and not re.match(r'\\s', readme_line):\n                in_raw = False\n\n        if not in_raw:\n            description_lines.append(readme_line)\n\n    return ''.join(description_lines)\n\n\nsetup(\n    name='falcon',\n    version=VERSION,\n    description='An unladen web framework for building APIs and app backends.',\n    long_description=load_description(),\n    long_description_content_type='text/x-rst',\n    classifiers=[\n        'Development Status :: 5 - Production/Stable',\n        'Environment :: Web Environment',\n        'Natural Language :: English',\n        'Intended Audience :: Developers',\n        'Intended Audience :: System Administrators',\n        'License :: OSI Approved :: Apache Software License',\n        'Operating System :: MacOS :: MacOS X',\n        'Operating System :: Microsoft :: Windows',\n        'Operating System :: POSIX',\n        'Topic :: Internet :: WWW/HTTP :: WSGI',\n        'Topic :: Software Development :: Libraries :: Application Frameworks',\n        'Programming Language :: Python',\n        'Programming Language :: Python :: Implementation :: CPython',\n        'Programming Language :: Python :: Implementation :: PyPy',\n        'Programming Language :: Python :: 3',\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    ],\n    keywords='wsgi web api framework rest http cloud',\n    author='Kurt Griffiths',\n    author_email='mail@kgriffs.com',\n    url='https://falconframework.org',\n    license='Apache 2.0',\n    packages=find_packages(exclude=['tests']),\n    include_package_data=True,\n    zip_safe=False,\n    python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*',\n    install_requires=REQUIRES,\n    cmdclass=cmdclass,\n    ext_modules=ext_modules,\n    tests_require=['testtools', 'requests', 'pyyaml', 'pytest', 'pytest-runner'],\n    entry_points={\n        'console_scripts': [\n            'falcon-bench = falcon.cmd.bench:main',\n            'falcon-print-routes = falcon.cmd.print_routes:main'\n        ]\n    }\n)\n", "path": "setup.py"}]}