Defaulting to async for top-level await (#2134)

This commit is contained in:
Andrea Giammarchi
2024-08-05 15:55:53 +02:00
committed by GitHub
parent fafdf74007
commit 0d0ea96435
8 changed files with 37 additions and 609 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "@pyscript/core",
"version": "0.5.2",
"version": "0.5.3",
"type": "module",
"description": "PyScript",
"module": "./index.js",
@@ -44,7 +44,7 @@
"dependencies": {
"@ungap/with-resolvers": "^0.1.0",
"basic-devtools": "^0.1.6",
"polyscript": "^0.14.5",
"polyscript": "^0.15.0",
"sticky-module": "^0.1.1",
"to-json-callback": "^0.1.1",
"type-checked-collections": "^0.1.7"
@@ -54,7 +54,7 @@
"@codemirror/lang-python": "^6.1.6",
"@codemirror/language": "^6.10.2",
"@codemirror/state": "^6.4.1",
"@codemirror/view": "^6.29.1",
"@codemirror/view": "^6.30.0",
"@playwright/test": "^1.45.3",
"@rollup/plugin-commonjs": "^26.0.1",
"@rollup/plugin-node-resolve": "^15.2.3",

Binary file not shown.

View File

@@ -12,6 +12,7 @@ import {
define,
defineProperty,
dispatch,
isSync,
queryTarget,
unescape,
whenDefined,
@@ -202,15 +203,13 @@ for (const [TYPE, interpreter] of TYPES) {
}
if (isScript(element)) {
const {
attributes: { async: isAsync, target },
} = element;
const hasTarget = !!target?.value;
const show = hasTarget
? queryTarget(element, target.value)
const isAsync = !isSync(element);
const target = element.getAttribute("target");
const show = target
? queryTarget(element, target)
: document.createElement("script-py");
if (!hasTarget) {
if (!target) {
const { head, body } = document;
if (head.contains(element)) body.append(show);
else element.after(show);
@@ -331,7 +330,7 @@ for (const [TYPE, interpreter] of TYPES) {
async connectedCallback() {
if (!this.executed) {
this.executed = true;
const isAsync = this.hasAttribute("async");
const isAsync = !isSync(this);
const { io, run, runAsync } = await this._wrap
.promise;
this.srcCode = await fetchSource(

View File

@@ -5,11 +5,17 @@
<script type="module" src="../dist/core.js"></script>
</head>
<body>
<py-script async>
<py-script>
import asyncio
print('foo')
print('py-script sleep')
await asyncio.sleep(1)
print('bar')
print('py-script done')
</py-script>
<script type="py">
import asyncio
print('script-py sleep')
await asyncio.sleep(1)
print('script-py done')
</script>
</body>
</html>

View File

@@ -48,12 +48,12 @@
</script>
</head>
<body>
<script type="mpy" worker>
<script type="mpy" async="false" worker>
from pyscript import document
print("actual code in worker")
document.documentElement.classList.add('worker')
</script>
<script type="mpy">
<script type="mpy" async="false">
print("actual code in main")
</script>
</body>

View File

@@ -97,7 +97,7 @@ class TestBasic(PyScriptTest):
def test_input_exception(self):
self.pyscript_run(
"""
<script type="py">
<script type="py" async="false">
input("what's your name?")
</script>
"""

View File

@@ -43,12 +43,12 @@ class TestDisplay(PyScriptTest):
def test_consecutive_display(self):
self.pyscript_run(
"""
<script type="py">
<script type="py" async="false">
from pyscript import display
display('hello 1')
</script>
<p>hello 2</p>
<script type="py">
<script type="py" async="false">
from pyscript import display
display('hello 3')
</script>
@@ -177,16 +177,16 @@ class TestDisplay(PyScriptTest):
def test_consecutive_display_target(self):
self.pyscript_run(
"""
<script type="py" id="first">
<script type="py" id="first" async="false">
from pyscript import display
display('hello 1')
</script>
<p>hello in between 1 and 2</p>
<script type="py" id="second">
<script type="py" id="second" async="false">
from pyscript import display
display('hello 2', target="second")
</script>
<script type="py" id="third">
<script type="py" id="third" async="false">
from pyscript import display
display('hello 3')
</script>