From 35da6d3c24dbf22492a9ef704516a58bc54bafe7 Mon Sep 17 00:00:00 2001 From: Jonas Linter Date: Thu, 25 Sep 2025 09:47:38 +0200 Subject: [PATCH] Reading handshake into python works --- output.xml | 2 +- pyproject.toml | 14 +++++++++---- src/alpine_bits_python/__main__.py | 5 +++++ src/alpine_bits_python/alpinebits_server.py | 2 +- src/alpine_bits_python/generated/__init__.py | 2 +- src/alpine_bits_python/main.py | 4 ++-- src/alpine_bits_python/simplified_access.py | 2 +- src/alpine_bits_python/util/__init__.py | 1 + src/alpine_bits_python/util/__main__.py | 5 +++++ src/alpine_bits_python/util/handshake_util.py | 20 +++++++++++++++---- uv.lock | 2 +- 11 files changed, 44 insertions(+), 15 deletions(-) create mode 100644 src/alpine_bits_python/__main__.py create mode 100644 src/alpine_bits_python/util/__init__.py create mode 100644 src/alpine_bits_python/util/__main__.py diff --git a/output.xml b/output.xml index 657f416..548dbb5 100644 --- a/output.xml +++ b/output.xml @@ -1,7 +1,7 @@ - + diff --git a/pyproject.toml b/pyproject.toml index 9df9e3c..61f2484 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,11 @@ +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + [project] name = "alpine-bits-python-server" version = "0.1.0" -description = "Add your description here" +description = "Alpine Bits Python Server implementation" readme = "README.md" requires-python = ">=3.13" dependencies = [ @@ -13,13 +17,15 @@ dependencies = [ "xsdata[cli,lxml,soap]>=25.7", ] +[project.scripts] +alpine-bits-server = "alpine_bits_python.main:main" [tool.hatch.build.targets.wheel] -packages = ["src/alpine_bits_python_server"] +packages = ["src/alpine_bits_python"] [tool.pytest.ini_options] -testpaths = ["tests"] +testpaths = ["test"] pythonpath = ["src"] [tool.ruff] -src = ["src", "tests"] \ No newline at end of file +src = ["src", "test"] \ No newline at end of file diff --git a/src/alpine_bits_python/__main__.py b/src/alpine_bits_python/__main__.py new file mode 100644 index 0000000..a3bb46a --- /dev/null +++ b/src/alpine_bits_python/__main__.py @@ -0,0 +1,5 @@ +"""Entry point for alpine_bits_python package.""" +from .main import main + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/src/alpine_bits_python/alpinebits_server.py b/src/alpine_bits_python/alpinebits_server.py index a09b73a..7adc4b3 100644 --- a/src/alpine_bits_python/alpinebits_server.py +++ b/src/alpine_bits_python/alpinebits_server.py @@ -11,7 +11,7 @@ import json from typing import Dict, List, Optional, Any from xml.etree import ElementTree as ET -from generated.alpinebits import OtaPingRq, OtaPingRs, WarningStatus +from .generated.alpinebits import OtaPingRq, OtaPingRs, WarningStatus from xsdata_pydantic.bindings import XmlSerializer from xsdata.formats.dataclass.serializers.config import SerializerConfig diff --git a/src/alpine_bits_python/generated/__init__.py b/src/alpine_bits_python/generated/__init__.py index f34da4d..b5ee0c8 100644 --- a/src/alpine_bits_python/generated/__init__.py +++ b/src/alpine_bits_python/generated/__init__.py @@ -1,4 +1,4 @@ -from generated.alpinebits import ( +from .alpinebits import ( BaseByGuestAmtType, BookingRuleCodeContext, CommentName1, diff --git a/src/alpine_bits_python/main.py b/src/alpine_bits_python/main.py index e4eb2cf..01a8487 100644 --- a/src/alpine_bits_python/main.py +++ b/src/alpine_bits_python/main.py @@ -1,12 +1,12 @@ from .alpinebits_guestrequests import ResGuest, RoomStay -import generated.alpinebits as ab +from .generated import alpinebits as ab from io import BytesIO import sys from datetime import datetime, timezone import re from xsdata_pydantic.bindings import XmlSerializer -from simplified_access import ( +from .simplified_access import ( CommentData, CommentsData, CommentListItemData, diff --git a/src/alpine_bits_python/simplified_access.py b/src/alpine_bits_python/simplified_access.py index eac901c..f20694a 100644 --- a/src/alpine_bits_python/simplified_access.py +++ b/src/alpine_bits_python/simplified_access.py @@ -4,7 +4,7 @@ from dataclasses import dataclass from enum import Enum # Import the generated classes -from generated.alpinebits import OtaHotelResNotifRq, OtaResRetrieveRs, CommentName2 +from .generated.alpinebits import OtaHotelResNotifRq, OtaResRetrieveRs, CommentName2 # Define type aliases for the two Customer types NotifCustomer = OtaHotelResNotifRq.HotelReservations.HotelReservation.ResGuests.ResGuest.Profiles.ProfileInfo.Profile.Customer diff --git a/src/alpine_bits_python/util/__init__.py b/src/alpine_bits_python/util/__init__.py new file mode 100644 index 0000000..c86dd84 --- /dev/null +++ b/src/alpine_bits_python/util/__init__.py @@ -0,0 +1 @@ +"""Utility functions for alpine_bits_python.""" \ No newline at end of file diff --git a/src/alpine_bits_python/util/__main__.py b/src/alpine_bits_python/util/__main__.py new file mode 100644 index 0000000..beb47d9 --- /dev/null +++ b/src/alpine_bits_python/util/__main__.py @@ -0,0 +1,5 @@ +"""Entry point for util package.""" +from .handshake_util import main + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/src/alpine_bits_python/util/handshake_util.py b/src/alpine_bits_python/util/handshake_util.py index 2ccdff5..dbbb66f 100644 --- a/src/alpine_bits_python/util/handshake_util.py +++ b/src/alpine_bits_python/util/handshake_util.py @@ -1,4 +1,5 @@ -from generated.alpinebits import OtaPingRq, OtaPingRs +from ..generated.alpinebits import OtaPingRq, OtaPingRs +from xsdata_pydantic.bindings import XmlParser @@ -6,15 +7,26 @@ from generated.alpinebits import OtaPingRq, OtaPingRs def main(): # test parsing a ping request sample - path = "../../AlpineBits-HotelData-2024-10/files/samples/Handshake/Handshake-OTA_PingRQ.xml" + path = "AlpineBits-HotelData-2024-10/files/samples/Handshake/Handshake-OTA_PingRQ.xml" with open( path, "r", encoding="utf-8") as f: xml = f.read() # Parse the XML into the request object - request = OtaPingRq.from_xml(xml) - print("Parsed OTA_PingRQ:", request) + + # Test parsing back + + + parser = XmlParser() + + + + parsed_result = parser.from_string(xml, OtaPingRq) + + print(parsed_result.echo_data) + + if __name__ == "__main__": diff --git a/uv.lock b/uv.lock index 4c49b3e..529d619 100644 --- a/uv.lock +++ b/uv.lock @@ -5,7 +5,7 @@ requires-python = ">=3.13" [[package]] name = "alpine-bits-python-server" version = "0.1.0" -source = { virtual = "." } +source = { editable = "." } dependencies = [ { name = "generateds" }, { name = "lxml" },