lifx-async 4.7.0__py3-none-any.whl → 4.7.2__py3-none-any.whl

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.
lifx/api.py CHANGED
@@ -126,8 +126,9 @@ class DeviceGroup:
126
126
  exc_val: BaseException | None,
127
127
  exc_tb: TracebackType | None,
128
128
  ) -> None:
129
- """Exit async context manager."""
130
- pass
129
+ """Exit async context manager and close all device connections."""
130
+ for device in self._devices:
131
+ await device.connection.close()
131
132
 
132
133
  def __iter__(
133
134
  self,
lifx/devices/ceiling.py CHANGED
@@ -23,16 +23,13 @@ import logging
23
23
  import time
24
24
  from dataclasses import asdict, dataclass
25
25
  from pathlib import Path
26
- from typing import TYPE_CHECKING, Any, cast
26
+ from typing import Any, cast
27
27
 
28
28
  from lifx.color import HSBK
29
29
  from lifx.devices.matrix import MatrixLight, MatrixLightState
30
30
  from lifx.exceptions import LifxError
31
31
  from lifx.products import get_ceiling_layout, is_ceiling_product
32
32
 
33
- if TYPE_CHECKING:
34
- pass
35
-
36
33
  _LOGGER = logging.getLogger(__name__)
37
34
 
38
35
 
lifx/devices/matrix.py CHANGED
@@ -699,6 +699,7 @@ class MatrixLight(Light):
699
699
  source_fb: int = 1,
700
700
  target_fb: int = 0,
701
701
  duration: float = 0.0,
702
+ length: int = 1,
702
703
  ) -> None:
703
704
  """Copy frame buffer (for tiles with >64 zones).
704
705
 
@@ -710,6 +711,7 @@ class MatrixLight(Light):
710
711
  source_fb: Source frame buffer index (usually 1)
711
712
  target_fb: Target frame buffer index (usually 0)
712
713
  duration: time in seconds to transition if target_fb is 0
714
+ length: Number of tiles to update starting from tile_index (default 1)
713
715
 
714
716
  Example:
715
717
  >>> # For 16x8 tile (128 zones):
@@ -739,12 +741,18 @@ class MatrixLight(Light):
739
741
  >>> await matrix.copy_frame_buffer(
740
742
  ... tile_index=0, source_fb=1, target_fb=0, duration=2.0
741
743
  ... )
744
+
745
+ >>> # For a chain of 5 tiles, update all simultaneously:
746
+ >>> await matrix.copy_frame_buffer(
747
+ ... tile_index=0, source_fb=1, target_fb=0, length=5
748
+ ... )
742
749
  """
743
750
  _LOGGER.debug(
744
- "Copying frame buffer %d -> %d for tile %d on %s",
751
+ "Copying frame buffer %d -> %d for tile %d (length=%d) on %s",
745
752
  source_fb,
746
753
  target_fb,
747
754
  tile_index,
755
+ length,
748
756
  self.label or self.serial,
749
757
  )
750
758
 
@@ -761,7 +769,7 @@ class MatrixLight(Light):
761
769
  await self.connection.send_packet(
762
770
  packets.Tile.CopyFrameBuffer(
763
771
  tile_index=tile_index,
764
- length=1,
772
+ length=length,
765
773
  src_fb_index=source_fb,
766
774
  dst_fb_index=target_fb,
767
775
  src_x=0,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lifx-async
3
- Version: 4.7.0
3
+ Version: 4.7.2
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>
@@ -1,16 +1,16 @@
1
1
  lifx/__init__.py,sha256=aiMLKLhmcXADJyeISNHIZ_Nuc6jEhPG8-I_R3peWpwo,2610
2
- lifx/api.py,sha256=PFS2b28ow40kCQvT_MKvBLZD6fKCbvsoOQFtiODDrPE,33861
2
+ lifx/api.py,sha256=XV2CJLi3N9UpbZuqVE56K-MEsSaqOte9WhcBbhkmHQM,33962
3
3
  lifx/color.py,sha256=wcmeeiBmOAjunInERNd6rslKvBEpV4vfjwwiZ8v7H8A,17877
4
4
  lifx/const.py,sha256=cf_O_3TqJjIBXF1tI35PkJ1JOhmy4tRt14PSa63pilA,3471
5
5
  lifx/exceptions.py,sha256=pikAMppLn7gXyjiQVWM_tSvXKNh-g366nG_UWyqpHhc,815
6
6
  lifx/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
7
  lifx/devices/__init__.py,sha256=4b5QtO0EFWxIqN2lUYgM8uLjWyHI5hUcReiF9QCjCGw,1061
8
8
  lifx/devices/base.py,sha256=0G2PCJRNeIPkMCIw68x0ijn6gUIwh2jFlex8SN4Hs1Y,63530
9
- lifx/devices/ceiling.py,sha256=qXZeTGAnPbKpnMyEOI2DsffC9HddmWzsW_Q_Fnkpwkw,33087
9
+ lifx/devices/ceiling.py,sha256=3tHk-SklJNtSYJhnzqxqQKhdDEq9VWzK2mYEjf2P-Xc,33044
10
10
  lifx/devices/hev.py,sha256=T5hvt2q_vdgPBvThx_-M7n5pZu9pL0y9Fs3Zz_KL0NM,15588
11
11
  lifx/devices/infrared.py,sha256=ePk9qxX_s-hv5gQMvio1Vv8FYiCd68HF0ySbWgSrvuU,8130
12
12
  lifx/devices/light.py,sha256=gk92lhViUWINGaxDWbs4qn8Stnn2fGCfRkC5Kk0Q-hI,34087
13
- lifx/devices/matrix.py,sha256=AVNM2071NFtPg3Eq7kZ3asRGus36He02iDDvIa8RaQ0,41951
13
+ lifx/devices/matrix.py,sha256=TcfVvqFCIhGXjOtaQEARQCXe9XqSFDZ4wEQdRZBiQpA,42301
14
14
  lifx/devices/multizone.py,sha256=zQj0qKxWccHAmkIpqIcGzZsKjCQL-_bAquz78o0Izng,33570
15
15
  lifx/effects/__init__.py,sha256=4DF31yp7RJic5JoltMlz5dCtF5KQobU6NOUtLUKkVKE,1509
16
16
  lifx/effects/base.py,sha256=YO0Hbg2VYHKPtfYnWxmrtzYoPGOi9BUXhn8HVFKv5IM,10283
@@ -42,7 +42,7 @@ lifx/theme/canvas.py,sha256=4h7lgN8iu_OdchObGDgbxTqQLCb-FRKC-M-YCWef_i4,8048
42
42
  lifx/theme/generators.py,sha256=nq3Yvntq_h-eFHbmmow3LcAdA_hEbRRaP5mv9Bydrjk,6435
43
43
  lifx/theme/library.py,sha256=tKlKZNqJp8lRGDnilWyDm_Qr1vCRGGwuvWVS82anNpQ,21326
44
44
  lifx/theme/theme.py,sha256=qMEx_8E41C0Cc6f083XHiAXEglTv4YlXW0UFsG1rQKg,5521
45
- lifx_async-4.7.0.dist-info/METADATA,sha256=msfJopOW0E5xcAV6WciD_JgaZy7PRmxza_e9KOnUNUE,2609
46
- lifx_async-4.7.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
47
- lifx_async-4.7.0.dist-info/licenses/LICENSE,sha256=eBz48GRA3gSiWn3rYZAz2Ewp35snnhV9cSqkVBq7g3k,1832
48
- lifx_async-4.7.0.dist-info/RECORD,,
45
+ lifx_async-4.7.2.dist-info/METADATA,sha256=wb8Qr4I_4s40AlDRnG7589cnjZ4wE8SA9orSCizjoyA,2609
46
+ lifx_async-4.7.2.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
47
+ lifx_async-4.7.2.dist-info/licenses/LICENSE,sha256=eBz48GRA3gSiWn3rYZAz2Ewp35snnhV9cSqkVBq7g3k,1832
48
+ lifx_async-4.7.2.dist-info/RECORD,,