plexus-python 0.6.1__tar.gz → 0.6.2__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 (51) hide show
  1. {plexus_python-0.6.1 → plexus_python-0.6.2}/CHANGELOG.md +11 -0
  2. {plexus_python-0.6.1 → plexus_python-0.6.2}/PKG-INFO +4 -5
  3. {plexus_python-0.6.1 → plexus_python-0.6.2}/plexus/__init__.py +1 -1
  4. {plexus_python-0.6.1 → plexus_python-0.6.2}/plexus/client.py +5 -5
  5. {plexus_python-0.6.1 → plexus_python-0.6.2}/pyproject.toml +7 -8
  6. {plexus_python-0.6.1 → plexus_python-0.6.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  7. {plexus_python-0.6.1 → plexus_python-0.6.2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  8. {plexus_python-0.6.1 → plexus_python-0.6.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  9. {plexus_python-0.6.1 → plexus_python-0.6.2}/.github/workflows/ci.yml +0 -0
  10. {plexus_python-0.6.1 → plexus_python-0.6.2}/.github/workflows/publish.yml +0 -0
  11. {plexus_python-0.6.1 → plexus_python-0.6.2}/.gitignore +0 -0
  12. {plexus_python-0.6.1 → plexus_python-0.6.2}/AGENTS.md +0 -0
  13. {plexus_python-0.6.1 → plexus_python-0.6.2}/API.md +0 -0
  14. {plexus_python-0.6.1 → plexus_python-0.6.2}/CODE_OF_CONDUCT.md +0 -0
  15. {plexus_python-0.6.1 → plexus_python-0.6.2}/CONTRIBUTING.md +0 -0
  16. {plexus_python-0.6.1 → plexus_python-0.6.2}/LICENSE +0 -0
  17. {plexus_python-0.6.1 → plexus_python-0.6.2}/README.md +0 -0
  18. {plexus_python-0.6.1 → plexus_python-0.6.2}/SECURITY.md +0 -0
  19. {plexus_python-0.6.1 → plexus_python-0.6.2}/examples/.python-version +0 -0
  20. {plexus_python-0.6.1 → plexus_python-0.6.2}/examples/README.md +0 -0
  21. {plexus_python-0.6.1 → plexus_python-0.6.2}/examples/basic.py +0 -0
  22. {plexus_python-0.6.1 → plexus_python-0.6.2}/examples/can.py +0 -0
  23. {plexus_python-0.6.1 → plexus_python-0.6.2}/examples/i2c_bme280.py +0 -0
  24. {plexus_python-0.6.1 → plexus_python-0.6.2}/examples/mac_metrics.py +0 -0
  25. {plexus_python-0.6.1 → plexus_python-0.6.2}/examples/mavlink.py +0 -0
  26. {plexus_python-0.6.1 → plexus_python-0.6.2}/examples/mqtt.py +0 -0
  27. {plexus_python-0.6.1 → plexus_python-0.6.2}/examples/pyproject.toml +0 -0
  28. {plexus_python-0.6.1 → plexus_python-0.6.2}/examples/thermal_camera.py +0 -0
  29. {plexus_python-0.6.1 → plexus_python-0.6.2}/examples/uv.lock +0 -0
  30. {plexus_python-0.6.1 → plexus_python-0.6.2}/plexus/_log.py +0 -0
  31. {plexus_python-0.6.1 → plexus_python-0.6.2}/plexus/buffer.py +0 -0
  32. {plexus_python-0.6.1 → plexus_python-0.6.2}/plexus/cameras/__init__.py +0 -0
  33. {plexus_python-0.6.1 → plexus_python-0.6.2}/plexus/cameras/thermal.py +0 -0
  34. {plexus_python-0.6.1 → plexus_python-0.6.2}/plexus/cli.py +0 -0
  35. {plexus_python-0.6.1 → plexus_python-0.6.2}/plexus/config.py +0 -0
  36. {plexus_python-0.6.1 → plexus_python-0.6.2}/plexus/ws.py +0 -0
  37. {plexus_python-0.6.1 → plexus_python-0.6.2}/scripts/plexus.service +0 -0
  38. {plexus_python-0.6.1 → plexus_python-0.6.2}/scripts/release.sh +0 -0
  39. {plexus_python-0.6.1 → plexus_python-0.6.2}/scripts/scan_buses.py +0 -0
  40. {plexus_python-0.6.1 → plexus_python-0.6.2}/scripts/setup.sh +0 -0
  41. {plexus_python-0.6.1 → plexus_python-0.6.2}/skills/plexus/SKILL.md +0 -0
  42. {plexus_python-0.6.1 → plexus_python-0.6.2}/skills/plexus/references/api.md +0 -0
  43. {plexus_python-0.6.1 → plexus_python-0.6.2}/skills/plexus/references/sdk.md +0 -0
  44. {plexus_python-0.6.1 → plexus_python-0.6.2}/tests/test_basic.py +0 -0
  45. {plexus_python-0.6.1 → plexus_python-0.6.2}/tests/test_buffer.py +0 -0
  46. {plexus_python-0.6.1 → plexus_python-0.6.2}/tests/test_config.py +0 -0
  47. {plexus_python-0.6.1 → plexus_python-0.6.2}/tests/test_retry.py +0 -0
  48. {plexus_python-0.6.1 → plexus_python-0.6.2}/tests/test_thermal.py +0 -0
  49. {plexus_python-0.6.1 → plexus_python-0.6.2}/tests/test_video.py +0 -0
  50. {plexus_python-0.6.1 → plexus_python-0.6.2}/tests/test_ws.py +0 -0
  51. {plexus_python-0.6.1 → plexus_python-0.6.2}/uv.lock +0 -0
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.6.2] - 2026-05-28 - Dependency fix
4
+
5
+ ### Fixed
6
+
7
+ - Replaced `opencv-python` with `opencv-python-headless` in the `[video]` extra —
8
+ headless is the correct choice for embedded/server use and avoids pulling in Qt/GUI
9
+ dependencies that don't belong on Raspberry Pi or headless Linux.
10
+ - Merged the `[thermal]` extra into `[video]`. OpenCV is needed for all video frame
11
+ encoding, not just thermal cameras. Install with `pip install plexus-python[video]`.
12
+ - Synced `plexus.__version__` with `pyproject.toml` (both now `0.6.2`).
13
+
3
14
  ## [0.6.1] - 2026-05-28 - Thermal camera streaming
4
15
 
5
16
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plexus-python
3
- Version: 0.6.1
3
+ Version: 0.6.2
4
4
  Summary: Thin Python SDK for Plexus — send telemetry in one line
5
5
  Project-URL: Homepage, https://plexus.dev
6
6
  Project-URL: Documentation, https://docs.plexus.dev
@@ -24,15 +24,14 @@ Requires-Python: >=3.10
24
24
  Requires-Dist: websocket-client>=1.7
25
25
  Provides-Extra: dev
26
26
  Requires-Dist: numpy>=1.24; extra == 'dev'
27
- Requires-Dist: opencv-python>=4.8; extra == 'dev'
27
+ Requires-Dist: opencv-python-headless>=4.8; extra == 'dev'
28
28
  Requires-Dist: pytest-cov; extra == 'dev'
29
29
  Requires-Dist: pytest>=9.0.3; extra == 'dev'
30
30
  Requires-Dist: ruff; extra == 'dev'
31
31
  Requires-Dist: websockets>=12; extra == 'dev'
32
- Provides-Extra: thermal
33
- Requires-Dist: numpy>=1.24; extra == 'thermal'
34
- Requires-Dist: opencv-python>=4.8; extra == 'thermal'
35
32
  Provides-Extra: video
33
+ Requires-Dist: numpy>=1.24; extra == 'video'
34
+ Requires-Dist: opencv-python-headless>=4.8; extra == 'video'
36
35
  Requires-Dist: pillow>=12.2.0; extra == 'video'
37
36
  Description-Content-Type: text/markdown
38
37
 
@@ -10,5 +10,5 @@ Plexus — thin Python SDK for sending telemetry to the Plexus gateway.
10
10
  from plexus.client import Plexus, read_mjpeg_frames
11
11
  from plexus.ws import WebSocketTransport
12
12
 
13
- __version__ = "0.5.2"
13
+ __version__ = "0.6.2"
14
14
  __all__ = ["Plexus", "WebSocketTransport", "read_mjpeg_frames"]
@@ -483,8 +483,8 @@ class Plexus:
483
483
  except ImportError as e:
484
484
  if required:
485
485
  raise ImportError(
486
- "This frame type requires opencv-python. "
487
- "Install with: pip install opencv-python"
486
+ "This frame type requires opencv-python-headless. "
487
+ "Install with: pip install plexus-python[video]"
488
488
  ) from e
489
489
  return self._cv2
490
490
 
@@ -611,7 +611,7 @@ class Plexus:
611
611
 
612
612
  Raises:
613
613
  PlexusError: If transport is not 'ws'.
614
- ImportError: If opencv-python is not installed.
614
+ ImportError: If opencv-python-headless is not installed.
615
615
  """
616
616
  if self.transport != "ws":
617
617
  raise PlexusError("send_thermal_frame requires transport='ws'")
@@ -620,8 +620,8 @@ class Plexus:
620
620
  from plexus.cameras.thermal import build_thermal_frame
621
621
  except ImportError as e:
622
622
  raise ImportError(
623
- "send_thermal_frame requires opencv-python. "
624
- "Install with: pip install opencv-python"
623
+ "send_thermal_frame requires opencv-python-headless. "
624
+ "Install with: pip install plexus-python[video]"
625
625
  ) from e
626
626
 
627
627
  frame = build_thermal_frame(temps, timestamp_ms=self._normalize_ts_ms(timestamp))
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "plexus-python"
7
- version = "0.6.1"
7
+ version = "0.6.2"
8
8
  description = "Thin Python SDK for Plexus — send telemetry in one line"
9
9
  readme = "README.md"
10
10
  license = "Apache-2.0"
@@ -30,13 +30,12 @@ dependencies = [
30
30
  ]
31
31
 
32
32
  [project.optional-dependencies]
33
- video = ["Pillow>=12.2.0"]
34
- # Thermal cameras: colorization + Y16/USB capture. I2C sensors additionally
35
- # need a board-specific driver, installed separately on the device, e.g.
36
- # adafruit-circuitpython-mlx90640 (these require Raspberry Pi hardware libs
37
- # and don't install on other platforms, so they're not listed here).
38
- thermal = ["opencv-python>=4.8", "numpy>=1.24"]
39
- dev = ["pytest>=9.0.3", "pytest-cov", "ruff", "websockets>=12", "opencv-python>=4.8", "numpy>=1.24"]
33
+ # Video/camera support: frame encoding, thermal cameras, etc.
34
+ # I2C thermal sensors additionally need a board-specific driver installed
35
+ # separately on the device (e.g. adafruit-circuitpython-mlx90640 — requires
36
+ # Raspberry Pi hardware libs and doesn't install on other platforms).
37
+ video = ["Pillow>=12.2.0", "opencv-python-headless>=4.8", "numpy>=1.24"]
38
+ dev = ["pytest>=9.0.3", "pytest-cov", "ruff", "websockets>=12", "opencv-python-headless>=4.8", "numpy>=1.24"]
40
39
 
41
40
  [project.scripts]
42
41
  plexus = "plexus.cli:main"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes