Apply ruff format to code merged from PR #251/#275
PR #251 and PR #275 predate this repo's ruff-format adoption on those files; running the formatter (single->double quotes, line wrapping, trailing-comma cleanup) keeps the merged code consistent with the rest of the codebase. No behavior change.
This commit is contained in:
1 parent
68dee12eb4
commit
8ed3d1467f
10 files changed
+222
-136
No files matched your search
@@ -658,7 +658,8 @@ class LocalThingsCoordinator(DataUpdateCoordinator[dict[str, Any]]):
|
||||
# ------------------------------------------------------------------
|
||||
|
||||
def _subdevice_probe_priority(
|
||||
self, resources: dict[str, dict],
|
||||
self,
|
||||
resources: dict[str, dict],
|
||||
) -> tuple[str, ...]:
|
||||
"""Return live primary-entity hrefs in hot/warm-first order.
|
||||
|
||||
@@ -676,23 +677,17 @@ class LocalThingsCoordinator(DataUpdateCoordinator[dict[str, Any]]):
|
||||
if registry is None:
|
||||
return ()
|
||||
|
||||
tier_rank = {'hot': 0, 'warm': 1, 'cold': 2}
|
||||
tier_rank = {"hot": 0, "warm": 1, "cold": 2}
|
||||
ranked = []
|
||||
for order, href in enumerate(resources):
|
||||
primary_caps = [
|
||||
capability
|
||||
for capability in registry.capabilities.get(href, ())
|
||||
if any(
|
||||
desc.entity_category is None
|
||||
for desc in capability.entities
|
||||
)
|
||||
if any(desc.entity_category is None for desc in capability.entities)
|
||||
]
|
||||
if not primary_caps:
|
||||
continue
|
||||
rank = min(
|
||||
tier_rank.get(capability.poll_tier, 2)
|
||||
for capability in primary_caps
|
||||
)
|
||||
rank = min(tier_rank.get(capability.poll_tier, 2) for capability in primary_caps)
|
||||
ranked.append((rank, order, href))
|
||||
return tuple(href for _, _, href in sorted(ranked))
|
||||
|
||||
|
||||
@@ -20,9 +20,9 @@ Door-LED keys use NO `x.com.samsung.da.` prefix -- `setBrightness` /
|
||||
`setNightLight` -- preserved exactly as they appear in the OCF resource rep.
|
||||
"""
|
||||
|
||||
import string
|
||||
from datetime import UTC, datetime
|
||||
from datetime import time as dt_time
|
||||
import string
|
||||
|
||||
from ...catalog import has_entity_translation
|
||||
from ..capability import Capability
|
||||
@@ -324,7 +324,7 @@ def cycle_write(p, rep, href=None):
|
||||
}
|
||||
|
||||
|
||||
def personal_course_labels(resources, href='/wm/personalcourse/vs/0'):
|
||||
def personal_course_labels(resources, href="/wm/personalcourse/vs/0"):
|
||||
"""Return device-provided personal course names keyed by course code.
|
||||
|
||||
Populated entries use a small TLV payload. The leading field is
|
||||
@@ -335,10 +335,10 @@ def personal_course_labels(resources, href='/wm/personalcourse/vs/0'):
|
||||
"""
|
||||
rep = resources.get(href) or {}
|
||||
labels = {}
|
||||
for entry in rep.get('x.com.samsung.da.courses') or []:
|
||||
if not isinstance(entry, str) or '_' not in entry:
|
||||
for entry in rep.get("x.com.samsung.da.courses") or []:
|
||||
if not isinstance(entry, str) or "_" not in entry:
|
||||
continue
|
||||
code, encoded = entry.split('_', 1)
|
||||
code, encoded = entry.split("_", 1)
|
||||
try:
|
||||
payload = bytes.fromhex(encoded)
|
||||
except ValueError:
|
||||
@@ -349,7 +349,7 @@ def personal_course_labels(resources, href='/wm/personalcourse/vs/0'):
|
||||
if name_length == 0 or len(payload) < 2 + name_length:
|
||||
continue
|
||||
try:
|
||||
name = payload[2:2 + name_length].decode('utf-8')
|
||||
name = payload[2 : 2 + name_length].decode("utf-8")
|
||||
except UnicodeDecodeError:
|
||||
continue
|
||||
if name.strip() and name.isprintable():
|
||||
@@ -364,7 +364,7 @@ def washer_cycle_fallback(value, resources):
|
||||
if label := personal_course_labels(resources).get(value.upper()):
|
||||
return label
|
||||
if len(value) == 2 and all(char in string.hexdigits for char in value):
|
||||
return f'Unknown (0x{value.upper()})'
|
||||
return f"Unknown (0x{value.upper()})"
|
||||
return None
|
||||
|
||||
|
||||
|
||||
@@ -236,7 +236,9 @@ def _get_raw(sess, path_segs: tuple[str, ...], timeout: float = 10.0):
|
||||
|
||||
|
||||
def _get_batch(
|
||||
sess, path_segs: tuple[str, ...], timeout: float = 10.0,
|
||||
sess,
|
||||
path_segs: tuple[str, ...],
|
||||
timeout: float = 10.0,
|
||||
) -> dict[str, dict]:
|
||||
"""GET a Samsung Collection resource and parse it the same way
|
||||
/device/0 itself is parsed (parse_device0_batch): a [devcol-rep,
|
||||
@@ -246,7 +248,9 @@ def _get_batch(
|
||||
|
||||
|
||||
def _get_property(
|
||||
sess, path_segs: tuple[str, ...], timeout: float = 10.0,
|
||||
sess,
|
||||
path_segs: tuple[str, ...],
|
||||
timeout: float = 10.0,
|
||||
) -> dict:
|
||||
"""GET a plain OCF Property-map resource (a bare dict, not a Collection
|
||||
batch). Used for `/multidevice/vs/0` (issue #177 follow-up): listed in
|
||||
@@ -301,10 +305,7 @@ def enumerate_subdevices(
|
||||
# casing, and probing it twice would materialize the same physical
|
||||
# subdevice as two Subdevice candidates.
|
||||
probed_ids: set[str] = set()
|
||||
deadline = (
|
||||
time.monotonic() + max(0.0, time_budget)
|
||||
if time_budget is not None else None
|
||||
)
|
||||
deadline = time.monotonic() + max(0.0, time_budget) if time_budget is not None else None
|
||||
budget_exhausted = False
|
||||
|
||||
def _next_timeout(maximum: float) -> float | None:
|
||||
|
||||
@@ -99,8 +99,7 @@ class LocalThingsSelect(LocalThingsEntity, SelectEntity):
|
||||
"""Normalize both current state and options through one path."""
|
||||
display_fn = self._bound.desc.display_fn
|
||||
fallback_fn = (
|
||||
(lambda raw: display_fn(raw, self._resources))
|
||||
if display_fn is not None else None
|
||||
(lambda raw: display_fn(raw, self._resources)) if display_fn is not None else None
|
||||
)
|
||||
return _display(value, self.translation_key, fallback_fn)
|
||||
|
||||
|
||||
Reference in new issue
Block a user