Fixed OTA_NotifReport by matching on entire ActionEnum and not just one action string. Now OTA_NotifReport:GuestRequests is distinct even if its corresponding capability action is technically identical OTA_Read:GuestRequests

This commit is contained in:
Jonas Linter
2025-10-02 13:43:15 +02:00
parent 9c292a9897
commit 233a682e35

View File

@@ -196,7 +196,7 @@ class ServerCapabilities:
"""
def __init__(self):
self.action_registry: Dict[str, Type[AlpineBitsAction]] = {}
self.action_registry: Dict[AlpineBitsActionName, Type[AlpineBitsAction]] = {}
self._discover_actions()
self.capability_dict = None
@@ -214,8 +214,8 @@ class ServerCapabilities:
if self._is_action_implemented(obj):
action_instance = obj()
if hasattr(action_instance, "name"):
# Use capability name for the registry key
self.action_registry[action_instance.name.capability_name] = obj
# Use capability attribute as registry key
self.action_registry[action_instance.name] = obj
def _is_action_implemented(self, action_class: Type[AlpineBitsAction]) -> bool:
"""
@@ -234,7 +234,7 @@ class ServerCapabilities:
"""
versions_dict = {}
for action_name, action_class in self.action_registry.items():
for action_enum, action_class in self.action_registry.items():
action_instance = action_class()
# Get supported versions for this action
@@ -250,7 +250,7 @@ class ServerCapabilities:
if version_str not in versions_dict:
versions_dict[version_str] = {"version": version_str, "actions": []}
action_dict = {"action": action_name}
action_dict = {"action": action_enum.capability_name}
# Add supports field if the action has custom supports
if hasattr(action_instance, "supports") and action_instance.supports:
@@ -714,14 +714,14 @@ class AlpineBitsServer:
)
# Check if we have an implementation for this action
capability_name = action_enum.capability_name
if capability_name not in self._action_instances:
if action_enum not in self._action_instances:
return AlpineBitsResponse(
f"Error: Action {request_action_name} is not implemented",
HttpStatusCode.BAD_REQUEST,
)
action_instance: AlpineBitsAction = self._action_instances[capability_name]
action_instance: AlpineBitsAction = self._action_instances[action_enum]
# Check if the action supports the requested version
if not await action_instance.check_version_supported(version_enum):
@@ -733,7 +733,7 @@ class AlpineBitsServer:
# Handle the request
try:
# Special case for ping action - pass server capabilities
if capability_name == "action_OTA_Ping":
if action_enum == AlpineBitsActionName.OTA_PING:
return await action_instance.handle(
action=request_action_name, request_xml=request_xml, version=version_enum, server_capabilities=self.capabilities, client_info=client_info
)