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.
Files changed (130) hide show
  1. {fastled-1.4.6 → fastled-1.4.7}/PKG-INFO +1 -1
  2. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/__version__.py +1 -1
  3. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/playwright_browser.py +70 -25
  4. {fastled-1.4.6 → fastled-1.4.7}/src/fastled.egg-info/PKG-INFO +1 -1
  5. {fastled-1.4.6 → fastled-1.4.7}/.aiderignore +0 -0
  6. {fastled-1.4.6 → fastled-1.4.7}/.cursorrules +0 -0
  7. {fastled-1.4.6 → fastled-1.4.7}/.dockerignore +0 -0
  8. {fastled-1.4.6 → fastled-1.4.7}/.github/workflows/build_multi_docker_image.yml +0 -0
  9. {fastled-1.4.6 → fastled-1.4.7}/.github/workflows/build_webpage.yml +0 -0
  10. {fastled-1.4.6 → fastled-1.4.7}/.github/workflows/lint.yml +0 -0
  11. {fastled-1.4.6 → fastled-1.4.7}/.github/workflows/publish_release.yml +0 -0
  12. {fastled-1.4.6 → fastled-1.4.7}/.github/workflows/template_build_docker_image.yml +0 -0
  13. {fastled-1.4.6 → fastled-1.4.7}/.github/workflows/test_build_exe.yml +0 -0
  14. {fastled-1.4.6 → fastled-1.4.7}/.github/workflows/test_macos.yml +0 -0
  15. {fastled-1.4.6 → fastled-1.4.7}/.github/workflows/test_ubuntu.yml +0 -0
  16. {fastled-1.4.6 → fastled-1.4.7}/.github/workflows/test_win.yml +0 -0
  17. {fastled-1.4.6 → fastled-1.4.7}/.gitignore +0 -0
  18. {fastled-1.4.6 → fastled-1.4.7}/.pylintrc +0 -0
  19. {fastled-1.4.6 → fastled-1.4.7}/.vscode/launch.json +0 -0
  20. {fastled-1.4.6 → fastled-1.4.7}/.vscode/settings.json +0 -0
  21. {fastled-1.4.6 → fastled-1.4.7}/.vscode/tasks.json +0 -0
  22. {fastled-1.4.6 → fastled-1.4.7}/DEBUGGER.md +0 -0
  23. {fastled-1.4.6 → fastled-1.4.7}/Dockerfile +0 -0
  24. {fastled-1.4.6 → fastled-1.4.7}/FAQ.md +0 -0
  25. {fastled-1.4.6 → fastled-1.4.7}/LICENSE +0 -0
  26. {fastled-1.4.6 → fastled-1.4.7}/MANIFEST.in +0 -0
  27. {fastled-1.4.6 → fastled-1.4.7}/README.md +0 -0
  28. {fastled-1.4.6 → fastled-1.4.7}/RELEASE.md +0 -0
  29. {fastled-1.4.6 → fastled-1.4.7}/TODO.md +0 -0
  30. {fastled-1.4.6 → fastled-1.4.7}/build_exe.py +0 -0
  31. {fastled-1.4.6 → fastled-1.4.7}/build_local_docker.py +0 -0
  32. {fastled-1.4.6 → fastled-1.4.7}/build_site.py +0 -0
  33. {fastled-1.4.6 → fastled-1.4.7}/clean +0 -0
  34. {fastled-1.4.6 → fastled-1.4.7}/compiler/debug.sh +0 -0
  35. {fastled-1.4.6 → fastled-1.4.7}/compiler/run.py +0 -0
  36. {fastled-1.4.6 → fastled-1.4.7}/demo/100dots.html +0 -0
  37. {fastled-1.4.6 → fastled-1.4.7}/demo/demo_threejs.html +0 -0
  38. {fastled-1.4.6 → fastled-1.4.7}/demo/micdemo.html +0 -0
  39. {fastled-1.4.6 → fastled-1.4.7}/demo/mp3upload.html +0 -0
  40. {fastled-1.4.6 → fastled-1.4.7}/demo/webgl_postprocessing_unreal_bloom.html +0 -0
  41. {fastled-1.4.6 → fastled-1.4.7}/docker-compose.yml +0 -0
  42. {fastled-1.4.6 → fastled-1.4.7}/entrypoint.sh +0 -0
  43. {fastled-1.4.6 → fastled-1.4.7}/install +0 -0
  44. {fastled-1.4.6 → fastled-1.4.7}/install_linux.sh +0 -0
  45. {fastled-1.4.6 → fastled-1.4.7}/lint +0 -0
  46. {fastled-1.4.6 → fastled-1.4.7}/pyproject.toml +0 -0
  47. {fastled-1.4.6 → fastled-1.4.7}/requirements.docker.txt +0 -0
  48. {fastled-1.4.6 → fastled-1.4.7}/requirements.testing.txt +0 -0
  49. {fastled-1.4.6 → fastled-1.4.7}/setup.cfg +0 -0
  50. {fastled-1.4.6 → fastled-1.4.7}/setup.py +0 -0
  51. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/__init__.py +0 -0
  52. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/__main__.py +0 -0
  53. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/app.py +0 -0
  54. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/args.py +0 -0
  55. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/assets/example.txt +0 -0
  56. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/assets/localhost-key.pem +0 -0
  57. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/assets/localhost.pem +0 -0
  58. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/cli.py +0 -0
  59. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/cli_test.py +0 -0
  60. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/cli_test_interactive.py +0 -0
  61. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/client_server.py +0 -0
  62. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/compile_server.py +0 -0
  63. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/compile_server_impl.py +0 -0
  64. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/docker_manager.py +0 -0
  65. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/filewatcher.py +0 -0
  66. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/find_good_connection.py +0 -0
  67. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/keyboard.py +0 -0
  68. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/keyz.py +0 -0
  69. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/live_client.py +0 -0
  70. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/open_browser.py +0 -0
  71. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/parse_args.py +0 -0
  72. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/paths.py +0 -0
  73. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/print_filter.py +0 -0
  74. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/project_init.py +0 -0
  75. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/select_sketch_directory.py +0 -0
  76. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/server_flask.py +0 -0
  77. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/server_start.py +0 -0
  78. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/settings.py +0 -0
  79. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/site/build.py +0 -0
  80. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/site/examples.py +0 -0
  81. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/sketch.py +0 -0
  82. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/spinner.py +0 -0
  83. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/string_diff.py +0 -0
  84. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/test/can_run_local_docker_tests.py +0 -0
  85. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/test/examples.py +0 -0
  86. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/types.py +0 -0
  87. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/util.py +0 -0
  88. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/version.py +0 -0
  89. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/web_compile.py +0 -0
  90. {fastled-1.4.6 → fastled-1.4.7}/src/fastled/zip_files.py +0 -0
  91. {fastled-1.4.6 → fastled-1.4.7}/src/fastled.egg-info/SOURCES.txt +0 -0
  92. {fastled-1.4.6 → fastled-1.4.7}/src/fastled.egg-info/dependency_links.txt +0 -0
  93. {fastled-1.4.6 → fastled-1.4.7}/src/fastled.egg-info/entry_points.txt +0 -0
  94. {fastled-1.4.6 → fastled-1.4.7}/src/fastled.egg-info/requires.txt +0 -0
  95. {fastled-1.4.6 → fastled-1.4.7}/src/fastled.egg-info/top_level.txt +0 -0
  96. {fastled-1.4.6 → fastled-1.4.7}/test +0 -0
  97. {fastled-1.4.6 → fastled-1.4.7}/tests/integration/test_build_examples.py +0 -0
  98. {fastled-1.4.6 → fastled-1.4.7}/tests/integration/test_examples.py +0 -0
  99. {fastled-1.4.6 → fastled-1.4.7}/tests/integration/test_libcompile.py +0 -0
  100. {fastled-1.4.6 → fastled-1.4.7}/tests/integration/test_playwright_integration.py +0 -0
  101. {fastled-1.4.6 → fastled-1.4.7}/tests/unit/html/index.html +0 -0
  102. {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_api.py +0 -0
  103. {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_bad_ino.py +0 -0
  104. {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_banner_string.py +0 -0
  105. {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_cli.py +0 -0
  106. {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_cli_no_platformio.py +0 -0
  107. {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_compile_server.py +0 -0
  108. {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_debug_fetch_source_files.py +0 -0
  109. {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_docker_linux_on_windows.py +0 -0
  110. {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_embedded_data.py +0 -0
  111. {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_filechanger.py +0 -0
  112. {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_flask_headers.py +0 -0
  113. {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_http_server.py +0 -0
  114. {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_ino/bad/bad.ino +0 -0
  115. {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_ino/bad_platformio/bad_platformio.ino +0 -0
  116. {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_ino/bad_platformio/platformio.ini +0 -0
  117. {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_ino/embedded/data/bigdata.dat +0 -0
  118. {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_ino/embedded/wasm.ino +0 -0
  119. {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_ino/wasm/wasm.ino +0 -0
  120. {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_manual_api_invocation.py +0 -0
  121. {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_no_platformio_compile.py +0 -0
  122. {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_project_init.py +0 -0
  123. {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_server_and_client_seperatly.py +0 -0
  124. {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_session_compile.py +0 -0
  125. {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_string_diff.py +0 -0
  126. {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_string_diff_comprehensive.py +0 -0
  127. {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_version.py +0 -0
  128. {fastled-1.4.6 → fastled-1.4.7}/tests/unit/test_webcompile.py +0 -0
  129. {fastled-1.4.6 → fastled-1.4.7}/upload_package.sh +0 -0
  130. {fastled-1.4.6 → fastled-1.4.7}/vscode-plugin/readme +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fastled
3
- Version: 1.4.6
3
+ Version: 1.4.7
4
4
  Summary: FastLED Wasm Compiler
5
5
  Home-page: https://github.com/zackees/fastled-wasm
6
6
  Maintainer: Zachary Vorhies
@@ -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.6"
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
- self.browser = await playwright.chromium.launch(
118
- headless=self.headless,
119
- args=[
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
- # Set environment variable for Playwright browser path
599
- os.environ["PLAYWRIGHT_BROWSERS_PATH"] = str(playwright_dir.resolve())
635
+ # Check if browsers are installed in the custom directory
636
+ import glob
637
+ import platform
600
638
 
601
- from playwright.sync_api import sync_playwright
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
- with sync_playwright() as p:
604
- # Try to launch a browser to see if it's installed
605
- try:
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
- capture_output=True,
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(f"❌ Failed to install Playwright browsers: {result.stderr}")
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:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fastled
3
- Version: 1.4.6
3
+ Version: 1.4.7
4
4
  Summary: FastLED Wasm Compiler
5
5
  Home-page: https://github.com/zackees/fastled-wasm
6
6
  Maintainer: Zachary Vorhies
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