fastled 1.4.6__tar.gz → 1.4.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {fastled-1.4.6 → fastled-1.4.7}/PKG-INFO +1 -1
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/__version__.py +1 -1
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/playwright_browser.py +70 -25
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled.egg-info/PKG-INFO +1 -1
- {fastled-1.4.6 → fastled-1.4.7}/.aiderignore +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/.cursorrules +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/.dockerignore +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/.github/workflows/build_multi_docker_image.yml +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/.github/workflows/build_webpage.yml +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/.github/workflows/lint.yml +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/.github/workflows/publish_release.yml +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/.github/workflows/template_build_docker_image.yml +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/.github/workflows/test_build_exe.yml +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/.github/workflows/test_macos.yml +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/.github/workflows/test_ubuntu.yml +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/.github/workflows/test_win.yml +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/.gitignore +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/.pylintrc +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/.vscode/launch.json +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/.vscode/settings.json +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/.vscode/tasks.json +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/DEBUGGER.md +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/Dockerfile +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/FAQ.md +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/LICENSE +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/MANIFEST.in +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/README.md +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/RELEASE.md +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/TODO.md +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/build_exe.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/build_local_docker.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/build_site.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/clean +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/compiler/debug.sh +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/compiler/run.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/demo/100dots.html +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/demo/demo_threejs.html +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/demo/micdemo.html +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/demo/mp3upload.html +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/demo/webgl_postprocessing_unreal_bloom.html +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/docker-compose.yml +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/entrypoint.sh +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/install +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/install_linux.sh +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/lint +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/pyproject.toml +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/requirements.docker.txt +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/requirements.testing.txt +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/setup.cfg +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/setup.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/__init__.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/__main__.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/app.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/args.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/assets/example.txt +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/assets/localhost-key.pem +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/assets/localhost.pem +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/cli.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/cli_test.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/cli_test_interactive.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/client_server.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/compile_server.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/compile_server_impl.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/docker_manager.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/filewatcher.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/find_good_connection.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/keyboard.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/keyz.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/live_client.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/open_browser.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/parse_args.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/paths.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/print_filter.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/project_init.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/select_sketch_directory.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/server_flask.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/server_start.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/settings.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/site/build.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/site/examples.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/sketch.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/spinner.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/string_diff.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/test/can_run_local_docker_tests.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/test/examples.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/types.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/util.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/version.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/web_compile.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled/zip_files.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled.egg-info/SOURCES.txt +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled.egg-info/dependency_links.txt +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled.egg-info/entry_points.txt +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled.egg-info/requires.txt +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/src/fastled.egg-info/top_level.txt +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/test +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/integration/test_build_examples.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/integration/test_examples.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/integration/test_libcompile.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/integration/test_playwright_integration.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/unit/html/index.html +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_api.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_bad_ino.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_banner_string.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_cli.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_cli_no_platformio.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_compile_server.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_debug_fetch_source_files.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_docker_linux_on_windows.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_embedded_data.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_filechanger.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_flask_headers.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_http_server.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_ino/bad/bad.ino +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_ino/bad_platformio/bad_platformio.ino +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_ino/bad_platformio/platformio.ini +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_ino/embedded/data/bigdata.dat +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_ino/embedded/wasm.ino +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_ino/wasm/wasm.ino +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_manual_api_invocation.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_no_platformio_compile.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_project_init.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_server_and_client_seperatly.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_session_compile.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_string_diff.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_string_diff_comprehensive.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_version.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_webcompile.py +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/upload_package.sh +0 -0
- {fastled-1.4.6 → fastled-1.4.7}/vscode-plugin/readme +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
# IMPORTANT! There's a bug in github which will REJECT any version update
|
2
2
|
# that has any other change in the repo. Please bump the version as the
|
3
3
|
# ONLY change in a commit, or else the pypi update and the release will fail.
|
4
|
-
__version__ = "1.4.
|
4
|
+
__version__ = "1.4.7"
|
5
5
|
|
6
6
|
__version_url_latest__ = "https://raw.githubusercontent.com/zackees/fastled-wasm/refs/heads/main/src/fastled/__version__.py"
|
@@ -17,8 +17,6 @@ from typing import Any
|
|
17
17
|
# Set custom Playwright browser installation path
|
18
18
|
PLAYWRIGHT_DIR = Path.home() / ".fastled" / "playwright"
|
19
19
|
PLAYWRIGHT_DIR.mkdir(parents=True, exist_ok=True)
|
20
|
-
# Use absolute path and normalize for Windows compatibility
|
21
|
-
os.environ["PLAYWRIGHT_BROWSERS_PATH"] = str(PLAYWRIGHT_DIR.resolve())
|
22
20
|
|
23
21
|
try:
|
24
22
|
from playwright.async_api import Browser, Page, async_playwright
|
@@ -36,6 +34,36 @@ def is_playwright_available() -> bool:
|
|
36
34
|
return PLAYWRIGHT_AVAILABLE
|
37
35
|
|
38
36
|
|
37
|
+
def get_chromium_executable_path() -> str | None:
|
38
|
+
"""Get the path to the custom Chromium executable if it exists."""
|
39
|
+
import glob
|
40
|
+
import platform
|
41
|
+
|
42
|
+
playwright_dir = PLAYWRIGHT_DIR
|
43
|
+
|
44
|
+
if platform.system() == "Windows":
|
45
|
+
chromium_pattern = str(
|
46
|
+
playwright_dir / "chromium-*" / "chrome-win" / "chrome.exe"
|
47
|
+
)
|
48
|
+
elif platform.system() == "Darwin": # macOS
|
49
|
+
chromium_pattern = str(
|
50
|
+
playwright_dir
|
51
|
+
/ "chromium-*"
|
52
|
+
/ "chrome-mac"
|
53
|
+
/ "Chromium.app"
|
54
|
+
/ "Contents"
|
55
|
+
/ "MacOS"
|
56
|
+
/ "Chromium"
|
57
|
+
)
|
58
|
+
else: # Linux
|
59
|
+
chromium_pattern = str(
|
60
|
+
playwright_dir / "chromium-*" / "chrome-linux" / "chrome"
|
61
|
+
)
|
62
|
+
|
63
|
+
matches = glob.glob(chromium_pattern)
|
64
|
+
return matches[0] if matches else None
|
65
|
+
|
66
|
+
|
39
67
|
class PlaywrightBrowser:
|
40
68
|
"""Playwright browser manager for FastLED sketches."""
|
41
69
|
|
@@ -114,14 +142,25 @@ class PlaywrightBrowser:
|
|
114
142
|
|
115
143
|
self.playwright = async_playwright()
|
116
144
|
playwright = await self.playwright.start()
|
117
|
-
|
118
|
-
|
119
|
-
|
145
|
+
|
146
|
+
# Get custom Chromium executable path if available
|
147
|
+
executable_path = get_chromium_executable_path()
|
148
|
+
launch_kwargs = {
|
149
|
+
"headless": self.headless,
|
150
|
+
"args": [
|
120
151
|
"--disable-dev-shm-usage",
|
121
152
|
"--disable-web-security",
|
122
153
|
"--allow-running-insecure-content",
|
123
154
|
],
|
124
|
-
|
155
|
+
}
|
156
|
+
|
157
|
+
if executable_path:
|
158
|
+
launch_kwargs["executable_path"] = executable_path
|
159
|
+
print(
|
160
|
+
f"[PYTHON] Using custom Chromium executable: {executable_path}"
|
161
|
+
)
|
162
|
+
|
163
|
+
self.browser = await playwright.chromium.launch(**launch_kwargs)
|
125
164
|
else:
|
126
165
|
raise RuntimeError("Playwright is not available")
|
127
166
|
|
@@ -455,8 +494,6 @@ class PlaywrightBrowserProxy:
|
|
455
494
|
if self.monitor_thread is not None:
|
456
495
|
return
|
457
496
|
|
458
|
-
import os
|
459
|
-
|
460
497
|
def monitor_process():
|
461
498
|
"""Monitor the browser process and exit when it terminates."""
|
462
499
|
if self.process is None:
|
@@ -595,32 +632,38 @@ def install_playwright_browsers() -> bool:
|
|
595
632
|
playwright_dir = Path.home() / ".fastled" / "playwright"
|
596
633
|
playwright_dir.mkdir(parents=True, exist_ok=True)
|
597
634
|
|
598
|
-
#
|
599
|
-
|
635
|
+
# Check if browsers are installed in the custom directory
|
636
|
+
import glob
|
637
|
+
import platform
|
600
638
|
|
601
|
-
|
639
|
+
if platform.system() == "Windows":
|
640
|
+
chromium_pattern = str(
|
641
|
+
playwright_dir / "chromium-*" / "chrome-win" / "chrome.exe"
|
642
|
+
)
|
643
|
+
elif platform.system() == "Darwin": # macOS
|
644
|
+
chromium_pattern = str(
|
645
|
+
playwright_dir / "chromium-*" / "chrome-mac" / "Chromium.app"
|
646
|
+
)
|
647
|
+
else: # Linux
|
648
|
+
chromium_pattern = str(
|
649
|
+
playwright_dir / "chromium-*" / "chrome-linux" / "chrome"
|
650
|
+
)
|
602
651
|
|
603
|
-
|
604
|
-
|
605
|
-
|
606
|
-
browser = p.chromium.launch(headless=True)
|
607
|
-
browser.close()
|
608
|
-
return True
|
609
|
-
except Exception:
|
610
|
-
pass
|
652
|
+
if glob.glob(chromium_pattern):
|
653
|
+
print(f"✅ Playwright browsers already installed at: {playwright_dir}")
|
654
|
+
return True
|
611
655
|
|
612
656
|
# If we get here, browsers need to be installed
|
613
657
|
print("Installing Playwright browsers...")
|
614
658
|
print(f"Installing to: {playwright_dir}")
|
615
659
|
import subprocess
|
616
660
|
|
661
|
+
env = dict(os.environ)
|
662
|
+
env["PLAYWRIGHT_BROWSERS_PATH"] = str(playwright_dir.resolve())
|
663
|
+
|
617
664
|
result = subprocess.run(
|
618
665
|
[sys.executable, "-m", "playwright", "install", "chromium"],
|
619
|
-
|
620
|
-
text=True,
|
621
|
-
env=dict(
|
622
|
-
os.environ, PLAYWRIGHT_BROWSERS_PATH=str(playwright_dir.resolve())
|
623
|
-
),
|
666
|
+
env=env,
|
624
667
|
)
|
625
668
|
|
626
669
|
if result.returncode == 0:
|
@@ -628,7 +671,9 @@ def install_playwright_browsers() -> bool:
|
|
628
671
|
print(f" Location: {playwright_dir}")
|
629
672
|
return True
|
630
673
|
else:
|
631
|
-
print(
|
674
|
+
print(
|
675
|
+
f"❌ Failed to install Playwright browsers (exit code: {result.returncode})"
|
676
|
+
)
|
632
677
|
return False
|
633
678
|
|
634
679
|
except Exception as e:
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|