lifx-async 4.3.4__tar.gz → 4.3.5__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 (144) hide show
  1. {lifx_async-4.3.4 → lifx_async-4.3.5}/PKG-INFO +1 -1
  2. {lifx_async-4.3.4 → lifx_async-4.3.5}/docs/changelog.md +8 -0
  3. {lifx_async-4.3.4 → lifx_async-4.3.5}/pyproject.toml +1 -1
  4. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/devices/matrix.py +26 -19
  5. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_devices/test_matrix.py +21 -7
  6. {lifx_async-4.3.4 → lifx_async-4.3.5}/uv.lock +1 -1
  7. {lifx_async-4.3.4 → lifx_async-4.3.5}/.claude/settings.json +0 -0
  8. {lifx_async-4.3.4 → lifx_async-4.3.5}/.github/dependabot.yml +0 -0
  9. {lifx_async-4.3.4 → lifx_async-4.3.5}/.github/labeler.yml +0 -0
  10. {lifx_async-4.3.4 → lifx_async-4.3.5}/.github/workflows/ci.yml +0 -0
  11. {lifx_async-4.3.4 → lifx_async-4.3.5}/.github/workflows/docs.yml +0 -0
  12. {lifx_async-4.3.4 → lifx_async-4.3.5}/.github/workflows/pr-automation.yml +0 -0
  13. {lifx_async-4.3.4 → lifx_async-4.3.5}/.gitignore +0 -0
  14. {lifx_async-4.3.4 → lifx_async-4.3.5}/.pre-commit-config.yaml +0 -0
  15. {lifx_async-4.3.4 → lifx_async-4.3.5}/CLAUDE.md +0 -0
  16. {lifx_async-4.3.4 → lifx_async-4.3.5}/LICENSE +0 -0
  17. {lifx_async-4.3.4 → lifx_async-4.3.5}/README.md +0 -0
  18. {lifx_async-4.3.4 → lifx_async-4.3.5}/docs/api/colors.md +0 -0
  19. {lifx_async-4.3.4 → lifx_async-4.3.5}/docs/api/devices.md +0 -0
  20. {lifx_async-4.3.4 → lifx_async-4.3.5}/docs/api/effects.md +0 -0
  21. {lifx_async-4.3.4 → lifx_async-4.3.5}/docs/api/exceptions.md +0 -0
  22. {lifx_async-4.3.4 → lifx_async-4.3.5}/docs/api/high-level.md +0 -0
  23. {lifx_async-4.3.4 → lifx_async-4.3.5}/docs/api/index.md +0 -0
  24. {lifx_async-4.3.4 → lifx_async-4.3.5}/docs/api/network.md +0 -0
  25. {lifx_async-4.3.4 → lifx_async-4.3.5}/docs/api/protocol.md +0 -0
  26. {lifx_async-4.3.4 → lifx_async-4.3.5}/docs/api/themes.md +0 -0
  27. {lifx_async-4.3.4 → lifx_async-4.3.5}/docs/architecture/effects-architecture.md +0 -0
  28. {lifx_async-4.3.4 → lifx_async-4.3.5}/docs/architecture/overview.md +0 -0
  29. {lifx_async-4.3.4 → lifx_async-4.3.5}/docs/faq.md +0 -0
  30. {lifx_async-4.3.4 → lifx_async-4.3.5}/docs/getting-started/effects.md +0 -0
  31. {lifx_async-4.3.4 → lifx_async-4.3.5}/docs/getting-started/installation.md +0 -0
  32. {lifx_async-4.3.4 → lifx_async-4.3.5}/docs/getting-started/quickstart.md +0 -0
  33. {lifx_async-4.3.4 → lifx_async-4.3.5}/docs/getting-started/themes.md +0 -0
  34. {lifx_async-4.3.4 → lifx_async-4.3.5}/docs/index.md +0 -0
  35. {lifx_async-4.3.4 → lifx_async-4.3.5}/docs/migration/effect-api-changes.md +0 -0
  36. {lifx_async-4.3.4 → lifx_async-4.3.5}/docs/stylesheets/extra.css +0 -0
  37. {lifx_async-4.3.4 → lifx_async-4.3.5}/docs/user-guide/advanced-usage.md +0 -0
  38. {lifx_async-4.3.4 → lifx_async-4.3.5}/docs/user-guide/effects-custom.md +0 -0
  39. {lifx_async-4.3.4 → lifx_async-4.3.5}/docs/user-guide/effects-troubleshooting.md +0 -0
  40. {lifx_async-4.3.4 → lifx_async-4.3.5}/docs/user-guide/protocol-deep-dive.md +0 -0
  41. {lifx_async-4.3.4 → lifx_async-4.3.5}/docs/user-guide/themes.md +0 -0
  42. {lifx_async-4.3.4 → lifx_async-4.3.5}/docs/user-guide/troubleshooting.md +0 -0
  43. {lifx_async-4.3.4 → lifx_async-4.3.5}/examples/01_simple_discovery.py +0 -0
  44. {lifx_async-4.3.4 → lifx_async-4.3.5}/examples/02_simple_control.py +0 -0
  45. {lifx_async-4.3.4 → lifx_async-4.3.5}/examples/03_waveforms.py +0 -0
  46. {lifx_async-4.3.4 → lifx_async-4.3.5}/examples/04_logging.py +0 -0
  47. {lifx_async-4.3.4 → lifx_async-4.3.5}/examples/06_pulse_effect.py +0 -0
  48. {lifx_async-4.3.4 → lifx_async-4.3.5}/examples/07_colorloop_effect.py +0 -0
  49. {lifx_async-4.3.4 → lifx_async-4.3.5}/examples/08_custom_effect.py +0 -0
  50. {lifx_async-4.3.4 → lifx_async-4.3.5}/examples/09_background_effect.py +0 -0
  51. {lifx_async-4.3.4 → lifx_async-4.3.5}/examples/10_find_specific_devices.py +0 -0
  52. {lifx_async-4.3.4 → lifx_async-4.3.5}/examples/11_matrix_basic.py +0 -0
  53. {lifx_async-4.3.4 → lifx_async-4.3.5}/examples/12_matrix_effects.py +0 -0
  54. {lifx_async-4.3.4 → lifx_async-4.3.5}/examples/13_matrix_large.py +0 -0
  55. {lifx_async-4.3.4 → lifx_async-4.3.5}/mkdocs.yml +0 -0
  56. {lifx_async-4.3.4 → lifx_async-4.3.5}/renovate.json +0 -0
  57. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/__init__.py +0 -0
  58. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/api.py +0 -0
  59. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/color.py +0 -0
  60. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/const.py +0 -0
  61. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/devices/__init__.py +0 -0
  62. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/devices/base.py +0 -0
  63. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/devices/hev.py +0 -0
  64. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/devices/infrared.py +0 -0
  65. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/devices/light.py +0 -0
  66. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/devices/multizone.py +0 -0
  67. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/effects/__init__.py +0 -0
  68. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/effects/base.py +0 -0
  69. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/effects/colorloop.py +0 -0
  70. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/effects/conductor.py +0 -0
  71. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/effects/const.py +0 -0
  72. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/effects/models.py +0 -0
  73. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/effects/pulse.py +0 -0
  74. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/effects/state_manager.py +0 -0
  75. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/exceptions.py +0 -0
  76. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/network/__init__.py +0 -0
  77. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/network/connection.py +0 -0
  78. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/network/discovery.py +0 -0
  79. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/network/message.py +0 -0
  80. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/network/transport.py +0 -0
  81. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/products/__init__.py +0 -0
  82. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/products/generator.py +0 -0
  83. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/products/registry.py +0 -0
  84. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/protocol/__init__.py +0 -0
  85. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/protocol/base.py +0 -0
  86. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/protocol/generator.py +0 -0
  87. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/protocol/header.py +0 -0
  88. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/protocol/models.py +0 -0
  89. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/protocol/packets.py +0 -0
  90. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/protocol/protocol_types.py +0 -0
  91. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/protocol/serializer.py +0 -0
  92. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/py.typed +0 -0
  93. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/theme/__init__.py +0 -0
  94. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/theme/canvas.py +0 -0
  95. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/theme/generators.py +0 -0
  96. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/theme/library.py +0 -0
  97. {lifx_async-4.3.4 → lifx_async-4.3.5}/src/lifx/theme/theme.py +0 -0
  98. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/__init__.py +0 -0
  99. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/conftest.py +0 -0
  100. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_api/__init__.py +0 -0
  101. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_api/test_api_apply_theme.py +0 -0
  102. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_api/test_api_batch_errors.py +0 -0
  103. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_api/test_api_batch_operations.py +0 -0
  104. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_api/test_api_discovery.py +0 -0
  105. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_api/test_api_organization.py +0 -0
  106. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_color.py +0 -0
  107. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_devices/__init__.py +0 -0
  108. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_devices/conftest.py +0 -0
  109. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_devices/test_base.py +0 -0
  110. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_devices/test_hev.py +0 -0
  111. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_devices/test_infrared.py +0 -0
  112. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_devices/test_light.py +0 -0
  113. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_devices/test_mac_address.py +0 -0
  114. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_devices/test_multizone.py +0 -0
  115. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_effects/__init__.py +0 -0
  116. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_effects/test_base.py +0 -0
  117. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_effects/test_capability_filtering.py +0 -0
  118. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_effects/test_colorloop.py +0 -0
  119. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_effects/test_integration.py +0 -0
  120. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_effects/test_models.py +0 -0
  121. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_effects/test_pulse.py +0 -0
  122. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_effects/test_state_manager.py +0 -0
  123. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_network/__init__.py +0 -0
  124. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_network/test_concurrent_requests.py +0 -0
  125. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_network/test_connection.py +0 -0
  126. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_network/test_discovery_devices.py +0 -0
  127. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_network/test_discovery_errors.py +0 -0
  128. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_network/test_message.py +0 -0
  129. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_network/test_message_advanced.py +0 -0
  130. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_network/test_transport.py +0 -0
  131. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_products/test_product_generator.py +0 -0
  132. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_products/test_registry.py +0 -0
  133. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_protocol/test_generated.py +0 -0
  134. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_protocol/test_header.py +0 -0
  135. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_protocol/test_protocol_generator.py +0 -0
  136. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_protocol/test_serializer.py +0 -0
  137. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_theme/__init__.py +0 -0
  138. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_theme/conftest.py +0 -0
  139. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_theme/test_apply_theme.py +0 -0
  140. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_theme/test_canvas.py +0 -0
  141. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_theme/test_generators.py +0 -0
  142. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_theme/test_library.py +0 -0
  143. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_theme/test_theme.py +0 -0
  144. {lifx_async-4.3.4 → lifx_async-4.3.5}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lifx-async
3
- Version: 4.3.4
3
+ Version: 4.3.5
4
4
  Summary: A modern, type-safe, async Python library for controlling LIFX lights
5
5
  Author-email: Avi Miller <me@dje.li>
6
6
  Maintainer-email: Avi Miller <me@dje.li>
@@ -2,6 +2,14 @@
2
2
 
3
3
  <!-- version list -->
4
4
 
5
+ ## v4.3.5 (2025-11-22)
6
+
7
+ ### Bug Fixes
8
+
9
+ - **devices**: Allow MatrixEffect without palette
10
+ ([`fb31df5`](https://github.com/Djelibeybi/lifx-async/commit/fb31df51b1af9d8c7c2f573ec9619566b4f7393b))
11
+
12
+
5
13
  ## v4.3.4 (2025-11-22)
6
14
 
7
15
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "lifx-async"
3
- version = "4.3.4"
3
+ version = "4.3.5"
4
4
  description = "A modern, type-safe, async Python library for controlling LIFX lights"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -171,11 +171,6 @@ class MatrixEffect:
171
171
 
172
172
  def __post_init__(self) -> None:
173
173
  """Initialize defaults and validate fields."""
174
- # Initialize default palette if not provided
175
- if self.palette is None:
176
- # Default palette: single white color
177
- self.palette = [HSBK(0, 0, 1.0, 3500)]
178
-
179
174
  # Validate all fields
180
175
  # Speed can be 0 only when effect is OFF
181
176
  if self.effect_type != FirmwareEffect.OFF:
@@ -184,7 +179,11 @@ class MatrixEffect:
184
179
  raise ValueError(f"Effect speed must be non-negative, got {self.speed}")
185
180
 
186
181
  self._validate_duration(self.duration)
187
- self._validate_palette(self.palette)
182
+
183
+ # Only validate palette if provided
184
+ if self.palette is not None:
185
+ self._validate_palette(self.palette)
186
+
188
187
  self._validate_saturation(self.cloud_saturation_min, "cloud_saturation_min")
189
188
  self._validate_saturation(self.cloud_saturation_max, "cloud_saturation_max")
190
189
 
@@ -762,7 +761,7 @@ class MatrixLight(Light):
762
761
  effect_type: Type of effect (OFF, MORPH, FLAME, SKY)
763
762
  speed: Effect speed in seconds (default: 3)
764
763
  duration: Total effect duration in nanoseconds (0 for infinite)
765
- palette: Color palette for the effect (max 16 colors)
764
+ palette: Color palette for the effect (max 16 colors, None for no palette)
766
765
  sky_type: Sky effect type (SUNRISE, SUNSET, CLOUDS)
767
766
  cloud_saturation_min: Minimum cloud saturation (0-255, for CLOUDS)
768
767
  cloud_saturation_max: Maximum cloud saturation (0-255, for CLOUDS)
@@ -780,6 +779,12 @@ class MatrixLight(Light):
780
779
  ... speed=5.0,
781
780
  ... palette=rainbow,
782
781
  ... )
782
+
783
+ >>> # Set effect without a palette
784
+ >>> await matrix.set_effect(
785
+ ... effect_type=FirmwareEffect.FLAME,
786
+ ... speed=3.0,
787
+ ... )
783
788
  """
784
789
  _LOGGER.debug(
785
790
  "Setting matrix effect %s (speed=%d) for %s",
@@ -801,20 +806,22 @@ class MatrixLight(Light):
801
806
  )
802
807
 
803
808
  # Convert to protocol format
804
- # Note: palette is guaranteed to be non-None by MatrixEffect.__post_init__
805
- palette = effect.palette if effect.palette is not None else []
806
809
  proto_palette = []
807
- for color in palette:
808
- proto_palette.append(
809
- LightHsbk(
810
- hue=int(color.hue / 360 * 65535),
811
- saturation=int(color.saturation * 65535),
812
- brightness=int(color.brightness * 65535),
813
- kelvin=color.kelvin,
810
+ palette_count = 0
811
+
812
+ if effect.palette is not None:
813
+ palette_count = len(effect.palette)
814
+ for color in effect.palette:
815
+ proto_palette.append(
816
+ LightHsbk(
817
+ hue=int(color.hue / 360 * 65535),
818
+ saturation=int(color.saturation * 65535),
819
+ brightness=int(color.brightness * 65535),
820
+ kelvin=color.kelvin,
821
+ )
814
822
  )
815
- )
816
823
 
817
- # Pad palette to 16 colors
824
+ # Pad palette to 16 colors (protocol requirement)
818
825
  while len(proto_palette) < 16:
819
826
  proto_palette.append(LightHsbk(0, 0, 0, 3500))
820
827
 
@@ -828,7 +835,7 @@ class MatrixLight(Light):
828
835
  cloud_saturation_min=effect.cloud_saturation_min,
829
836
  cloud_saturation_max=effect.cloud_saturation_max,
830
837
  ),
831
- palette_count=len(palette),
838
+ palette_count=palette_count,
832
839
  palette=proto_palette,
833
840
  )
834
841
 
@@ -177,8 +177,9 @@ class TestMatrixLight:
177
177
  assert isinstance(effect.effect_type, FirmwareEffect)
178
178
  assert effect.speed >= 0
179
179
  assert effect.duration >= 0
180
- assert effect.palette is not None
181
- assert len(effect.palette) > 0
180
+ # Palette can be None if palette_count is 0
181
+ if effect.palette is not None:
182
+ assert len(effect.palette) > 0
182
183
 
183
184
  async def test_tile_effect_cached_property(self, emulator_devices) -> None:
184
185
  """Test tile_effect property caching."""
@@ -321,6 +322,21 @@ class TestMatrixLight:
321
322
  effect = await matrix.get_effect()
322
323
  assert effect.effect_type == FirmwareEffect.OFF
323
324
 
325
+ async def test_set_effect_without_palette(self, emulator_devices) -> None:
326
+ """Test setting effect without a palette (palette_count=0)."""
327
+ matrix = emulator_devices[6]
328
+ async with matrix:
329
+ # Set effect without palette - should send palette_count=0
330
+ await matrix.set_effect(
331
+ effect_type=FirmwareEffect.MORPH,
332
+ speed=3000,
333
+ )
334
+
335
+ # Verify effect was set
336
+ effect = await matrix.get_effect()
337
+ assert effect.effect_type == FirmwareEffect.MORPH
338
+ assert effect.palette is None
339
+
324
340
  async def test_get64_large_tile(self, ceiling_device) -> None:
325
341
  """Test getting colors from 16x8 tile (128 zones) with default parameters.
326
342
 
@@ -553,15 +569,13 @@ class TestMatrixEffect:
553
569
  assert effect.palette is not None
554
570
  assert len(effect.palette) == 1
555
571
 
556
- def test_effect_default_palette(self) -> None:
557
- """Test that default palette is created if not provided."""
572
+ def test_effect_none_palette(self) -> None:
573
+ """Test that palette can be None (no palette specified)."""
558
574
  effect = MatrixEffect(
559
575
  effect_type=FirmwareEffect.MORPH,
560
576
  speed=3000,
561
577
  )
562
- assert effect.palette is not None
563
- assert len(effect.palette) == 1
564
- assert isinstance(effect.palette[0], HSBK)
578
+ assert effect.palette is None
565
579
 
566
580
  def test_effect_validation_negative_speed(self) -> None:
567
581
  """Test that negative speed raises error."""
@@ -432,7 +432,7 @@ wheels = [
432
432
 
433
433
  [[package]]
434
434
  name = "lifx-async"
435
- version = "4.3.4"
435
+ version = "4.3.5"
436
436
  source = { editable = "." }
437
437
 
438
438
  [package.dev-dependencies]
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