Add isolated read-only official widget integration and searchable catalog

This commit is contained in:
Pigway
2026-10-02 16:20:54 +08:00
parent bfef1ad28d
commit 59fbdf7c1a
13 changed files with 1144 additions and 7 deletions
+10 -3
View File
@@ -4,8 +4,10 @@ from pigway_frame_flow.drivers.base import FrameDeviceDriver
from pigway_frame_flow.drivers.kokonna.client import KokonnaClient
from pigway_frame_flow.drivers.kokonna.driver import KokonnaDriver
from pigway_frame_flow.drivers.kokonna.mock import MockClient
from pigway_frame_flow.drivers.kokonna.widgets import WidgetReader
from pigway_frame_flow.errors import ErrorCode as E
from pigway_frame_flow.errors import FlowError
from pigway_frame_flow.settings import secret
class DeviceRegistry:
@@ -38,8 +40,6 @@ class DeviceRegistry:
root.mkdir(parents=True, exist_ok=True)
client = MockClient(root)
else:
from pigway_frame_flow.settings import secret
key = (
settings.api_key
if entry.get("api_key_env", "KOKONNA_API_KEY") == "KOKONNA_API_KEY"
@@ -48,7 +48,14 @@ class DeviceRegistry:
self.keys.append(key)
settings.additional_secrets.append(key)
client = KokonnaClient(key, settings.write_enabled)
self.drivers[id] = KokonnaDriver(client, id, settings.sanitize)
widget_token = secret(
str(entry.get("widget_token_env", "KOKONNA_WIDGET_TOKEN"))
)
settings.additional_secrets.append(widget_token)
widgets = WidgetReader(
widget_token, entry.get("widget_robot_id"), settings.mock
)
self.drivers[id] = KokonnaDriver(client, id, settings.sanitize, widgets)
def get(self, id: str) -> FrameDeviceDriver:
if id not in self.drivers: