Files
alpinebits_python/alpinebits.log
2025-10-16 16:16:36 +02:00

14114 lines
1.1 MiB

2025-10-09 14:28:51 - root - INFO - Logging to file: alpinebits.log
2025-10-09 14:28:51 - root - INFO - Logging configured at INFO level
2025-10-09 14:28:51 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-09 14:28:51 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-09 14:28:51 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-09 14:28:51 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-09 14:28:51 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-09 14:28:51 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-09 14:28:51 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-09 14:28:51 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-09 14:28:51 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-09 14:28:51 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-09 16:54:04 - root - INFO - Logging to file: alpinebits.log
2025-10-09 16:54:04 - root - INFO - Logging configured at INFO level
2025-10-09 16:54:04 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-09 16:54:04 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-09 16:54:04 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-09 16:54:04 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-09 16:54:04 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-09 16:54:04 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-09 16:54:04 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-09 16:54:04 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-09 16:54:04 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-09 16:54:04 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-09 16:54:48 - root - INFO - Logging to file: alpinebits.log
2025-10-09 16:54:48 - root - INFO - Logging configured at INFO level
2025-10-09 16:54:48 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-09 16:54:48 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-09 16:54:48 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-09 16:54:48 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-09 16:54:48 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-09 16:54:48 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-09 16:54:48 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-09 16:54:48 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-09 16:54:48 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-09 16:54:48 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-09 16:54:50 - alpine_bits_python.api - INFO - AlpineBits authentication successful for user: sebastian (from config)
2025-10-09 16:54:50 - alpine_bits_python.api - INFO - Created directory: logs/conversions_import
2025-10-09 16:54:50 - alpine_bits_python.api - INFO - XML file saved to logs/conversions_import/file_sebastian_20251009_165450.xml by user sebastian (original: file.xml)
2025-10-10 10:50:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:50:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:50:59 - httpx - INFO - HTTP Request: GET http://testserver/api/ "HTTP/1.1 200 OK"
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:50:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:50:59 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:50:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:50:59 - httpx - INFO - HTTP Request: GET http://testserver/ "HTTP/1.1 200 OK"
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:50:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:50:59.202818
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105059.json
2025-10-10 10:50:59 - alpine_bits_python.api - ERROR - Error parsing submissionTime: Invalid isoformat string: '2025-10-10T08:50:59.201813+00:0'
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 438, in process_wix_form_submission
submissionTime = datetime.fromisoformat(
submissionTime[:-1]
) # Remove Z and convert
ValueError: Invalid isoformat string: '2025-10-10T08:50:59.201813+00:0'
2025-10-10 10:50:59 - alpine_bits_python.api - ERROR - Error in handle_wix_form: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 445, in process_wix_form_submission
reservation = ReservationData(
unique_id=unique_id,
...<16 lines>...
gclid=data.get("field:gclid"),
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/pydantic/main.py", line 253, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
2025-10-10 10:50:59 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 445, in process_wix_form_submission
reservation = ReservationData(
unique_id=unique_id,
...<16 lines>...
gclid=data.get("field:gclid"),
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/pydantic/main.py", line 253, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 445, in process_wix_form_submission
reservation = ReservationData(
unique_id=unique_id,
...<16 lines>...
gclid=data.get("field:gclid"),
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/pydantic/main.py", line 253, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
2025-10-10 10:50:59 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:50:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:50:59.255107
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105059.json
2025-10-10 10:50:59 - alpine_bits_python.api - ERROR - Error parsing submissionTime: Invalid isoformat string: '2025-10-10T08:50:59.254048+00:0'
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 438, in process_wix_form_submission
submissionTime = datetime.fromisoformat(
submissionTime[:-1]
) # Remove Z and convert
ValueError: Invalid isoformat string: '2025-10-10T08:50:59.254048+00:0'
2025-10-10 10:50:59 - alpine_bits_python.api - ERROR - Error in handle_wix_form: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 445, in process_wix_form_submission
reservation = ReservationData(
unique_id=unique_id,
...<16 lines>...
gclid=data.get("field:gclid"),
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/pydantic/main.py", line 253, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
2025-10-10 10:50:59 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 445, in process_wix_form_submission
reservation = ReservationData(
unique_id=unique_id,
...<16 lines>...
gclid=data.get("field:gclid"),
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/pydantic/main.py", line 253, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 445, in process_wix_form_submission
reservation = ReservationData(
unique_id=unique_id,
...<16 lines>...
gclid=data.get("field:gclid"),
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/pydantic/main.py", line 253, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
2025-10-10 10:50:59 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:50:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:50:59.277382
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105059.json
2025-10-10 10:50:59 - alpine_bits_python.api - ERROR - Error in handle_wix_form: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 445, in process_wix_form_submission
reservation = ReservationData(
unique_id=unique_id,
...<16 lines>...
gclid=data.get("field:gclid"),
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/pydantic/main.py", line 253, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
2025-10-10 10:50:59 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 445, in process_wix_form_submission
reservation = ReservationData(
unique_id=unique_id,
...<16 lines>...
gclid=data.get("field:gclid"),
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/pydantic/main.py", line 253, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 445, in process_wix_form_submission
reservation = ReservationData(
unique_id=unique_id,
...<16 lines>...
gclid=data.get("field:gclid"),
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/pydantic/main.py", line 253, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
2025-10-10 10:50:59 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:50:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:50:59.298832
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105059.json
2025-10-10 10:50:59 - alpine_bits_python.api - ERROR - Error parsing submissionTime: Invalid isoformat string: '2025-10-10T08:50:59.297932+00:0'
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 438, in process_wix_form_submission
submissionTime = datetime.fromisoformat(
submissionTime[:-1]
) # Remove Z and convert
ValueError: Invalid isoformat string: '2025-10-10T08:50:59.297932+00:0'
2025-10-10 10:50:59 - alpine_bits_python.api - ERROR - Error in handle_wix_form_test: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 570, in handle_wix_form_test
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 445, in process_wix_form_submission
reservation = ReservationData(
unique_id=unique_id,
...<16 lines>...
gclid=data.get("field:gclid"),
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/pydantic/main.py", line 253, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
2025-10-10 10:50:59 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form/test "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:50:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:50:59 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:50:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:50:59 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:50:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:50:59 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:50:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:50:59 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:50:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:50:59 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:50:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:50:59 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/test_reservation.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:50:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:50:59 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/compressed.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:50:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:50:59 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/test.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:50:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:50:59 - httpx - INFO - HTTP Request: PUT http://testserver/etc/passwd "HTTP/1.1 404 Not Found"
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:50:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:50:59 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/empty.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:50:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:50:59 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/notxml.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:50:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:50:59 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:50:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:50:59 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:50:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:50:59 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:50:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:50:59.581468
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105059.json
2025-10-10 10:50:59 - alpine_bits_python.api - ERROR - Error parsing submissionTime: Invalid isoformat string: '2025-10-10T08:50:59.579944+00:0'
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 438, in process_wix_form_submission
submissionTime = datetime.fromisoformat(
submissionTime[:-1]
) # Remove Z and convert
ValueError: Invalid isoformat string: '2025-10-10T08:50:59.579944+00:0'
2025-10-10 10:50:59 - alpine_bits_python.api - ERROR - Error in handle_wix_form: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 445, in process_wix_form_submission
reservation = ReservationData(
unique_id=unique_id,
...<16 lines>...
gclid=data.get("field:gclid"),
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/pydantic/main.py", line 253, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
2025-10-10 10:50:59 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 445, in process_wix_form_submission
reservation = ReservationData(
unique_id=unique_id,
...<16 lines>...
gclid=data.get("field:gclid"),
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/pydantic/main.py", line 253, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 445, in process_wix_form_submission
reservation = ReservationData(
unique_id=unique_id,
...<16 lines>...
gclid=data.get("field:gclid"),
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/pydantic/main.py", line 253, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:50:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:50:59 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 422 Unprocessable Entity"
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:50:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:50:59.802241
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105059.json
2025-10-10 10:50:59 - alpine_bits_python.api - ERROR - Error in handle_wix_form: list index out of range
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 367, in process_wix_form_submission
or data.get("submissions", [{}])[1].get("value")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range
2025-10-10 10:50:59 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 367, in process_wix_form_submission
or data.get("submissions", [{}])[1].get("value")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 367, in process_wix_form_submission
or data.get("submissions", [{}])[1].get("value")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range
2025-10-10 10:50:59 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:50:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:50:59 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:50:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:50:59 - httpx - INFO - HTTP Request: OPTIONS http://testserver/api/health "HTTP/1.1 400 Bad Request"
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:50:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:50:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:50:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:50:59 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:50:59 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:50:59 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:50:59 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:50:59 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:50:59 - sqlalchemy.pool.impl.AsyncAdaptedQueuePool - ERROR - The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-74, started daemon 140038025373248)>>, which will be dropped, as it cannot be safely terminated. Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
2025-10-10 10:51:10 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:51:10 - root - INFO - Logging configured at INFO level
2025-10-10 10:51:10 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:51:10 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:10 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:10 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:10 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:10 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:51:10 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:51:10 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:51:10 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:51:10 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:51:10 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:51:10.201531
2025-10-10 10:51:10 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:51:10 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:51:10 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105110.json
2025-10-10 10:51:10 - alpine_bits_python.api - ERROR - Error parsing submissionTime: Invalid isoformat string: '2025-10-10T08:51:10.200188+00:0'
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 438, in process_wix_form_submission
submissionTime = datetime.fromisoformat(
submissionTime[:-1]
) # Remove Z and convert
ValueError: Invalid isoformat string: '2025-10-10T08:51:10.200188+00:0'
2025-10-10 10:51:10 - alpine_bits_python.api - ERROR - Error in handle_wix_form: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 445, in process_wix_form_submission
reservation = ReservationData(
unique_id=unique_id,
...<16 lines>...
gclid=data.get("field:gclid"),
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/pydantic/main.py", line 253, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
2025-10-10 10:51:10 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 445, in process_wix_form_submission
reservation = ReservationData(
unique_id=unique_id,
...<16 lines>...
gclid=data.get("field:gclid"),
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/pydantic/main.py", line 253, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 445, in process_wix_form_submission
reservation = ReservationData(
unique_id=unique_id,
...<16 lines>...
gclid=data.get("field:gclid"),
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/pydantic/main.py", line 253, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
2025-10-10 10:51:10 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:51:58 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:51:58 - root - INFO - Logging configured at INFO level
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:51:58 - httpx - INFO - HTTP Request: GET http://testserver/api/ "HTTP/1.1 200 OK"
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:58 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:51:58 - root - INFO - Logging configured at INFO level
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:51:58 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:58 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:51:58 - root - INFO - Logging configured at INFO level
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:51:58 - httpx - INFO - HTTP Request: GET http://testserver/ "HTTP/1.1 200 OK"
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:58 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:51:58 - root - INFO - Logging configured at INFO level
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:51:58.956742
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105158.json
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Dispatched form_processed event for hotel 123
2025-10-10 10:51:58 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 200 OK"
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:58 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:51:58 - root - INFO - Logging configured at INFO level
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:58 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:51:58 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:51:59.000054
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105159.json
2025-10-10 10:51:59 - alpine_bits_python.api - ERROR - Error in handle_wix_form: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:51:59 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:51:59 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:51:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:51:59.034662
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105159.json
2025-10-10 10:51:59 - alpine_bits_python.api - ERROR - Error in handle_wix_form: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 445, in process_wix_form_submission
reservation = ReservationData(
unique_id=unique_id,
...<16 lines>...
gclid=data.get("field:gclid"),
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/pydantic/main.py", line 253, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
2025-10-10 10:51:59 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 445, in process_wix_form_submission
reservation = ReservationData(
unique_id=unique_id,
...<16 lines>...
gclid=data.get("field:gclid"),
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/pydantic/main.py", line 253, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 445, in process_wix_form_submission
reservation = ReservationData(
unique_id=unique_id,
...<16 lines>...
gclid=data.get("field:gclid"),
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/pydantic/main.py", line 253, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
2025-10-10 10:51:59 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:51:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:51:59.054439
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105159.json
2025-10-10 10:51:59 - alpine_bits_python.api - ERROR - Error in handle_wix_form_test: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 570, in handle_wix_form_test
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:51:59 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form/test "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:51:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:51:59 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:51:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:51:59 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:51:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:51:59 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:51:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:51:59 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:51:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:51:59 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:51:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:51:59 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/test_reservation.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:51:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:51:59 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/compressed.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:51:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:51:59 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/test.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:51:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:51:59 - httpx - INFO - HTTP Request: PUT http://testserver/etc/passwd "HTTP/1.1 404 Not Found"
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:51:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:51:59 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/empty.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:51:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:51:59 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/notxml.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:51:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:51:59 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:51:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:51:59 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:51:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:51:59 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:51:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:51:59.297463
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105159.json
2025-10-10 10:51:59 - alpine_bits_python.api - ERROR - Error in handle_wix_form: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:51:59 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:51:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:51:59 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 422 Unprocessable Entity"
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:51:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:51:59.347401
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105159.json
2025-10-10 10:51:59 - alpine_bits_python.api - ERROR - Error in handle_wix_form: list index out of range
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 367, in process_wix_form_submission
or data.get("submissions", [{}])[1].get("value")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range
2025-10-10 10:51:59 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 367, in process_wix_form_submission
or data.get("submissions", [{}])[1].get("value")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 367, in process_wix_form_submission
or data.get("submissions", [{}])[1].get("value")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range
2025-10-10 10:51:59 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:51:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:51:59 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:51:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:51:59 - httpx - INFO - HTTP Request: OPTIONS http://testserver/api/health "HTTP/1.1 400 Bad Request"
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:51:59 - root - INFO - Logging configured at INFO level
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:51:59 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:51:59 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:51:59 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:51:59 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:51:59 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:51:59 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:51:59 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:51:59 - sqlalchemy.pool.impl.AsyncAdaptedQueuePool - ERROR - The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-74, started daemon 140034791437888)>>, which will be dropped, as it cannot be safely terminated. Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
2025-10-10 10:52:16 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:52:16 - root - INFO - Logging configured at INFO level
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:52:16 - httpx - INFO - HTTP Request: GET http://testserver/api/ "HTTP/1.1 200 OK"
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:16 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:52:16 - root - INFO - Logging configured at INFO level
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:52:16 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:16 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:52:16 - root - INFO - Logging configured at INFO level
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:52:16 - httpx - INFO - HTTP Request: GET http://testserver/ "HTTP/1.1 200 OK"
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:16 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:52:16 - root - INFO - Logging configured at INFO level
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:52:16.887607
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105216.json
2025-10-10 10:52:16 - alpine_bits_python.api - ERROR - Error in handle_wix_form: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:52:16 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:52:16 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:16 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:52:16 - root - INFO - Logging configured at INFO level
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:52:16.958883
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:52:16 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105216.json
2025-10-10 10:52:16 - alpine_bits_python.api - ERROR - Error in handle_wix_form: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:52:16 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:52:16 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:16 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:52:17 - root - INFO - Logging configured at INFO level
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:52:17.009341
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105217.json
2025-10-10 10:52:17 - alpine_bits_python.api - ERROR - Error in handle_wix_form: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 445, in process_wix_form_submission
reservation = ReservationData(
unique_id=unique_id,
...<16 lines>...
gclid=data.get("field:gclid"),
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/pydantic/main.py", line 253, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
2025-10-10 10:52:17 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 445, in process_wix_form_submission
reservation = ReservationData(
unique_id=unique_id,
...<16 lines>...
gclid=data.get("field:gclid"),
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/pydantic/main.py", line 253, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 445, in process_wix_form_submission
reservation = ReservationData(
unique_id=unique_id,
...<16 lines>...
gclid=data.get("field:gclid"),
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/pydantic/main.py", line 253, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
2025-10-10 10:52:17 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:52:17 - root - INFO - Logging configured at INFO level
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:52:17.051714
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105217.json
2025-10-10 10:52:17 - alpine_bits_python.api - ERROR - Error in handle_wix_form_test: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 570, in handle_wix_form_test
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:52:17 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form/test "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:52:17 - root - INFO - Logging configured at INFO level
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:52:17 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:52:17 - root - INFO - Logging configured at INFO level
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:52:17 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:52:17 - root - INFO - Logging configured at INFO level
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:52:17 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:52:17 - root - INFO - Logging configured at INFO level
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:52:17 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:52:17 - root - INFO - Logging configured at INFO level
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:52:17 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:52:17 - root - INFO - Logging configured at INFO level
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:52:17 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/test_reservation.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:52:17 - root - INFO - Logging configured at INFO level
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:52:17 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/compressed.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:52:17 - root - INFO - Logging configured at INFO level
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:52:17 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/test.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:52:17 - root - INFO - Logging configured at INFO level
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:52:17 - httpx - INFO - HTTP Request: PUT http://testserver/etc/passwd "HTTP/1.1 404 Not Found"
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:52:17 - root - INFO - Logging configured at INFO level
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:52:17 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/empty.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:52:17 - root - INFO - Logging configured at INFO level
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:52:17 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/notxml.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:52:17 - root - INFO - Logging configured at INFO level
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:52:17 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:52:17 - root - INFO - Logging configured at INFO level
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:52:17 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:52:17 - root - INFO - Logging configured at INFO level
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:52:17 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:52:17 - root - INFO - Logging configured at INFO level
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:17 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:52:17.465784
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:52:17 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105217.json
2025-10-10 10:52:17 - alpine_bits_python.api - ERROR - Error in handle_wix_form: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:52:17 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:18 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:52:18 - root - INFO - Logging configured at INFO level
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:52:18 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 422 Unprocessable Entity"
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:18 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:52:18 - root - INFO - Logging configured at INFO level
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:52:18.617919
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105218.json
2025-10-10 10:52:18 - alpine_bits_python.api - ERROR - Error in handle_wix_form: list index out of range
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 367, in process_wix_form_submission
or data.get("submissions", [{}])[1].get("value")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range
2025-10-10 10:52:18 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 367, in process_wix_form_submission
or data.get("submissions", [{}])[1].get("value")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 367, in process_wix_form_submission
or data.get("submissions", [{}])[1].get("value")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range
2025-10-10 10:52:18 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:18 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:52:18 - root - INFO - Logging configured at INFO level
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:52:18 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:18 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:52:18 - root - INFO - Logging configured at INFO level
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:52:18 - httpx - INFO - HTTP Request: OPTIONS http://testserver/api/health "HTTP/1.1 400 Bad Request"
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:18 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:52:18 - root - INFO - Logging configured at INFO level
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:52:18 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:52:18 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:52:18 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:52:18 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:52:18 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:52:18 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:52:18 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:52:19 - sqlalchemy.pool.impl.AsyncAdaptedQueuePool - ERROR - The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-79, started daemon 139743552575040)>>, which will be dropped, as it cannot be safely terminated. Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
2025-10-10 10:53:05 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:53:05 - root - INFO - Logging configured at INFO level
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:53:05 - httpx - INFO - HTTP Request: GET http://testserver/api/ "HTTP/1.1 200 OK"
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:05 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:53:05 - root - INFO - Logging configured at INFO level
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:53:05 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:05 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:53:05 - root - INFO - Logging configured at INFO level
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:53:05 - httpx - INFO - HTTP Request: GET http://testserver/ "HTTP/1.1 200 OK"
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:05 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:53:05 - root - INFO - Logging configured at INFO level
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:53:05.769294
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105305.json
2025-10-10 10:53:05 - alpine_bits_python.api - ERROR - Error in handle_wix_form: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:53:05 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:53:05 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:05 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:53:05 - root - INFO - Logging configured at INFO level
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:53:05.826369
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105305.json
2025-10-10 10:53:05 - alpine_bits_python.api - ERROR - Error in handle_wix_form: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:53:05 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:53:05 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:05 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:53:05 - root - INFO - Logging configured at INFO level
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:53:05.860481
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105305.json
2025-10-10 10:53:05 - alpine_bits_python.api - ERROR - Error in handle_wix_form: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 445, in process_wix_form_submission
reservation = ReservationData(
unique_id=unique_id,
...<16 lines>...
gclid=data.get("field:gclid"),
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/pydantic/main.py", line 253, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
2025-10-10 10:53:05 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 445, in process_wix_form_submission
reservation = ReservationData(
unique_id=unique_id,
...<16 lines>...
gclid=data.get("field:gclid"),
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/pydantic/main.py", line 253, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 445, in process_wix_form_submission
reservation = ReservationData(
unique_id=unique_id,
...<16 lines>...
gclid=data.get("field:gclid"),
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/pydantic/main.py", line 253, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
2025-10-10 10:53:05 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:05 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:53:05 - root - INFO - Logging configured at INFO level
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:53:05.888275
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105305.json
2025-10-10 10:53:05 - alpine_bits_python.api - ERROR - Error in handle_wix_form_test: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 570, in handle_wix_form_test
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:53:05 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form/test "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:05 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:53:05 - root - INFO - Logging configured at INFO level
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:53:05 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:05 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:53:05 - root - INFO - Logging configured at INFO level
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:53:05 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:05 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:53:05 - root - INFO - Logging configured at INFO level
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:53:05 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:05 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:53:05 - root - INFO - Logging configured at INFO level
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:05 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:53:05 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:53:06 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:53:06 - root - INFO - Logging configured at INFO level
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:53:06 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:53:06 - root - INFO - Logging configured at INFO level
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:53:06 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/test_reservation.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:53:06 - root - INFO - Logging configured at INFO level
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:53:06 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/compressed.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:53:06 - root - INFO - Logging configured at INFO level
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:53:06 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/test.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:53:06 - root - INFO - Logging configured at INFO level
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:53:06 - httpx - INFO - HTTP Request: PUT http://testserver/etc/passwd "HTTP/1.1 404 Not Found"
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:53:06 - root - INFO - Logging configured at INFO level
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:53:06 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/empty.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:53:06 - root - INFO - Logging configured at INFO level
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:53:06 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/notxml.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:53:06 - root - INFO - Logging configured at INFO level
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:53:06 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:53:06 - root - INFO - Logging configured at INFO level
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:53:06 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:53:06 - root - INFO - Logging configured at INFO level
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:53:06 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:53:06 - root - INFO - Logging configured at INFO level
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:53:06.196901
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105306.json
2025-10-10 10:53:06 - alpine_bits_python.api - ERROR - Error in handle_wix_form: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:53:06 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:53:06 - root - INFO - Logging configured at INFO level
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:53:06 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 422 Unprocessable Entity"
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:53:06 - root - INFO - Logging configured at INFO level
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:53:06.622362
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105306.json
2025-10-10 10:53:06 - alpine_bits_python.api - ERROR - Error in handle_wix_form: list index out of range
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 367, in process_wix_form_submission
or data.get("submissions", [{}])[1].get("value")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range
2025-10-10 10:53:06 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 367, in process_wix_form_submission
or data.get("submissions", [{}])[1].get("value")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 367, in process_wix_form_submission
or data.get("submissions", [{}])[1].get("value")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range
2025-10-10 10:53:06 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:53:06 - root - INFO - Logging configured at INFO level
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:53:06 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:53:06 - root - INFO - Logging configured at INFO level
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:53:06 - httpx - INFO - HTTP Request: OPTIONS http://testserver/api/health "HTTP/1.1 400 Bad Request"
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:53:06 - root - INFO - Logging configured at INFO level
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:53:06 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:53:06 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:53:06 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:53:06 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:53:06 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:53:06 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:53:06 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:53:06 - sqlalchemy.pool.impl.AsyncAdaptedQueuePool - ERROR - The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-79, started daemon 140423796344384)>>, which will be dropped, as it cannot be safely terminated. Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
2025-10-10 10:54:02 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:54:02 - root - INFO - Logging configured at INFO level
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:54:02 - httpx - INFO - HTTP Request: GET http://testserver/api/ "HTTP/1.1 200 OK"
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:54:02 - root - INFO - Logging configured at INFO level
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:54:02 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:54:02 - root - INFO - Logging configured at INFO level
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:54:02 - httpx - INFO - HTTP Request: GET http://testserver/ "HTTP/1.1 200 OK"
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:54:02 - root - INFO - Logging configured at INFO level
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:54:02.073375
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105402.json
2025-10-10 10:54:02 - alpine_bits_python.api - ERROR - Error in handle_wix_form: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:54:02 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:54:02 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:54:02 - root - INFO - Logging configured at INFO level
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:54:02.140593
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105402.json
2025-10-10 10:54:02 - alpine_bits_python.api - ERROR - Error in handle_wix_form: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:54:02 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:54:02 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:54:02 - root - INFO - Logging configured at INFO level
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:54:02.176251
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105402.json
2025-10-10 10:54:02 - alpine_bits_python.api - ERROR - Error in handle_wix_form: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 445, in process_wix_form_submission
reservation = ReservationData(
unique_id=unique_id,
...<16 lines>...
gclid=data.get("field:gclid"),
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/pydantic/main.py", line 253, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
2025-10-10 10:54:02 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 445, in process_wix_form_submission
reservation = ReservationData(
unique_id=unique_id,
...<16 lines>...
gclid=data.get("field:gclid"),
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/pydantic/main.py", line 253, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 445, in process_wix_form_submission
reservation = ReservationData(
unique_id=unique_id,
...<16 lines>...
gclid=data.get("field:gclid"),
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/pydantic/main.py", line 253, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for ReservationData
created_at
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.11/v/datetime_type
2025-10-10 10:54:02 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:54:02 - root - INFO - Logging configured at INFO level
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:54:02.206091
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105402.json
2025-10-10 10:54:02 - alpine_bits_python.api - ERROR - Error in handle_wix_form_test: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 570, in handle_wix_form_test
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:54:02 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form/test "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:54:02 - root - INFO - Logging configured at INFO level
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:54:02 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:54:02 - root - INFO - Logging configured at INFO level
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:54:02 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:54:02 - root - INFO - Logging configured at INFO level
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:54:02 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:54:02 - root - INFO - Logging configured at INFO level
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:54:02 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:54:02 - root - INFO - Logging configured at INFO level
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:54:02 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:54:02 - root - INFO - Logging configured at INFO level
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:54:02 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/test_reservation.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:54:02 - root - INFO - Logging configured at INFO level
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:54:02 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/compressed.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:54:02 - root - INFO - Logging configured at INFO level
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:54:02 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/test.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:54:02 - root - INFO - Logging configured at INFO level
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:54:02 - httpx - INFO - HTTP Request: PUT http://testserver/etc/passwd "HTTP/1.1 404 Not Found"
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:54:02 - root - INFO - Logging configured at INFO level
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:54:02 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/empty.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:54:02 - root - INFO - Logging configured at INFO level
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:54:02 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/notxml.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:54:02 - root - INFO - Logging configured at INFO level
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:54:02 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:54:02 - root - INFO - Logging configured at INFO level
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:54:02 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:54:02 - root - INFO - Logging configured at INFO level
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:54:02 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:54:02 - root - INFO - Logging configured at INFO level
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:54:02.527423
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:54:02 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105402.json
2025-10-10 10:54:02 - alpine_bits_python.api - ERROR - Error in handle_wix_form: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:54:02 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:03 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:54:03 - root - INFO - Logging configured at INFO level
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:54:03 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 422 Unprocessable Entity"
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:03 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:54:03 - root - INFO - Logging configured at INFO level
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:54:03.041180
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105403.json
2025-10-10 10:54:03 - alpine_bits_python.api - ERROR - Error in handle_wix_form: list index out of range
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 367, in process_wix_form_submission
or data.get("submissions", [{}])[1].get("value")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range
2025-10-10 10:54:03 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 367, in process_wix_form_submission
or data.get("submissions", [{}])[1].get("value")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 367, in process_wix_form_submission
or data.get("submissions", [{}])[1].get("value")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range
2025-10-10 10:54:03 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:03 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:54:03 - root - INFO - Logging configured at INFO level
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:54:03 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:03 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:54:03 - root - INFO - Logging configured at INFO level
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:54:03 - httpx - INFO - HTTP Request: OPTIONS http://testserver/api/health "HTTP/1.1 400 Bad Request"
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:03 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:54:03 - root - INFO - Logging configured at INFO level
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:54:03 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:54:03 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:54:03 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:54:03 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:54:03 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:54:03 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:54:03 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:54:03 - sqlalchemy.pool.impl.AsyncAdaptedQueuePool - ERROR - The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-74, started daemon 140719591437888)>>, which will be dropped, as it cannot be safely terminated. Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
2025-10-10 10:55:48 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:55:48 - root - INFO - Logging configured at INFO level
2025-10-10 10:55:48 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:55:48 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:55:48 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:55:48 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:55:48 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:55:48 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:55:48 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:55:48 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:55:48 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:55:48 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:55:48 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:55:48.071139
2025-10-10 10:55:48 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:55:48 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:55:48 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105548.json
2025-10-10 10:55:48 - alpine_bits_python.api - ERROR - Error in handle_wix_form: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:55:48 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:55:48 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:55:55 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:55:55 - root - INFO - Logging configured at INFO level
2025-10-10 10:55:55 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:55:55 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:55:55 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:55:55 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:55:55 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:55:55 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:55:55 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:55:55 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:55:55 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:55:55 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:55:55 - httpx - INFO - HTTP Request: GET http://testserver/api/ "HTTP/1.1 200 OK"
2025-10-10 10:55:55 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:55:55 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:55:55 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:55:55 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:55:55 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:55:55 - root - INFO - Logging configured at INFO level
2025-10-10 10:55:55 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:55:55 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:55:55 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:55:55 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:55:55 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:55:55 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:55:55 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:55:55 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:55:55 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:55:55 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:55:55 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:55:55.423973
2025-10-10 10:55:55 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:55:55 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:55:55 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105555.json
2025-10-10 10:55:55 - alpine_bits_python.api - ERROR - Error in handle_wix_form: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:55:55 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:55:55 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:56:02 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:56:02 - root - INFO - Logging configured at INFO level
2025-10-10 10:56:02 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:56:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:56:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:56:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:56:02 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:56:02 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:56:02 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:56:02 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:56:02 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:56:02 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:56:02 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:56:02.594297
2025-10-10 10:56:02 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:56:02 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:56:02 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105602.json
2025-10-10 10:56:02 - alpine_bits_python.api - ERROR - Error in handle_wix_form: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:56:02 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: customers.contact_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 416, in process_wix_form_submission
await db.flush() # This assigns db_customer.id without committing
^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 801, in flush
await greenlet_spawn(self.sync_session.flush, objects=objects)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: customers.contact_id
[SQL: INSERT INTO customers (given_name, contact_id, surname, name_prefix, email_address, phone, email_newsletter, address_line, city_name, postal_code, country_code, gender, birth_date, language, address_catalog, name_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('John', 'contact-123', 'Doe', 'Mr.', 'john.doe@example.com', '+1234567890', 1, None, None, None, None, None, None, 'en', 0, None)]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:56:02 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:57:00 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:00 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:00 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:00 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:00 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:00 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:00 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:00 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:00 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:00 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:00 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:00 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:00 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:57:00.937001
2025-10-10 10:57:00 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:57:00 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:57:00 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105700.json
2025-10-10 10:57:00 - alpine_bits_python.api - INFO - Dispatched form_processed event for hotel 123
2025-10-10 10:57:00 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 200 OK"
2025-10-10 10:57:00 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:00 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:00 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:00 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:00 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:00 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:00 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:00 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:00 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:00 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:00 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:00 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:00 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:00 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:00 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:00 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:00 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:57:00.970096
2025-10-10 10:57:00 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:57:00 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:57:00 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105700.json
2025-10-10 10:57:00 - alpine_bits_python.api - INFO - Dispatched form_processed event for hotel 123
2025-10-10 10:57:00 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 200 OK"
2025-10-10 10:57:01 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:01 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:01 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:01 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:01 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:01 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:01 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:01 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:01 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:01 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:01 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:01 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:01 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:01 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:01 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:01 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:01 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:57:01.040061
2025-10-10 10:57:01 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:57:01 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:57:01 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105701.json
2025-10-10 10:57:01 - alpine_bits_python.api - INFO - Dispatched form_processed event for hotel 123
2025-10-10 10:57:01 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 200 OK"
2025-10-10 10:57:01 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:01 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:01 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:01 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:01 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:01 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:01 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:01 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:01 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:01 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:01 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:01 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:01 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:01 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:01 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:01 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:01 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:57:01.056633
2025-10-10 10:57:01 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:57:01 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:57:01 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105701.json
2025-10-10 10:57:01 - alpine_bits_python.api - INFO - Dispatched form_processed event for hotel 123
2025-10-10 10:57:01 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form/test "HTTP/1.1 200 OK"
2025-10-10 10:57:07 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:07 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:07 - httpx - INFO - HTTP Request: GET http://testserver/api/ "HTTP/1.1 200 OK"
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:07 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:07 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:07 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:07 - httpx - INFO - HTTP Request: GET http://testserver/ "HTTP/1.1 200 OK"
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:07 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:57:07.501948
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105707.json
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Dispatched form_processed event for hotel 123
2025-10-10 10:57:07 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 200 OK"
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:07 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:57:07.540376
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105707.json
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Dispatched form_processed event for hotel 123
2025-10-10 10:57:07 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 200 OK"
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:07 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:57:07.562981
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105707.json
2025-10-10 10:57:07 - alpine_bits_python.api - ERROR - Error in handle_wix_form: (sqlite3.IntegrityError) UNIQUE constraint failed: reservations.md5_unique_id
[SQL: INSERT INTO reservations (customer_id, unique_id, md5_unique_id, start_date, end_date, num_adults, num_children, children_ages, offer, created_at, utm_source, utm_medium, utm_campaign, utm_term, utm_content, user_comment, fbclid, gclid, hotel_code, hotel_name) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: (8, 'minimal-123', '2d316901028b3c2a906a20b8dcb57261', '2025-01-15', '2025-01-20', 2, 0, '', None, '2025-01-10 12:00:00.000000', None, None, None, None, None, '', None, None, '123', 'Frangart Inn')]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: reservations.md5_unique_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 471, in process_wix_form_submission
await db.commit()
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 1014, in commit
await greenlet_spawn(self.sync_session.commit)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 2032, in commit
trans.commit(_to_root=True)
~~~~~~~~~~~~^^^^^^^^^^^^^^^
File "<string>", line 2, in commit
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 1313, in commit
self._prepare_impl()
~~~~~~~~~~~~~~~~~~^^
File "<string>", line 2, in _prepare_impl
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 1288, in _prepare_impl
self.session.flush()
~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: reservations.md5_unique_id
[SQL: INSERT INTO reservations (customer_id, unique_id, md5_unique_id, start_date, end_date, num_adults, num_children, children_ages, offer, created_at, utm_source, utm_medium, utm_campaign, utm_term, utm_content, user_comment, fbclid, gclid, hotel_code, hotel_name) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: (8, 'minimal-123', '2d316901028b3c2a906a20b8dcb57261', '2025-01-15', '2025-01-20', 2, 0, '', None, '2025-01-10 12:00:00.000000', None, None, None, None, None, '', None, None, '123', 'Frangart Inn')]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:57:07 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: reservations.md5_unique_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 471, in process_wix_form_submission
await db.commit()
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 1014, in commit
await greenlet_spawn(self.sync_session.commit)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 2032, in commit
trans.commit(_to_root=True)
~~~~~~~~~~~~^^^^^^^^^^^^^^^
File "<string>", line 2, in commit
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 1313, in commit
self._prepare_impl()
~~~~~~~~~~~~~~~~~~^^
File "<string>", line 2, in _prepare_impl
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 1288, in _prepare_impl
self.session.flush()
~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: reservations.md5_unique_id
[SQL: INSERT INTO reservations (customer_id, unique_id, md5_unique_id, start_date, end_date, num_adults, num_children, children_ages, offer, created_at, utm_source, utm_medium, utm_campaign, utm_term, utm_content, user_comment, fbclid, gclid, hotel_code, hotel_name) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: (8, 'minimal-123', '2d316901028b3c2a906a20b8dcb57261', '2025-01-15', '2025-01-20', 2, 0, '', None, '2025-01-10 12:00:00.000000', None, None, None, None, None, '', None, None, '123', 'Frangart Inn')]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: reservations.md5_unique_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 471, in process_wix_form_submission
await db.commit()
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 1014, in commit
await greenlet_spawn(self.sync_session.commit)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 2032, in commit
trans.commit(_to_root=True)
~~~~~~~~~~~~^^^^^^^^^^^^^^^
File "<string>", line 2, in commit
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 1313, in commit
self._prepare_impl()
~~~~~~~~~~~~~~~~~~^^
File "<string>", line 2, in _prepare_impl
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 1288, in _prepare_impl
self.session.flush()
~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: reservations.md5_unique_id
[SQL: INSERT INTO reservations (customer_id, unique_id, md5_unique_id, start_date, end_date, num_adults, num_children, children_ages, offer, created_at, utm_source, utm_medium, utm_campaign, utm_term, utm_content, user_comment, fbclid, gclid, hotel_code, hotel_name) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: (8, 'minimal-123', '2d316901028b3c2a906a20b8dcb57261', '2025-01-15', '2025-01-20', 2, 0, '', None, '2025-01-10 12:00:00.000000', None, None, None, None, None, '', None, None, '123', 'Frangart Inn')]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:57:07 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:07 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:57:07.595200
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105707.json
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Dispatched form_processed event for hotel 123
2025-10-10 10:57:07 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form/test "HTTP/1.1 200 OK"
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:07 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:07 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:07 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:07 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:07 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:07 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:07 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:07 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:07 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:07 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:07 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:07 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/test_reservation.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:07 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:07 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/compressed.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:07 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:07 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/test.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:07 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:07 - httpx - INFO - HTTP Request: PUT http://testserver/etc/passwd "HTTP/1.1 404 Not Found"
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:07 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:07 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/empty.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:07 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:07 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/notxml.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:07 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:07 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:07 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:07 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:07 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:07 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:07 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:57:07.737177
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105707.json
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:07 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:07 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 422 Unprocessable Entity"
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:07 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:57:07.763631
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105707.json
2025-10-10 10:57:07 - alpine_bits_python.api - ERROR - Error in handle_wix_form: list index out of range
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 367, in process_wix_form_submission
or data.get("submissions", [{}])[1].get("value")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range
2025-10-10 10:57:07 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 367, in process_wix_form_submission
or data.get("submissions", [{}])[1].get("value")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 367, in process_wix_form_submission
or data.get("submissions", [{}])[1].get("value")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range
2025-10-10 10:57:07 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:07 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:07 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:07 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:07 - httpx - INFO - HTTP Request: OPTIONS http://testserver/api/health "HTTP/1.1 400 Bad Request"
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:07 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:07 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:07 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:07 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:57:07 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:57:07 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:57:07 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:57:07 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:57:07 - sqlalchemy.pool.impl.AsyncAdaptedQueuePool - ERROR - The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-52, started daemon 139933121508928)>>, which will be dropped, as it cannot be safely terminated. Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
2025-10-10 10:57:14 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:14 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:14 - httpx - INFO - HTTP Request: GET http://testserver/api/ "HTTP/1.1 200 OK"
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:14 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:14 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:14 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:14 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:14 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:14 - httpx - INFO - HTTP Request: GET http://testserver/ "HTTP/1.1 200 OK"
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:14 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:14 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:57:14.871642
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105714.json
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Dispatched form_processed event for hotel 123
2025-10-10 10:57:14 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 200 OK"
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:14 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:14 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:14 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:57:14.931247
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105714.json
2025-10-10 10:57:14 - alpine_bits_python.api - INFO - Dispatched form_processed event for hotel 123
2025-10-10 10:57:14 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 200 OK"
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:15 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:57:15.031197
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105715.json
2025-10-10 10:57:15 - alpine_bits_python.api - ERROR - Error in handle_wix_form: (sqlite3.IntegrityError) UNIQUE constraint failed: reservations.md5_unique_id
[SQL: INSERT INTO reservations (customer_id, unique_id, md5_unique_id, start_date, end_date, num_adults, num_children, children_ages, offer, created_at, utm_source, utm_medium, utm_campaign, utm_term, utm_content, user_comment, fbclid, gclid, hotel_code, hotel_name) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: (12, 'minimal-123', '2d316901028b3c2a906a20b8dcb57261', '2025-01-15', '2025-01-20', 2, 0, '', None, '2025-01-10 12:00:00.000000', None, None, None, None, None, '', None, None, '123', 'Frangart Inn')]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: reservations.md5_unique_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 471, in process_wix_form_submission
await db.commit()
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 1014, in commit
await greenlet_spawn(self.sync_session.commit)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 2032, in commit
trans.commit(_to_root=True)
~~~~~~~~~~~~^^^^^^^^^^^^^^^
File "<string>", line 2, in commit
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 1313, in commit
self._prepare_impl()
~~~~~~~~~~~~~~~~~~^^
File "<string>", line 2, in _prepare_impl
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 1288, in _prepare_impl
self.session.flush()
~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: reservations.md5_unique_id
[SQL: INSERT INTO reservations (customer_id, unique_id, md5_unique_id, start_date, end_date, num_adults, num_children, children_ages, offer, created_at, utm_source, utm_medium, utm_campaign, utm_term, utm_content, user_comment, fbclid, gclid, hotel_code, hotel_name) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: (12, 'minimal-123', '2d316901028b3c2a906a20b8dcb57261', '2025-01-15', '2025-01-20', 2, 0, '', None, '2025-01-10 12:00:00.000000', None, None, None, None, None, '', None, None, '123', 'Frangart Inn')]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:57:15 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: reservations.md5_unique_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 471, in process_wix_form_submission
await db.commit()
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 1014, in commit
await greenlet_spawn(self.sync_session.commit)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 2032, in commit
trans.commit(_to_root=True)
~~~~~~~~~~~~^^^^^^^^^^^^^^^
File "<string>", line 2, in commit
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 1313, in commit
self._prepare_impl()
~~~~~~~~~~~~~~~~~~^^
File "<string>", line 2, in _prepare_impl
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 1288, in _prepare_impl
self.session.flush()
~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: reservations.md5_unique_id
[SQL: INSERT INTO reservations (customer_id, unique_id, md5_unique_id, start_date, end_date, num_adults, num_children, children_ages, offer, created_at, utm_source, utm_medium, utm_campaign, utm_term, utm_content, user_comment, fbclid, gclid, hotel_code, hotel_name) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: (12, 'minimal-123', '2d316901028b3c2a906a20b8dcb57261', '2025-01-15', '2025-01-20', 2, 0, '', None, '2025-01-10 12:00:00.000000', None, None, None, None, None, '', None, None, '123', 'Frangart Inn')]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: reservations.md5_unique_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 471, in process_wix_form_submission
await db.commit()
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 1014, in commit
await greenlet_spawn(self.sync_session.commit)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 2032, in commit
trans.commit(_to_root=True)
~~~~~~~~~~~~^^^^^^^^^^^^^^^
File "<string>", line 2, in commit
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 1313, in commit
self._prepare_impl()
~~~~~~~~~~~~~~~~~~^^
File "<string>", line 2, in _prepare_impl
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 1288, in _prepare_impl
self.session.flush()
~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: reservations.md5_unique_id
[SQL: INSERT INTO reservations (customer_id, unique_id, md5_unique_id, start_date, end_date, num_adults, num_children, children_ages, offer, created_at, utm_source, utm_medium, utm_campaign, utm_term, utm_content, user_comment, fbclid, gclid, hotel_code, hotel_name) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: (12, 'minimal-123', '2d316901028b3c2a906a20b8dcb57261', '2025-01-15', '2025-01-20', 2, 0, '', None, '2025-01-10 12:00:00.000000', None, None, None, None, None, '', None, None, '123', 'Frangart Inn')]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:57:15 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:15 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:57:15.075651
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105715.json
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Dispatched form_processed event for hotel 123
2025-10-10 10:57:15 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form/test "HTTP/1.1 200 OK"
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:15 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:15 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:15 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:15 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:15 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:15 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:15 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:15 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:15 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:15 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:15 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:15 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/test_reservation.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:15 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:15 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/compressed.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:15 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:15 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/test.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:15 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:15 - httpx - INFO - HTTP Request: PUT http://testserver/etc/passwd "HTTP/1.1 404 Not Found"
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:15 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:15 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/empty.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:15 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:15 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/notxml.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:15 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:15 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:15 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:15 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:15 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:15 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:15 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:57:15.391258
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105715.json
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:15 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:15 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 422 Unprocessable Entity"
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:15 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:57:15.857786
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105715.json
2025-10-10 10:57:15 - alpine_bits_python.api - ERROR - Error in handle_wix_form: list index out of range
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 367, in process_wix_form_submission
or data.get("submissions", [{}])[1].get("value")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range
2025-10-10 10:57:15 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 367, in process_wix_form_submission
or data.get("submissions", [{}])[1].get("value")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 367, in process_wix_form_submission
or data.get("submissions", [{}])[1].get("value")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range
2025-10-10 10:57:15 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:15 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:15 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:15 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:15 - httpx - INFO - HTTP Request: OPTIONS http://testserver/api/health "HTTP/1.1 400 Bad Request"
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:15 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:15 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:15 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:15 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:57:15 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:57:15 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:57:15 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:57:15 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:57:15 - sqlalchemy.pool.impl.AsyncAdaptedQueuePool - ERROR - The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-53, started daemon 140628388357696)>>, which will be dropped, as it cannot be safely terminated. Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
2025-10-10 10:57:47 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:47 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:47 - httpx - INFO - HTTP Request: GET http://testserver/api/ "HTTP/1.1 200 OK"
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:47 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:47 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:47 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:47 - httpx - INFO - HTTP Request: GET http://testserver/ "HTTP/1.1 200 OK"
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:47 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:57:47.451294
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105747.json
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Dispatched form_processed event for hotel 123
2025-10-10 10:57:47 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 200 OK"
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:47 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:57:47.488525
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105747.json
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Dispatched form_processed event for hotel 123
2025-10-10 10:57:47 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 200 OK"
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:47 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:57:47.557385
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105747.json
2025-10-10 10:57:47 - alpine_bits_python.api - ERROR - Error in handle_wix_form: (sqlite3.IntegrityError) UNIQUE constraint failed: reservations.md5_unique_id
[SQL: INSERT INTO reservations (customer_id, unique_id, md5_unique_id, start_date, end_date, num_adults, num_children, children_ages, offer, created_at, utm_source, utm_medium, utm_campaign, utm_term, utm_content, user_comment, fbclid, gclid, hotel_code, hotel_name) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: (16, 'minimal-123', '2d316901028b3c2a906a20b8dcb57261', '2025-01-15', '2025-01-20', 2, 0, '', None, '2025-01-10 12:00:00.000000', None, None, None, None, None, '', None, None, '123', 'Frangart Inn')]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: reservations.md5_unique_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 471, in process_wix_form_submission
await db.commit()
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 1014, in commit
await greenlet_spawn(self.sync_session.commit)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 2032, in commit
trans.commit(_to_root=True)
~~~~~~~~~~~~^^^^^^^^^^^^^^^
File "<string>", line 2, in commit
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 1313, in commit
self._prepare_impl()
~~~~~~~~~~~~~~~~~~^^
File "<string>", line 2, in _prepare_impl
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 1288, in _prepare_impl
self.session.flush()
~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: reservations.md5_unique_id
[SQL: INSERT INTO reservations (customer_id, unique_id, md5_unique_id, start_date, end_date, num_adults, num_children, children_ages, offer, created_at, utm_source, utm_medium, utm_campaign, utm_term, utm_content, user_comment, fbclid, gclid, hotel_code, hotel_name) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: (16, 'minimal-123', '2d316901028b3c2a906a20b8dcb57261', '2025-01-15', '2025-01-20', 2, 0, '', None, '2025-01-10 12:00:00.000000', None, None, None, None, None, '', None, None, '123', 'Frangart Inn')]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:57:47 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: reservations.md5_unique_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 471, in process_wix_form_submission
await db.commit()
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 1014, in commit
await greenlet_spawn(self.sync_session.commit)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 2032, in commit
trans.commit(_to_root=True)
~~~~~~~~~~~~^^^^^^^^^^^^^^^
File "<string>", line 2, in commit
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 1313, in commit
self._prepare_impl()
~~~~~~~~~~~~~~~~~~^^
File "<string>", line 2, in _prepare_impl
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 1288, in _prepare_impl
self.session.flush()
~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: reservations.md5_unique_id
[SQL: INSERT INTO reservations (customer_id, unique_id, md5_unique_id, start_date, end_date, num_adults, num_children, children_ages, offer, created_at, utm_source, utm_medium, utm_campaign, utm_term, utm_content, user_comment, fbclid, gclid, hotel_code, hotel_name) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: (16, 'minimal-123', '2d316901028b3c2a906a20b8dcb57261', '2025-01-15', '2025-01-20', 2, 0, '', None, '2025-01-10 12:00:00.000000', None, None, None, None, None, '', None, None, '123', 'Frangart Inn')]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlite3.IntegrityError: UNIQUE constraint failed: reservations.md5_unique_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 471, in process_wix_form_submission
await db.commit()
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py", line 1014, in commit
await greenlet_spawn(self.sync_session.commit)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 2032, in commit
trans.commit(_to_root=True)
~~~~~~~~~~~~^^^^^^^^^^^^^^^
File "<string>", line 2, in commit
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 1313, in commit
self._prepare_impl()
~~~~~~~~~~~~~~~~~~^^
File "<string>", line 2, in _prepare_impl
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 1288, in _prepare_impl
self.session.flush()
~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4345, in flush
self._flush(objects)
~~~~~~~~~~~^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4480, in _flush
with util.safe_reraise():
~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4441, in _flush
flush_context.execute()
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
~~~~~~~~~~~^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self.mapper,
^^^^^^^^^^^^
uow.states_for_mapper_hierarchy(self.mapper, False, False),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uow,
^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
~~~~~~~~~~~~~~~~~~~~~~~^
base_mapper,
^^^^^^^^^^^^
...<3 lines>...
insert,
^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
result = connection.execute(
statement,
params,
execution_options=execution_options,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 526, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 177, in execute
self._adapt_connection._handle_exception(error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 337, in _handle_exception
raise error
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 159, in execute
self.await_(_cursor.execute(operation, parameters))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
value = await result
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 40, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/cursor.py", line 32, in _execute
return await self._conn._execute(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 122, in _execute
return await future
^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/.venv/lib/python3.13/site-packages/aiosqlite/core.py", line 105, in run
result = function()
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: reservations.md5_unique_id
[SQL: INSERT INTO reservations (customer_id, unique_id, md5_unique_id, start_date, end_date, num_adults, num_children, children_ages, offer, created_at, utm_source, utm_medium, utm_campaign, utm_term, utm_content, user_comment, fbclid, gclid, hotel_code, hotel_name) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: (16, 'minimal-123', '2d316901028b3c2a906a20b8dcb57261', '2025-01-15', '2025-01-20', 2, 0, '', None, '2025-01-10 12:00:00.000000', None, None, None, None, None, '', None, None, '123', 'Frangart Inn')]
(Background on this error at: https://sqlalche.me/e/20/gkpj)
2025-10-10 10:57:47 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:47 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:57:47.588411
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105747.json
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Dispatched form_processed event for hotel 123
2025-10-10 10:57:47 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form/test "HTTP/1.1 200 OK"
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:47 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:47 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:47 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:47 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:47 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:47 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:47 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:47 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:47 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:47 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:47 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:47 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/test_reservation.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:47 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:47 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/compressed.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:47 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:47 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/test.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:47 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:47 - httpx - INFO - HTTP Request: PUT http://testserver/etc/passwd "HTTP/1.1 404 Not Found"
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:47 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:47 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/empty.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:47 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:47 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/notxml.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:47 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:47 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:47 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:47 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:47 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:47 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:47 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:57:47.806604
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105747.json
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:47 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:47 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 422 Unprocessable Entity"
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:47 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Received Wix form data at 2025-10-10T10:57:47.995552
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Created file owner: uid:1000, gid:1000
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - File mode: 644
2025-10-10 10:57:47 - alpine_bits_python.api - INFO - Data logged to: logs/wix_test_data_20251010_105747.json
2025-10-10 10:57:47 - alpine_bits_python.api - ERROR - Error in handle_wix_form: list index out of range
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 367, in process_wix_form_submission
or data.get("submissions", [{}])[1].get("value")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range
2025-10-10 10:57:47 - alpine_bits_python.api - ERROR - Stack trace for handle_wix_form: Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 367, in process_wix_form_submission
or data.get("submissions", [{}])[1].get("value")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range
Traceback (most recent call last):
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 549, in handle_wix_form
return await process_wix_form_submission(request, data, db_session)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/divusjulius/repos/alpinebits_python/src/alpine_bits_python/api.py", line 367, in process_wix_form_submission
or data.get("submissions", [{}])[1].get("value")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range
2025-10-10 10:57:47 - httpx - INFO - HTTP Request: POST http://testserver/api/webhook/wix-form "HTTP/1.1 500 Internal Server Error"
2025-10-10 10:57:47 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:48 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:48 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:48 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:48 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:48 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:48 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:48 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:48 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:48 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:48 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:48 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:48 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:48 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:48 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:48 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:48 - httpx - INFO - HTTP Request: POST http://testserver/api/alpinebits/server-2024-10 "HTTP/1.1 401 Unauthorized"
2025-10-10 10:57:48 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:48 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:48 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:48 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:48 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:48 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:48 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:48 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:48 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:48 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:48 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:48 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:48 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:48 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:48 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:48 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:48 - httpx - INFO - HTTP Request: OPTIONS http://testserver/api/health "HTTP/1.1 400 Bad Request"
2025-10-10 10:57:48 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:48 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:48 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:48 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:48 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:57:48 - root - INFO - Logging configured at INFO level
2025-10-10 10:57:48 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:57:48 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:57:48 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:57:48 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:57:48 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:57:48 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:57:48 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:57:48 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:57:48 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:57:48 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:57:48 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:57:48 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:57:48 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:57:48 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:57:48 - httpx - INFO - HTTP Request: GET http://testserver/api/health "HTTP/1.1 200 OK"
2025-10-10 10:57:48 - sqlalchemy.pool.impl.AsyncAdaptedQueuePool - ERROR - The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(Thread-57, started daemon 139659759830592)>>, which will be dropped, as it cannot be safely terminated. Please ensure that SQLAlchemy pooled connections are returned to the pool explicitly, either by calling ``close()`` or by using appropriate context managers to manage their lifecycle.
2025-10-10 10:59:24 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:59:24 - root - INFO - Logging configured at INFO level
2025-10-10 10:59:24 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:59:24 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:59:24 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:59:24 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:59:24 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:59:24 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:59:24 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:59:24 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:59:24 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:59:24 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:59:24 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/test_reservation.xml "HTTP/1.1 401 Unauthorized"
2025-10-10 10:59:53 - root - INFO - Logging to file: alpinebits.log
2025-10-10 10:59:53 - root - INFO - Logging configured at INFO level
2025-10-10 10:59:53 - alpine_bits_python.api - INFO - Application startup initiated
2025-10-10 10:59:53 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-10 10:59:53 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-10 10:59:53 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-10 10:59:53 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-10 10:59:53 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-10 10:59:53 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-10 10:59:53 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-10 10:59:53 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-10 10:59:53 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-10 10:59:53 - httpx - INFO - HTTP Request: PUT http://testserver/api/hoteldata/conversions_import/test_reservation.xml "HTTP/1.1 401 Unauthorized"
2025-10-15 08:49:50 - root - INFO - Logging to file: alpinebits.log
2025-10-15 08:49:50 - root - INFO - Logging configured at INFO level
2025-10-15 08:49:52 - alpine_bits_python.email_service - INFO - Email service initialized: smtp.gmail.com:587
2025-10-15 08:49:52 - root - INFO - Logging to file: alpinebits.log
2025-10-15 08:49:52 - root - INFO - Logging configured at INFO level
2025-10-15 08:49:54 - alpine_bits_python.email_service - INFO - Email service initialized: smtp.gmail.com:587
2025-10-15 08:52:37 - root - INFO - Logging to file: alpinebits.log
2025-10-15 08:52:37 - root - INFO - Logging configured at INFO level
2025-10-15 08:52:54 - root - INFO - Logging to file: alpinebits.log
2025-10-15 08:52:54 - root - INFO - Logging configured at INFO level
2025-10-15 08:52:56 - alpine_bits_python.email_service - INFO - Email service initialized: smtp.titan.email:465
2025-10-15 08:52:56 - root - INFO - Logging to file: alpinebits.log
2025-10-15 08:52:56 - root - INFO - Logging configured at INFO level
2025-10-15 08:52:58 - alpine_bits_python.email_service - INFO - Email service initialized: smtp.titan.email:465
2025-10-16 16:15:42 - root - INFO - Logging to file: alpinebits.log
2025-10-16 16:15:42 - root - INFO - Logging configured at INFO level
2025-10-16 16:15:42 - alpine_bits_python.email_monitoring - INFO - DailyReportScheduler initialized: send_time=08:00, recipients=[]
2025-10-16 16:15:42 - root - INFO - Daily report scheduler configured for Pushover (primary worker)
2025-10-16 16:15:42 - alpine_bits_python.api - INFO - Application startup initiated (primary_worker=True)
2025-10-16 16:15:42 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_NOTIF_REPORT
2025-10-16 16:15:42 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_PING
2025-10-16 16:15:42 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_HOTEL_RES_NOTIF_GUEST_REQUESTS
2025-10-16 16:15:42 - alpine_bits_python.alpinebits_server - INFO - Initializing action instance for AlpineBitsActionName.OTA_READ
2025-10-16 16:15:42 - alpine_bits_python.api - INFO - Hotel 39054_001 has no push_endpoint configured
2025-10-16 16:15:42 - alpine_bits_python.api - INFO - Hotel 135 has no push_endpoint configured
2025-10-16 16:15:42 - alpine_bits_python.api - INFO - Hotel 39052_001 has no push_endpoint configured
2025-10-16 16:15:42 - alpine_bits_python.api - INFO - Hotel 39040_001 has no push_endpoint configured
2025-10-16 16:15:42 - alpine_bits_python.migrations - INFO - Starting database migrations...
2025-10-16 16:15:42 - alpine_bits_python.migrations - INFO - Running migration: add_room_types
2025-10-16 16:15:42 - alpine_bits_python.migrations - INFO - Adding column reservations.room_type_code (VARCHAR)
2025-10-16 16:15:42 - alpine_bits_python.migrations - INFO - Successfully added column reservations.room_type_code
2025-10-16 16:15:42 - alpine_bits_python.migrations - INFO - Adding column reservations.room_classification_code (VARCHAR)
2025-10-16 16:15:42 - alpine_bits_python.migrations - INFO - Successfully added column reservations.room_classification_code
2025-10-16 16:15:42 - alpine_bits_python.migrations - INFO - Adding column reservations.room_type (VARCHAR)
2025-10-16 16:15:42 - alpine_bits_python.migrations - INFO - Successfully added column reservations.room_type
2025-10-16 16:15:42 - alpine_bits_python.migrations - INFO - Migration add_room_types: Added 3 columns
2025-10-16 16:15:42 - alpine_bits_python.migrations - INFO - Database migrations completed successfully
2025-10-16 16:15:42 - alpine_bits_python.api - INFO - Database tables checked/created at startup.
2025-10-16 16:15:42 - alpine_bits_python.api - INFO - All existing customers already have hashed data
2025-10-16 16:15:42 - alpine_bits_python.email_monitoring - INFO - ReservationStatsCollector initialized with 4 hotels
2025-10-16 16:15:42 - alpine_bits_python.api - INFO - Stats collector initialized and hooked up to report scheduler
2025-10-16 16:15:42 - alpine_bits_python.api - INFO - Sending test daily report on startup (last 24 hours)
2025-10-16 16:15:42 - alpine_bits_python.email_monitoring - INFO - Collecting reservation stats from 2025-10-15 16:15:42 to 2025-10-16 16:15:42
2025-10-16 16:15:42 - alpine_bits_python.email_monitoring - INFO - Collected stats: 9 total reservations across 1 hotels
2025-10-16 16:15:42 - alpine_bits_python.email_service - WARNING - No recipients specified for email: AlpineBits Daily Report - 2025-10-16
2025-10-16 16:15:42 - alpine_bits_python.api - ERROR - Failed to send test daily report via email on startup
2025-10-16 16:15:42 - alpine_bits_python.pushover_service - INFO - Pushover notification sent successfully: AlpineBits Daily Report - 2025-10-16
2025-10-16 16:15:42 - alpine_bits_python.api - INFO - Test daily report sent via Pushover successfully on startup
2025-10-16 16:15:42 - alpine_bits_python.email_monitoring - INFO - Daily report scheduler started
2025-10-16 16:15:42 - alpine_bits_python.api - INFO - Daily report scheduler started
2025-10-16 16:15:42 - alpine_bits_python.api - INFO - Application startup complete
2025-10-16 16:15:42 - alpine_bits_python.email_monitoring - INFO - Next daily report scheduled for 2025-10-17 08:00:00 (in 15.7 hours)