Push requests should be mostly done

This commit is contained in:
Jonas Linter
2025-10-06 11:47:28 +02:00
parent 87668e6dc0
commit 17c3fc57b2
4 changed files with 120 additions and 26 deletions

View File

@@ -18,7 +18,7 @@ from xml.etree import ElementTree as ET
from dataclasses import dataclass
from enum import Enum, IntEnum
from alpine_bits_python.alpine_bits_helpers import PhoneTechType, create_res_retrieve_response
from alpine_bits_python.alpine_bits_helpers import PhoneTechType, create_res_notif_push_message, create_res_retrieve_response
from .generated.alpinebits import OtaNotifReportRq, OtaNotifReportRs, OtaPingRq, OtaPingRs, WarningStatus, OtaReadRq
@@ -658,7 +658,7 @@ class PushAction(AlpineBitsAction):
async def handle(
self,
action: str,
request_xml: str,
request_xml: Tuple[Reservation, Customer],
version: Version,
client_info: AlpineBitsClientInfo,
dbsession=None,
@@ -666,7 +666,18 @@ class PushAction(AlpineBitsAction):
) -> AlpineBitsResponse:
"""Create push request XML."""
pass
xml_push_request = create_res_notif_push_message(request_xml)
config = SerializerConfig(
pretty_print=True, xml_declaration=True, encoding="UTF-8"
)
serializer = XmlSerializer(config=config)
xml_push_request = serializer.render(
xml_push_request, ns_map={None: "http://www.opentravel.org/OTA/2003/05"}
)
return AlpineBitsResponse(xml_push_request, HttpStatusCode.OK)
@@ -703,7 +714,7 @@ class AlpineBitsServer:
async def handle_request(
self,
request_action_name: str,
request_xml: str,
request_xml: str | Tuple[Reservation, Customer],
client_info: AlpineBitsClientInfo,
version: str = "2024-10",
dbsession=None,
@@ -713,7 +724,7 @@ class AlpineBitsServer:
Args:
request_action_name: The action name from the request (e.g., "OTA_Read:GuestRequests")
request_xml: The XML request body
request_xml: The XML request body. Gets passed to the action handler. In case of PushRequest can be the data to be pushed
version: The AlpineBits version (defaults to "2024-10")
Returns:
@@ -757,11 +768,26 @@ class AlpineBitsServer:
# Handle the request
try:
# Special case for ping action - pass server capabilities
if action_enum == AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS:
action_instance: PushAction
if request_xml is None or not isinstance(request_xml, tuple):
return AlpineBitsResponse(
f"Error: Invalid data for push request",
HttpStatusCode.BAD_REQUEST,
)
return await action_instance.handle(
action=request_action_name, request_xml=request_xml, version=version_enum, client_info=client_info
)
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
)
else:
return await action_instance.handle(
action=request_action_name,
request_xml=request_xml,