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