We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
0.19 release
Opening an issue to track the 0.19 release.

I think we are fairly ready to make the 0.19.0 release. Ideally, the following would be nice to do before the 0.19 alpha release (but not critical),
 - update browser versions used for testing https://github.com/pyodide/pyodide/pull/1952 
 - which should hopefully unblock emscripten update https://github.com/pyodide/pyodide/pull/2035
 - run the update `meta.yaml` script for all pure python packages 

For instance, maybe we could plan to have a
 - A release candidate 0.19.0rc0: 2021/12/22 or 23  -> to make it easier still use the main branch up to the final release
 - A final release 0.19.0: 2021/12/30
 
?

cc @hoodmane 

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `src/py/pyodide/__init__.py`
Content:
```
1 # When the pyodide package is imported, both the js and the pyodide_js modules
2 # will be available to import from. Not all functions in pyodide_js will work
3 # until after pyodide is first imported, imported functions from pyodide_js
4 # should not be used at import time. It is fine to use js functions at import
5 # time.
6 #
7 # All pure Python code that does not require js or pyodide_js should go in
8 # the _pyodide package.
9 #
10 # This package is imported by the test suite as well, and currently we don't use
11 # pytest mocks for js or pyodide_js, so make sure to test "if IN_BROWSER" before
12 # importing from these.
13 
14 from ._core import (
15     JsProxy,
16     JsException,
17     create_once_callable,
18     create_proxy,
19     to_js,
20     IN_BROWSER,
21     ConversionError,
22     destroy_proxies,
23 )
24 from _pyodide._base import (
25     eval_code,
26     eval_code_async,
27     find_imports,
28     CodeRunner,
29     should_quiet,
30 )
31 from .http import open_url
32 from . import _state  # noqa
33 
34 from _pyodide._importhook import register_js_module, unregister_js_module
35 
36 if IN_BROWSER:
37     import asyncio
38     from .webloop import WebLoopPolicy
39 
40     asyncio.set_event_loop_policy(WebLoopPolicy())
41 
42 
43 __version__ = "0.19.0dev0"
44 
45 __all__ = [
46     "open_url",
47     "eval_code",
48     "eval_code_async",
49     "CodeRunner",
50     "find_imports",
51     "JsProxy",
52     "JsException",
53     "to_js",
54     "register_js_module",
55     "unregister_js_module",
56     "create_once_callable",
57     "create_proxy",
58     "console",
59     "should_quiet",
60     "ConversionError",
61     "destroy_proxies",
62 ]
63
```

Path: `docs/conf.py`
Content:
```
1 # -*- coding: utf-8 -*-
2 # Configuration file for the Sphinx documentation builder.
3 
4 # -- Path setup --------------------------------------------------------------
5 
6 import os
7 import sys
8 from typing import Dict, Any
9 import pathlib
10 import subprocess
11 
12 base_dir = pathlib.Path(__file__).resolve().parent.parent
13 path_dirs = [
14     str(base_dir),
15     str(base_dir / "pyodide-build"),
16     str(base_dir / "docs/sphinx_pyodide"),
17     str(base_dir / "src/py"),
18     str(base_dir / "packages/micropip/src"),
19 ]
20 sys.path = path_dirs + sys.path
21 
22 # -- Project information -----------------------------------------------------
23 
24 project = "Pyodide"
25 copyright = "2019-2021, Pyodide contributors and Mozilla"
26 
27 import pyodide
28 import micropip  # noqa
29 
30 # We hacked it so that autodoc will look for submodules, but only if we import
31 # them here. TODO: look these up in the source directory?
32 import pyodide.console
33 import pyodide.http
34 import pyodide.webloop
35 
36 # The full version, including alpha/beta/rc tags.
37 release = version = pyodide.__version__
38 
39 
40 # -- General configuration ---------------------------------------------------
41 
42 # If your documentation needs a minimal Sphinx version, state it here.
43 #
44 # needs_sphinx = '1.0'
45 
46 extensions = [
47     "sphinx.ext.autodoc",
48     "sphinx.ext.autosummary",
49     "sphinxcontrib.napoleon",
50     "myst_parser",
51     "sphinx_js",
52     "autodocsumm",
53     "sphinx_panels",
54     "sphinx_pyodide",
55     "sphinx_argparse_cli",
56     #    "versionwarning.extension",
57     "sphinx_issues",
58 ]
59 
60 myst_enable_extensions = ["substitution"]
61 js_source_path = ["../src/js", "../src/core"]
62 jsdoc_config_path = "./jsdoc_conf.json"
63 root_for_relative_js_paths = "../src/"
64 issues_github_path = "pyodide/pyodide"
65 
66 versionwarning_messages = {
67     "latest": (
68         "This is the development version of the documentation. ",
69         'See <a href="https://pyodide.org/">here</a> for latest stable '
70         "documentation. Please do not use Pyodide with non "
71         "versioned (`dev`) URLs from the CDN for deployed applications!",
72     )
73 }
74 
75 autosummary_generate = True
76 autodoc_default_flags = ["members", "inherited-members"]
77 
78 # Add any paths that contain templates here, relative to this directory.
79 templates_path = ["_templates"]
80 
81 # The suffix(es) of source filenames.
82 source_suffix = [".rst", ".md"]
83 
84 # The master toctree document.
85 master_doc = "index"
86 
87 # The language for content autogenerated by Sphinx.
88 language = None
89 
90 # List of patterns, relative to source directory, that match files and
91 # directories to ignore when looking for source files.
92 exclude_patterns = ["_build", "Thumbs.db", ".DS_Store", "README.md"]
93 
94 # The name of the Pygments (syntax highlighting) style to use.
95 pygments_style = None
96 
97 # -- Options for HTML output -------------------------------------------------
98 
99 # The theme to use for HTML and HTML Help pages.  See the documentation for
100 # a list of builtin themes.
101 #
102 html_theme = "sphinx_book_theme"
103 html_logo = "_static/img/pyodide-logo.png"
104 html_title = f"Version {version}"
105 
106 # theme-specific options
107 html_theme_options: Dict[str, Any] = {}
108 
109 # paths that contain custom static files (such as style sheets)
110 html_static_path = ["_static"]
111 
112 
113 html_css_files = [
114     "css/pyodide.css",
115 ]
116 
117 # Custom sidebar templates, must be a dictionary that maps document names
118 # to template names.
119 # html_sidebars = {}
120 
121 # -- Options for HTMLHelp output ---------------------------------------------
122 
123 # Output file base name for HTML help builder.
124 htmlhelp_basename = "Pyodidedoc"
125 
126 # A list of files that should not be packed into the epub file.
127 epub_exclude_files = ["search.html"]
128 
129 if "READTHEDOCS" in os.environ:
130     env = {"PYODIDE_BASE_URL": "https://cdn.jsdelivr.net/pyodide/dev/full/"}
131     os.makedirs("_build/html", exist_ok=True)
132     res = subprocess.check_output(
133         ["make", "-C", "..", "docs/_build/html/console.html"],
134         env=env,
135         stderr=subprocess.STDOUT,
136         encoding="utf-8",
137     )
138     print(res)
139 
140 
141 # Prevent API docs for webloop methods: they are the same as for base event loop
142 # and it clutters api docs too much
143 
144 
145 def delete_attrs(cls):
146     for name in dir(cls):
147         if not name.startswith("_"):
148             try:
149                 delattr(cls, name)
150             except:
151                 pass
152 
153 
154 delete_attrs(pyodide.webloop.WebLoop)
155 delete_attrs(pyodide.webloop.WebLoopPolicy)
156 delete_attrs(pyodide.console.PyodideConsole)
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()

```

diff --git a/docs/conf.py b/docs/conf.py
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -127,7 +127,7 @@
 epub_exclude_files = ["search.html"]
 
 if "READTHEDOCS" in os.environ:
-    env = {"PYODIDE_BASE_URL": "https://cdn.jsdelivr.net/pyodide/dev/full/"}
+    env = {"PYODIDE_BASE_URL": "https://cdn.jsdelivr.net/pyodide/v0.19.0/full/"}
     os.makedirs("_build/html", exist_ok=True)
     res = subprocess.check_output(
         ["make", "-C", "..", "docs/_build/html/console.html"],
diff --git a/src/py/pyodide/__init__.py b/src/py/pyodide/__init__.py
--- a/src/py/pyodide/__init__.py
+++ b/src/py/pyodide/__init__.py
@@ -40,7 +40,7 @@
     asyncio.set_event_loop_policy(WebLoopPolicy())
 
 
-__version__ = "0.19.0dev0"
+__version__ = "0.19.0"
 
 __all__ = [
     "open_url",

{"golden_diff": "diff --git a/docs/conf.py b/docs/conf.py\n--- a/docs/conf.py\n+++ b/docs/conf.py\n@@ -127,7 +127,7 @@\n epub_exclude_files = [\"search.html\"]\n \n if \"READTHEDOCS\" in os.environ:\n-    env = {\"PYODIDE_BASE_URL\": \"https://cdn.jsdelivr.net/pyodide/dev/full/\"}\n+    env = {\"PYODIDE_BASE_URL\": \"https://cdn.jsdelivr.net/pyodide/v0.19.0/full/\"}\n     os.makedirs(\"_build/html\", exist_ok=True)\n     res = subprocess.check_output(\n         [\"make\", \"-C\", \"..\", \"docs/_build/html/console.html\"],\ndiff --git a/src/py/pyodide/__init__.py b/src/py/pyodide/__init__.py\n--- a/src/py/pyodide/__init__.py\n+++ b/src/py/pyodide/__init__.py\n@@ -40,7 +40,7 @@\n     asyncio.set_event_loop_policy(WebLoopPolicy())\n \n \n-__version__ = \"0.19.0dev0\"\n+__version__ = \"0.19.0\"\n \n __all__ = [\n     \"open_url\",\n", "issue": "0.19 release\nOpening an issue to track the 0.19 release.\r\n\r\nI think we are fairly ready to make the 0.19.0 release. Ideally, the following would be nice to do before the 0.19 alpha release (but not critical),\r\n - update browser versions used for testing https://github.com/pyodide/pyodide/pull/1952 \r\n - which should hopefully unblock emscripten update https://github.com/pyodide/pyodide/pull/2035\r\n - run the update `meta.yaml` script for all pure python packages \r\n\r\nFor instance, maybe we could plan to have a\r\n - A release candidate 0.19.0rc0: 2021/12/22 or 23  -> to make it easier still use the main branch up to the final release\r\n - A final release 0.19.0: 2021/12/30\r\n \r\n?\r\n\r\ncc @hoodmane \n", "before_files": [{"content": "# When the pyodide package is imported, both the js and the pyodide_js modules\n# will be available to import from. Not all functions in pyodide_js will work\n# until after pyodide is first imported, imported functions from pyodide_js\n# should not be used at import time. It is fine to use js functions at import\n# time.\n#\n# All pure Python code that does not require js or pyodide_js should go in\n# the _pyodide package.\n#\n# This package is imported by the test suite as well, and currently we don't use\n# pytest mocks for js or pyodide_js, so make sure to test \"if IN_BROWSER\" before\n# importing from these.\n\nfrom ._core import (\n    JsProxy,\n    JsException,\n    create_once_callable,\n    create_proxy,\n    to_js,\n    IN_BROWSER,\n    ConversionError,\n    destroy_proxies,\n)\nfrom _pyodide._base import (\n    eval_code,\n    eval_code_async,\n    find_imports,\n    CodeRunner,\n    should_quiet,\n)\nfrom .http import open_url\nfrom . import _state  # noqa\n\nfrom _pyodide._importhook import register_js_module, unregister_js_module\n\nif IN_BROWSER:\n    import asyncio\n    from .webloop import WebLoopPolicy\n\n    asyncio.set_event_loop_policy(WebLoopPolicy())\n\n\n__version__ = \"0.19.0dev0\"\n\n__all__ = [\n    \"open_url\",\n    \"eval_code\",\n    \"eval_code_async\",\n    \"CodeRunner\",\n    \"find_imports\",\n    \"JsProxy\",\n    \"JsException\",\n    \"to_js\",\n    \"register_js_module\",\n    \"unregister_js_module\",\n    \"create_once_callable\",\n    \"create_proxy\",\n    \"console\",\n    \"should_quiet\",\n    \"ConversionError\",\n    \"destroy_proxies\",\n]\n", "path": "src/py/pyodide/__init__.py"}, {"content": "# -*- coding: utf-8 -*-\n# Configuration file for the Sphinx documentation builder.\n\n# -- Path setup --------------------------------------------------------------\n\nimport os\nimport sys\nfrom typing import Dict, Any\nimport pathlib\nimport subprocess\n\nbase_dir = pathlib.Path(__file__).resolve().parent.parent\npath_dirs = [\n    str(base_dir),\n    str(base_dir / \"pyodide-build\"),\n    str(base_dir / \"docs/sphinx_pyodide\"),\n    str(base_dir / \"src/py\"),\n    str(base_dir / \"packages/micropip/src\"),\n]\nsys.path = path_dirs + sys.path\n\n# -- Project information -----------------------------------------------------\n\nproject = \"Pyodide\"\ncopyright = \"2019-2021, Pyodide contributors and Mozilla\"\n\nimport pyodide\nimport micropip  # noqa\n\n# We hacked it so that autodoc will look for submodules, but only if we import\n# them here. TODO: look these up in the source directory?\nimport pyodide.console\nimport pyodide.http\nimport pyodide.webloop\n\n# The full version, including alpha/beta/rc tags.\nrelease = version = pyodide.__version__\n\n\n# -- General configuration ---------------------------------------------------\n\n# If your documentation needs a minimal Sphinx version, state it here.\n#\n# needs_sphinx = '1.0'\n\nextensions = [\n    \"sphinx.ext.autodoc\",\n    \"sphinx.ext.autosummary\",\n    \"sphinxcontrib.napoleon\",\n    \"myst_parser\",\n    \"sphinx_js\",\n    \"autodocsumm\",\n    \"sphinx_panels\",\n    \"sphinx_pyodide\",\n    \"sphinx_argparse_cli\",\n    #    \"versionwarning.extension\",\n    \"sphinx_issues\",\n]\n\nmyst_enable_extensions = [\"substitution\"]\njs_source_path = [\"../src/js\", \"../src/core\"]\njsdoc_config_path = \"./jsdoc_conf.json\"\nroot_for_relative_js_paths = \"../src/\"\nissues_github_path = \"pyodide/pyodide\"\n\nversionwarning_messages = {\n    \"latest\": (\n        \"This is the development version of the documentation. \",\n        'See <a href=\"https://pyodide.org/\">here</a> for latest stable '\n        \"documentation. Please do not use Pyodide with non \"\n        \"versioned (`dev`) URLs from the CDN for deployed applications!\",\n    )\n}\n\nautosummary_generate = True\nautodoc_default_flags = [\"members\", \"inherited-members\"]\n\n# Add any paths that contain templates here, relative to this directory.\ntemplates_path = [\"_templates\"]\n\n# The suffix(es) of source filenames.\nsource_suffix = [\".rst\", \".md\"]\n\n# The master toctree document.\nmaster_doc = \"index\"\n\n# The language for content autogenerated by Sphinx.\nlanguage = None\n\n# List of patterns, relative to source directory, that match files and\n# directories to ignore when looking for source files.\nexclude_patterns = [\"_build\", \"Thumbs.db\", \".DS_Store\", \"README.md\"]\n\n# The name of the Pygments (syntax highlighting) style to use.\npygments_style = None\n\n# -- Options for HTML output -------------------------------------------------\n\n# The theme to use for HTML and HTML Help pages.  See the documentation for\n# a list of builtin themes.\n#\nhtml_theme = \"sphinx_book_theme\"\nhtml_logo = \"_static/img/pyodide-logo.png\"\nhtml_title = f\"Version {version}\"\n\n# theme-specific options\nhtml_theme_options: Dict[str, Any] = {}\n\n# paths that contain custom static files (such as style sheets)\nhtml_static_path = [\"_static\"]\n\n\nhtml_css_files = [\n    \"css/pyodide.css\",\n]\n\n# Custom sidebar templates, must be a dictionary that maps document names\n# to template names.\n# html_sidebars = {}\n\n# -- Options for HTMLHelp output ---------------------------------------------\n\n# Output file base name for HTML help builder.\nhtmlhelp_basename = \"Pyodidedoc\"\n\n# A list of files that should not be packed into the epub file.\nepub_exclude_files = [\"search.html\"]\n\nif \"READTHEDOCS\" in os.environ:\n    env = {\"PYODIDE_BASE_URL\": \"https://cdn.jsdelivr.net/pyodide/dev/full/\"}\n    os.makedirs(\"_build/html\", exist_ok=True)\n    res = subprocess.check_output(\n        [\"make\", \"-C\", \"..\", \"docs/_build/html/console.html\"],\n        env=env,\n        stderr=subprocess.STDOUT,\n        encoding=\"utf-8\",\n    )\n    print(res)\n\n\n# Prevent API docs for webloop methods: they are the same as for base event loop\n# and it clutters api docs too much\n\n\ndef delete_attrs(cls):\n    for name in dir(cls):\n        if not name.startswith(\"_\"):\n            try:\n                delattr(cls, name)\n            except:\n                pass\n\n\ndelete_attrs(pyodide.webloop.WebLoop)\ndelete_attrs(pyodide.webloop.WebLoopPolicy)\ndelete_attrs(pyodide.console.PyodideConsole)\n", "path": "docs/conf.py"}], "after_files": [{"content": "# When the pyodide package is imported, both the js and the pyodide_js modules\n# will be available to import from. Not all functions in pyodide_js will work\n# until after pyodide is first imported, imported functions from pyodide_js\n# should not be used at import time. It is fine to use js functions at import\n# time.\n#\n# All pure Python code that does not require js or pyodide_js should go in\n# the _pyodide package.\n#\n# This package is imported by the test suite as well, and currently we don't use\n# pytest mocks for js or pyodide_js, so make sure to test \"if IN_BROWSER\" before\n# importing from these.\n\nfrom ._core import (\n    JsProxy,\n    JsException,\n    create_once_callable,\n    create_proxy,\n    to_js,\n    IN_BROWSER,\n    ConversionError,\n    destroy_proxies,\n)\nfrom _pyodide._base import (\n    eval_code,\n    eval_code_async,\n    find_imports,\n    CodeRunner,\n    should_quiet,\n)\nfrom .http import open_url\nfrom . import _state  # noqa\n\nfrom _pyodide._importhook import register_js_module, unregister_js_module\n\nif IN_BROWSER:\n    import asyncio\n    from .webloop import WebLoopPolicy\n\n    asyncio.set_event_loop_policy(WebLoopPolicy())\n\n\n__version__ = \"0.19.0\"\n\n__all__ = [\n    \"open_url\",\n    \"eval_code\",\n    \"eval_code_async\",\n    \"CodeRunner\",\n    \"find_imports\",\n    \"JsProxy\",\n    \"JsException\",\n    \"to_js\",\n    \"register_js_module\",\n    \"unregister_js_module\",\n    \"create_once_callable\",\n    \"create_proxy\",\n    \"console\",\n    \"should_quiet\",\n    \"ConversionError\",\n    \"destroy_proxies\",\n]\n", "path": "src/py/pyodide/__init__.py"}, {"content": "# -*- coding: utf-8 -*-\n# Configuration file for the Sphinx documentation builder.\n\n# -- Path setup --------------------------------------------------------------\n\nimport os\nimport sys\nfrom typing import Dict, Any\nimport pathlib\nimport subprocess\n\nbase_dir = pathlib.Path(__file__).resolve().parent.parent\npath_dirs = [\n    str(base_dir),\n    str(base_dir / \"pyodide-build\"),\n    str(base_dir / \"docs/sphinx_pyodide\"),\n    str(base_dir / \"src/py\"),\n    str(base_dir / \"packages/micropip/src\"),\n]\nsys.path = path_dirs + sys.path\n\n# -- Project information -----------------------------------------------------\n\nproject = \"Pyodide\"\ncopyright = \"2019-2021, Pyodide contributors and Mozilla\"\n\nimport pyodide\nimport micropip  # noqa\n\n# We hacked it so that autodoc will look for submodules, but only if we import\n# them here. TODO: look these up in the source directory?\nimport pyodide.console\nimport pyodide.http\nimport pyodide.webloop\n\n# The full version, including alpha/beta/rc tags.\nrelease = version = pyodide.__version__\n\n\n# -- General configuration ---------------------------------------------------\n\n# If your documentation needs a minimal Sphinx version, state it here.\n#\n# needs_sphinx = '1.0'\n\nextensions = [\n    \"sphinx.ext.autodoc\",\n    \"sphinx.ext.autosummary\",\n    \"sphinxcontrib.napoleon\",\n    \"myst_parser\",\n    \"sphinx_js\",\n    \"autodocsumm\",\n    \"sphinx_panels\",\n    \"sphinx_pyodide\",\n    \"sphinx_argparse_cli\",\n    #    \"versionwarning.extension\",\n    \"sphinx_issues\",\n]\n\nmyst_enable_extensions = [\"substitution\"]\njs_source_path = [\"../src/js\", \"../src/core\"]\njsdoc_config_path = \"./jsdoc_conf.json\"\nroot_for_relative_js_paths = \"../src/\"\nissues_github_path = \"pyodide/pyodide\"\n\nversionwarning_messages = {\n    \"latest\": (\n        \"This is the development version of the documentation. \",\n        'See <a href=\"https://pyodide.org/\">here</a> for latest stable '\n        \"documentation. Please do not use Pyodide with non \"\n        \"versioned (`dev`) URLs from the CDN for deployed applications!\",\n    )\n}\n\nautosummary_generate = True\nautodoc_default_flags = [\"members\", \"inherited-members\"]\n\n# Add any paths that contain templates here, relative to this directory.\ntemplates_path = [\"_templates\"]\n\n# The suffix(es) of source filenames.\nsource_suffix = [\".rst\", \".md\"]\n\n# The master toctree document.\nmaster_doc = \"index\"\n\n# The language for content autogenerated by Sphinx.\nlanguage = None\n\n# List of patterns, relative to source directory, that match files and\n# directories to ignore when looking for source files.\nexclude_patterns = [\"_build\", \"Thumbs.db\", \".DS_Store\", \"README.md\"]\n\n# The name of the Pygments (syntax highlighting) style to use.\npygments_style = None\n\n# -- Options for HTML output -------------------------------------------------\n\n# The theme to use for HTML and HTML Help pages.  See the documentation for\n# a list of builtin themes.\n#\nhtml_theme = \"sphinx_book_theme\"\nhtml_logo = \"_static/img/pyodide-logo.png\"\nhtml_title = f\"Version {version}\"\n\n# theme-specific options\nhtml_theme_options: Dict[str, Any] = {}\n\n# paths that contain custom static files (such as style sheets)\nhtml_static_path = [\"_static\"]\n\n\nhtml_css_files = [\n    \"css/pyodide.css\",\n]\n\n# Custom sidebar templates, must be a dictionary that maps document names\n# to template names.\n# html_sidebars = {}\n\n# -- Options for HTMLHelp output ---------------------------------------------\n\n# Output file base name for HTML help builder.\nhtmlhelp_basename = \"Pyodidedoc\"\n\n# A list of files that should not be packed into the epub file.\nepub_exclude_files = [\"search.html\"]\n\nif \"READTHEDOCS\" in os.environ:\n    env = {\"PYODIDE_BASE_URL\": \"https://cdn.jsdelivr.net/pyodide/v0.19.0/full/\"}\n    os.makedirs(\"_build/html\", exist_ok=True)\n    res = subprocess.check_output(\n        [\"make\", \"-C\", \"..\", \"docs/_build/html/console.html\"],\n        env=env,\n        stderr=subprocess.STDOUT,\n        encoding=\"utf-8\",\n    )\n    print(res)\n\n\n# Prevent API docs for webloop methods: they are the same as for base event loop\n# and it clutters api docs too much\n\n\ndef delete_attrs(cls):\n    for name in dir(cls):\n        if not name.startswith(\"_\"):\n            try:\n                delattr(cls, name)\n            except:\n                pass\n\n\ndelete_attrs(pyodide.webloop.WebLoop)\ndelete_attrs(pyodide.webloop.WebLoopPolicy)\ndelete_attrs(pyodide.console.PyodideConsole)\n", "path": "docs/conf.py"}]}