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 >, 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 >, 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 >, 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 >, 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 >, 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 "", 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 "", 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 "", 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 "", 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 "", 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 "", 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 >, 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 "", 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 "", 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 "", 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 "", 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 "", 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 "", 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 >, 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 "", 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 "", 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 "", 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 "", 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 "", 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 "", 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 >, 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"