Skip to content

Commit

Permalink
PSDC Integration (#108)
Browse files Browse the repository at this point in the history
* Bulk update

* Post add-media-request instead of uploading in iframe.

* Use file mimetype for media files.

* Receive media

* Add crossorigin=anonymous to paper.css link

* Fixed media upload conflict

* Replace setTimeout with a poll

* Cleanup unused code

* Use mpy!

* Use mpy in the builder!!!!!!!!

* Load and use media files working again.

* Update index.html

* Update export.py

* Update media-file-model.ts

---------

Co-authored-by: Alex Martinez <alexmtz298@gmail.com>
  • Loading branch information
mchilvers and alex-martinez committed May 10, 2024
1 parent 9b2b3ff commit 86b89d2
Show file tree
Hide file tree
Showing 13 changed files with 84 additions and 275 deletions.
6 changes: 3 additions & 3 deletions examples/farmyard/index.html
Expand Up @@ -8,13 +8,13 @@
<meta name="viewport" content="width=device-width,initial-scale=1.0">

<!-- PyScript -->
<link rel="stylesheet" href="https://pyscript.net/releases/2024.4.1/core.css">
<script type="module" src="https://pyscript.net/releases/2024.4.1/core.js"></script>
<link rel="stylesheet" href="https://pyscript.net/releases/2024.5.1/core.css">
<script type="module" src="https://pyscript.net/releases/2024.5.1/core.js"></script>

<!-- App CSS Styles -->
<link rel="stylesheet" href="https://unpkg.com/papercss@1.9.2/dist/paper.min.css">
</head>
<body>
<script type="py" src="./main.py" config="./pyscript.toml" async></script>
<script type="mpy" src="./main.py" config="./pyscript.toml" async></script>
</body>
</html>
8 changes: 4 additions & 4 deletions src/invent/channels.py
Expand Up @@ -18,11 +18,11 @@
limitations under the License.
"""

from .task import Task
from .compatability import is_micropython, iscoroutinefunction

if not is_micropython:
import asyncio
import asyncio

from .task import Task
from .compatability import iscoroutinefunction


__all__ = [
Expand Down
3 changes: 1 addition & 2 deletions src/invent/compatability.py
Expand Up @@ -2,7 +2,6 @@

import inspect
import sys
import types


#: A flag to show if MicroPython is the current Python interpreter.
Expand All @@ -25,6 +24,6 @@ def iscoroutinefunction(obj):

if is_micropython: # pragma: no cover
# MicroPython seems to treat coroutines as generators :)
return type(obj) is types.GeneratorType
return inspect.isgeneratorfunction(obj)

return inspect.iscoroutinefunction(obj)
3 changes: 1 addition & 2 deletions src/invent/tasks/fetch.py
@@ -1,6 +1,5 @@
import invent
import pyscript
import asyncio


async def fetch(task, url, json=True):
Expand All @@ -11,7 +10,7 @@ async def fetch(task, url, json=True):
"""
if task.indicator:
invent.datastore[task.indicator] = True
await asyncio.sleep(4)

response = await pyscript.fetch(url)
if task.indicator:
invent.datastore[task.indicator] = False
Expand Down
51 changes: 5 additions & 46 deletions src/invent/ui/export.py
Expand Up @@ -30,16 +30,16 @@
<!-- PyScript -->
<link rel="stylesheet"
href="https://pyscript.net/releases/2024.4.1/core.css">
href="https://pyscript.net/releases/2024.5.1/core.css">
<script type="module"
src="https://pyscript.net/releases/2024.4.1/core.js"></script>
src="https://pyscript.net/releases/2024.5.1/core.js"></script>
<!-- App CSS Styles -->
<link rel="stylesheet"
href="https://unpkg.com/papercss@1.9.2/dist/paper.min.css">
</head>
<body>
<script type="py" src="./main.py" config="./pyscript.toml" async></script>
<script type="mpy" src="./main.py" config="./pyscript.toml" async></script>
</body>
</html>
"""
Expand Down Expand Up @@ -68,51 +68,10 @@


PYSCRIPT_TOML_TEMPLATE = """
packages = [ "pyodide_http", "requests" ]
experimental_create_proxy = "auto"
[files]
#
# invent
#
"{{INVENT}}" = "{invent_src}"
"{{INVENT_TO}}" = "./invent"
"{{INVENT}}/__init__.py"="{{INVENT_TO}}/__init__.py"
"{{INVENT}}/__about__.py"="{{INVENT_TO}}/__about__.py"
"{{INVENT}}/ai.py"="{{INVENT_TO}}/ai.py"
"{{INVENT}}/channels.py"="{{INVENT_TO}}/channels.py"
"{{INVENT}}/compatability.py"="{{INVENT_TO}}/compatability.py"
"{{INVENT}}/datastore.py"="{{INVENT_TO}}/datastore.py"
"{{INVENT}}/i18n.py"="{{INVENT_TO}}/i18n.py"
"{{INVENT}}/media.py"="{{INVENT_TO}}/media.py"
"{{INVENT}}/speech.py"="{{INVENT_TO}}/speech.py"
"{{INVENT}}/utils.py"="{{INVENT_TO}}/utils.py"
#
# invent.ui
#
"{{INVENT}}/ui/__init__.py"="{{INVENT_TO}}/ui/__init__.py"
"{{INVENT}}/ui/app.py"="{{INVENT_TO}}/ui/app.py"
"{{INVENT}}/ui/containers/__init__.py"="{{INVENT_TO}}/ui/containers/__init__.py"
"{{INVENT}}/ui/containers/column.py"="{{INVENT_TO}}/ui/containers/column.py"
"{{INVENT}}/ui/containers/grid.py"="{{INVENT_TO}}/ui/containers/grid.py"
"{{INVENT}}/ui/containers/page.py"="{{INVENT_TO}}/ui/containers/page.py"
"{{INVENT}}/ui/containers/row.py"="{{INVENT_TO}}/ui/containers/row.py"
"{{INVENT}}/ui/core/__init__.py"="{{INVENT_TO}}/ui/core/__init__.py"
"{{INVENT}}/ui/core/component.py"="{{INVENT_TO}}/ui/core/component.py"
"{{INVENT}}/ui/core/property.py"="{{INVENT_TO}}/ui/core/property.py"
"{{INVENT}}/ui/export.py"="{{INVENT_TO}}/ui/export.py"
"{{INVENT}}/ui/utils.py"="{{INVENT_TO}}/ui/utils.py"
"{{INVENT}}/ui/widgets/__init__.py"="{{INVENT_TO}}/ui/widgets/__init__.py"
"{{INVENT}}/ui/widgets/audio.py"="{{INVENT_TO}}/ui/widgets/audio.py"
"{{INVENT}}/ui/widgets/button.py"="{{INVENT_TO}}/ui/widgets/button.py"
"{{INVENT}}/ui/widgets/checkbox.py"="{{INVENT_TO}}/ui/widgets/checkbox.py"
"{{INVENT}}/ui/widgets/code.py"="{{INVENT_TO}}/ui/widgets/code.py"
"{{INVENT}}/ui/widgets/html.py"="{{INVENT_TO}}/ui/widgets/html.py"
"{{INVENT}}/ui/widgets/image.py"="{{INVENT_TO}}/ui/widgets/image.py"
"{{INVENT}}/ui/widgets/slider.py"="{{INVENT_TO}}/ui/widgets/slider.py"
"{{INVENT}}/ui/widgets/switch.py"="{{INVENT_TO}}/ui/widgets/switch.py"
"{{INVENT}}/ui/widgets/textbox.py"="{{INVENT_TO}}/ui/widgets/textbox.py"
"{{INVENT}}/ui/widgets/textinput.py"="{{INVENT_TO}}/ui/widgets/textinput.py"
"{{INVENT}}/ui/widgets/fileupload.py"="{{INVENT_TO}}/ui/widgets/fileupload.py"
"https://invent.pyscriptapps-dev.com/invent/latest/invent.zip" = "./*"
"""


Expand Down
7 changes: 2 additions & 5 deletions src/invent/ui/utils.py
Expand Up @@ -21,7 +21,7 @@

import random
from pyscript import document
from invent.compatability import is_micropython
from pyscript.ffi import create_proxy


__all__ = [
Expand Down Expand Up @@ -61,8 +61,5 @@ def sanitize(raw):
def proxy(function):
if not function:
return None
import pyodide

return (
pyodide.ffi.create_proxy(function) if not is_micropython else function
)
return create_proxy(function)
21 changes: 0 additions & 21 deletions src/pyscript.toml

This file was deleted.

4 changes: 2 additions & 2 deletions src/tools/builder/index.html
Expand Up @@ -6,11 +6,11 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Invent</title>
<!-- PyScript -->
<link rel="stylesheet" href="https://pyscript.net/releases/2024.4.1/core.css">
<link rel="stylesheet" href="https://pyscript.net/releases/2024.5.1/core.css">
</head>
<body class="overflow-hidden">
<div id="app"></div>
<script type="py" src="/python/main.py" config="/invent/python/pyscript.toml"></script>
<script type="mpy" src="/python/main.py" config="/invent/python/pyscript.toml" async></script>
<script type="module" src="/src/main.ts"></script>
</body>
</html>
3 changes: 1 addition & 2 deletions src/tools/builder/src/blocks/media/definitions.ts
Expand Up @@ -6,10 +6,9 @@ function getSoundFiles(): any {
const audioFiles: Array<MediaFileModel> = Object.values(builder.state.media).filter((file: MediaFileModel) => {
return file.type.startsWith("audio")
});

if (audioFiles.length > 0){
return audioFiles.map((file: MediaFileModel) => {
return [file.name, file.path];
return [file.name, file.name];
});
}
else {
Expand Down
2 changes: 1 addition & 1 deletion src/tools/builder/src/blocks/media/generators.ts
Expand Up @@ -9,7 +9,7 @@ pythonGenerator.forBlock['sound_files'] = function(block: Blockly.Block) {

pythonGenerator.forBlock['play_sound'] = function(block: Blockly.Block, generator: Blockly.Generator) {
const file: string = generator.valueToCode(block, 'file', 0);
const code = `invent.play_sound("${file}")\n`;
const code = `invent.play_sound(invent.media.sounds.${file})\n`;
return code;
};

Expand Down
1 change: 0 additions & 1 deletion src/tools/builder/src/data/models/media-file-model.ts
@@ -1,6 +1,5 @@
export interface MediaFileModel {
name: string;
file: Blob;
type: string;
path: string;
}
4 changes: 2 additions & 2 deletions src/tools/builder/src/main.ts
Expand Up @@ -9,9 +9,9 @@ import InventWidgets from "@/views/builder/components/page-editor/widgets";
import "@/data/providers/icon-provider";

// @ts-ignore
import { whenDefined } from "https://pyscript.net/releases/2024.4.1/core.js";
import { whenDefined } from "https://pyscript.net/releases/2024.5.1/core.js";

whenDefined("py").then(() => {
whenDefined("mpy").then(() => {
LocalizationUtilities.loadPreferredLanguageAsync().then(() => {
createApp(App)
.use(Components)
Expand Down

0 comments on commit 86b89d2

Please sign in to comment.