The DTLS/CoAP transport code that made "ocf" an accurate name moved out to the smartthings-local package. What's left here (capability.py, entities.py, discovery.py, adapter.py, identity.py, capabilities/, by_type/, plus the /device/0 batch parser) is entirely the device capability registry, so name the package for what it does. Flattened the redundant ocf/registry/ nesting into a single top-level registry/ package and updated every import across the platform modules and test suite accordingly. Verified: full test suite (80/80) passes, and the Docker dev container reconnects to both live appliances and rediscovers their entities cleanly after the rename.
23 lines
1.1 KiB
Python
23 lines
1.1 KiB
Python
"""A Capability binds one OCF resource href to the entities it produces."""
|
|
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
from typing import Callable, Optional
|
|
|
|
from .entities import SamsungEntityDescription
|
|
|
|
|
|
@dataclass(frozen=True, kw_only=True)
|
|
class Capability:
|
|
href: Optional[str] = None
|
|
entities: tuple[SamsungEntityDescription, ...] = ()
|
|
poll_tier: str = 'cold' # 'hot' | 'warm' | 'cold'
|
|
rt_filter: Optional[str] = None # bind only if rt_filter in rep.get('rt', ())
|
|
href_prefix: Optional[str] = None # pattern caps only: bind only if href starts with this
|
|
strip_prefix_in_key: bool = False # strip href_prefix segs before building key_override
|
|
match_fn: Optional[Callable[[dict, dict], bool]] = None # match_fn(rep, resources) -> bool
|
|
# Rare optional hooks — only operational-state-style resources use these.
|
|
active_when: Optional[Callable[[dict], bool]] = None
|
|
on_observation: Optional[Callable[[dict, dict], None]] = None
|
|
project: Optional[Callable[[dict, dict], dict]] = None
|