|
|
@@ -0,0 +1,798 @@
|
|
|
|
|
|
|
|
============================= test session starts ==============================
|
|
|
|
|
|
|
|
platform linux -- Python 3.13.5, pytest-8.4.2, pluggy-1.6.0 -- /workspace/gitea-atd/Ty_Tech/SlabUploader/backend/.venv/bin/python3
|
|
|
|
|
|
|
|
cachedir: .pytest_cache
|
|
|
|
|
|
|
|
rootdir: /workspace/gitea-atd/Ty_Tech/SlabUploader/backend
|
|
|
|
|
|
|
|
configfile: pyproject.toml
|
|
|
|
|
|
|
|
plugins: anyio-4.15.1, respx-0.23.1
|
|
|
|
|
|
|
|
collecting ... collected 39 items
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/contract/test_health.py::TestHealthEndpoint::test_returns_200 PASSED [ 2%]
|
|
|
|
|
|
|
|
tests/contract/test_health.py::TestHealthEndpoint::test_returns_ok_status PASSED [ 5%]
|
|
|
|
|
|
|
|
tests/contract/test_health.py::TestHealthEndpoint::test_woo_reachable_false_when_credentials_not_configured PASSED [ 7%]
|
|
|
|
|
|
|
|
tests/contract/test_health.py::TestHealthEndpoint::test_response_shape PASSED [ 10%]
|
|
|
|
|
|
|
|
tests/contract/test_health.py::TestHealthEndpoint::test_with_test_client_lifespan PASSED [ 12%]
|
|
|
|
|
|
|
|
tests/contract/test_slabs.py::TestCreateSlab::test_returns_201 FAILED [ 15%]
|
|
|
|
|
|
|
|
tests/contract/test_slabs.py::TestCreateSlab::test_returns_status_calibrated FAILED [ 17%]
|
|
|
|
|
|
|
|
tests/contract/test_slabs.py::TestCreateSlab::test_returns_server_rev FAILED [ 20%]
|
|
|
|
|
|
|
|
tests/contract/test_slabs.py::TestCreateSlab::test_response_shape FAILED [ 23%]
|
|
|
|
|
|
|
|
tests/contract/test_slabs.py::TestCreateSlab::test_multiple_photos FAILED [ 25%]
|
|
|
|
|
|
|
|
tests/contract/test_slabs.py::TestCreateSlab::test_missing_data_field_returns_400 FAILED [ 28%]
|
|
|
|
|
|
|
|
tests/contract/test_slabs.py::TestCreateSlab::test_duplicate_sku_returns_409 FAILED [ 30%]
|
|
|
|
|
|
|
|
tests/contract/test_slabs.py::TestCreateSlab::test_with_test_client_lifespan FAILED [ 33%]
|
|
|
|
|
|
|
|
tests/contract/test_woo_base_url.py::TestWooBaseUrlValidation::test_refuses_http_url PASSED [ 35%]
|
|
|
|
|
|
|
|
tests/contract/test_woo_base_url.py::TestWooBaseUrlValidation::test_refuses_missing_url PASSED [ 38%]
|
|
|
|
|
|
|
|
tests/contract/test_woo_base_url.py::TestWooBaseUrlValidation::test_accepts_https_url PASSED [ 41%]
|
|
|
|
|
|
|
|
tests/contract/test_woo_base_url.py::TestWooBaseUrlReadOnly::test_get_settings_returns_woo_base_url PASSED [ 43%]
|
|
|
|
|
|
|
|
tests/contract/test_woo_base_url.py::TestWooBaseUrlReadOnly::test_put_settings_rejects_woo_base_url PASSED [ 46%]
|
|
|
|
|
|
|
|
tests/contract/test_woo_base_url.py::TestWooBaseUrlReadOnly::test_put_settings_allows_other_fields PASSED [ 48%]
|
|
|
|
|
|
|
|
tests/contract/test_woo_base_url.py::TestWooBaseUrlReadOnly::test_get_settings_never_returns_app_password PASSED [ 51%]
|
|
|
|
|
|
|
|
tests/contract/test_woo_base_url.py::TestWooBaseUrlReadOnly::test_put_settings_rejects_consumer_keys PASSED [ 53%]
|
|
|
|
|
|
|
|
tests/unit/test_aes.py::TestAESRoundTrip::test_roundtrip_username PASSED [ 56%]
|
|
|
|
|
|
|
|
tests/unit/test_aes.py::TestAESRoundTrip::test_roundtrip_password PASSED [ 58%]
|
|
|
|
|
|
|
|
tests/unit/test_aes.py::TestAESRoundTrip::test_roundtrip_empty_string PASSED [ 61%]
|
|
|
|
|
|
|
|
tests/unit/test_aes.py::TestAESRoundTrip::test_roundtrip_unicode PASSED [ 64%]
|
|
|
|
|
|
|
|
tests/unit/test_aes.py::TestAESRoundTrip::test_roundtrip_special_chars PASSED [ 66%]
|
|
|
|
|
|
|
|
tests/unit/test_aes.py::TestAESRoundTrip::test_ciphertext_is_bytes PASSED [ 69%]
|
|
|
|
|
|
|
|
tests/unit/test_aes.py::TestAESRoundTrip::test_ciphertext_starts_with_nonce PASSED [ 71%]
|
|
|
|
|
|
|
|
tests/unit/test_aes.py::TestAESRoundTrip::test_ciphertext_different_from_plaintext PASSED [ 74%]
|
|
|
|
|
|
|
|
tests/unit/test_aes.py::TestAESRoundTrip::test_ciphertext_changes_each_call PASSED [ 76%]
|
|
|
|
|
|
|
|
tests/unit/test_aes.py::TestFreshNonce::test_nonce_differs_across_encryptions PASSED [ 79%]
|
|
|
|
|
|
|
|
tests/unit/test_aes.py::TestFreshNonce::test_multiple_encryptions_all_unique_nonces PASSED [ 82%]
|
|
|
|
|
|
|
|
tests/unit/test_aes.py::TestTamperedCiphertext::test_tampered_body_raises_authentication_error PASSED [ 84%]
|
|
|
|
|
|
|
|
tests/unit/test_aes.py::TestTamperedCiphertext::test_truncated_ciphertext_raises_error PASSED [ 87%]
|
|
|
|
|
|
|
|
tests/unit/test_aes.py::TestTamperedCiphertext::test_wrong_key_raises_error PASSED [ 89%]
|
|
|
|
|
|
|
|
tests/unit/test_aes.py::TestMissingKey::test_missing_key_refuses_startup PASSED [ 92%]
|
|
|
|
|
|
|
|
tests/unit/test_aes.py::TestMissingKey::test_too_short_key_refuses_startup PASSED [ 94%]
|
|
|
|
|
|
|
|
tests/unit/test_aes.py::TestMissingKey::test_get_aes_key_returns_bytes PASSED [ 97%]
|
|
|
|
|
|
|
|
tests/unit/test_aes.py::TestNoPlaintextFallback::test_decrypt_returns_decrypted_value PASSED [100%]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
=================================== FAILURES ===================================
|
|
|
|
|
|
|
|
_______________________ TestCreateSlab.test_returns_201 ________________________
|
|
|
|
|
|
|
|
tests/contract/test_slabs.py:65: in test_returns_201
|
|
|
|
|
|
|
|
response = client.post(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:556: in post
|
|
|
|
|
|
|
|
return super().post(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:1144: in post
|
|
|
|
|
|
|
|
return self.request(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:455: in request
|
|
|
|
|
|
|
|
return super().request(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:825: in request
|
|
|
|
|
|
|
|
return self.send(request, auth=auth, follow_redirects=follow_redirects)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:914: in send
|
|
|
|
|
|
|
|
response = self._send_handling_auth(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:942: in _send_handling_auth
|
|
|
|
|
|
|
|
response = self._send_handling_redirects(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:979: in _send_handling_redirects
|
|
|
|
|
|
|
|
response = self._send_single_request(request)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:1014: in _send_single_request
|
|
|
|
|
|
|
|
response = transport.handle_request(request)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:354: in handle_request
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:351: in handle_request
|
|
|
|
|
|
|
|
portal.call(self.app, scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/anyio/from_thread.py:340: in call
|
|
|
|
|
|
|
|
return cast(T_Retval, self.start_task_soon(func, *args).result())
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
/usr/lib/python3.13/concurrent/futures/_base.py:456: in result
|
|
|
|
|
|
|
|
return self.__get_result()
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
/usr/lib/python3.13/concurrent/futures/_base.py:401: in __get_result
|
|
|
|
|
|
|
|
raise self._exception
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/anyio/from_thread.py:265: in _call_func
|
|
|
|
|
|
|
|
retval = await retval_or_awaitable
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/applications.py:1163: in __call__
|
|
|
|
|
|
|
|
await super().__call__(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/applications.py:96: in __call__
|
|
|
|
|
|
|
|
await self.middleware_stack(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/middleware/errors.py:186: in __call__
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/middleware/errors.py:164: in __call__
|
|
|
|
|
|
|
|
await self.app(scope, receive, _send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/middleware/exceptions.py:63: in __call__
|
|
|
|
|
|
|
|
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:53: in wrapped_app
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:42: in wrapped_app
|
|
|
|
|
|
|
|
await app(scope, receive, sender)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/middleware/asyncexitstack.py:18: in __call__
|
|
|
|
|
|
|
|
await self.app(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/routing.py:670: in __call__
|
|
|
|
|
|
|
|
await self.middleware_stack(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:2734: in app
|
|
|
|
|
|
|
|
await route.handle(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:1780: in handle
|
|
|
|
|
|
|
|
await self.original_router.handle(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:2789: in handle
|
|
|
|
|
|
|
|
await included_router._handle_selected(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:1800: in _handle_selected
|
|
|
|
|
|
|
|
await original_route.handle(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:1279: in handle
|
|
|
|
|
|
|
|
await app(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:158: in app
|
|
|
|
|
|
|
|
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:53: in wrapped_app
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:42: in wrapped_app
|
|
|
|
|
|
|
|
await app(scope, receive, sender)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:144: in app
|
|
|
|
|
|
|
|
response = await f(request)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:706: in app
|
|
|
|
|
|
|
|
raw_response = await run_endpoint_function(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:352: in run_endpoint_function
|
|
|
|
|
|
|
|
return await dependant.call(**values)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
app/api/slabs.py:263: in create_slab
|
|
|
|
|
|
|
|
form = await request.form()
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/requests.py:276: in _get_form
|
|
|
|
|
|
|
|
assert parse_options_header is not None, (
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
E AssertionError: The `python-multipart` library must be installed to use form parsing.
|
|
|
|
|
|
|
|
------------------------------ Captured log call -------------------------------
|
|
|
|
|
|
|
|
INFO root:main.py:24 SlabUploader starting up
|
|
|
|
|
|
|
|
INFO app.db.engine:engine.py:49 Connecting to sqlite+aiosqlite:///:memory:
|
|
|
|
|
|
|
|
INFO app.db.engine:engine.py:69 Database initialized
|
|
|
|
|
|
|
|
INFO root:main.py:27 SlabUploader shutting down
|
|
|
|
|
|
|
|
________________ TestCreateSlab.test_returns_status_calibrated _________________
|
|
|
|
|
|
|
|
tests/contract/test_slabs.py:122: in test_returns_status_calibrated
|
|
|
|
|
|
|
|
response = client.post(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:556: in post
|
|
|
|
|
|
|
|
return super().post(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:1144: in post
|
|
|
|
|
|
|
|
return self.request(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:455: in request
|
|
|
|
|
|
|
|
return super().request(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:825: in request
|
|
|
|
|
|
|
|
return self.send(request, auth=auth, follow_redirects=follow_redirects)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:914: in send
|
|
|
|
|
|
|
|
response = self._send_handling_auth(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:942: in _send_handling_auth
|
|
|
|
|
|
|
|
response = self._send_handling_redirects(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:979: in _send_handling_redirects
|
|
|
|
|
|
|
|
response = self._send_single_request(request)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:1014: in _send_single_request
|
|
|
|
|
|
|
|
response = transport.handle_request(request)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:354: in handle_request
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:351: in handle_request
|
|
|
|
|
|
|
|
portal.call(self.app, scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/anyio/from_thread.py:340: in call
|
|
|
|
|
|
|
|
return cast(T_Retval, self.start_task_soon(func, *args).result())
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
/usr/lib/python3.13/concurrent/futures/_base.py:456: in result
|
|
|
|
|
|
|
|
return self.__get_result()
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
/usr/lib/python3.13/concurrent/futures/_base.py:401: in __get_result
|
|
|
|
|
|
|
|
raise self._exception
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/anyio/from_thread.py:265: in _call_func
|
|
|
|
|
|
|
|
retval = await retval_or_awaitable
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/applications.py:1163: in __call__
|
|
|
|
|
|
|
|
await super().__call__(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/applications.py:96: in __call__
|
|
|
|
|
|
|
|
await self.middleware_stack(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/middleware/errors.py:186: in __call__
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/middleware/errors.py:164: in __call__
|
|
|
|
|
|
|
|
await self.app(scope, receive, _send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/middleware/exceptions.py:63: in __call__
|
|
|
|
|
|
|
|
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:53: in wrapped_app
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:42: in wrapped_app
|
|
|
|
|
|
|
|
await app(scope, receive, sender)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/middleware/asyncexitstack.py:18: in __call__
|
|
|
|
|
|
|
|
await self.app(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/routing.py:670: in __call__
|
|
|
|
|
|
|
|
await self.middleware_stack(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:2734: in app
|
|
|
|
|
|
|
|
await route.handle(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:1780: in handle
|
|
|
|
|
|
|
|
await self.original_router.handle(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:2789: in handle
|
|
|
|
|
|
|
|
await included_router._handle_selected(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:1800: in _handle_selected
|
|
|
|
|
|
|
|
await original_route.handle(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:1279: in handle
|
|
|
|
|
|
|
|
await app(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:158: in app
|
|
|
|
|
|
|
|
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:53: in wrapped_app
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:42: in wrapped_app
|
|
|
|
|
|
|
|
await app(scope, receive, sender)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:144: in app
|
|
|
|
|
|
|
|
response = await f(request)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:706: in app
|
|
|
|
|
|
|
|
raw_response = await run_endpoint_function(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:352: in run_endpoint_function
|
|
|
|
|
|
|
|
return await dependant.call(**values)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
app/api/slabs.py:263: in create_slab
|
|
|
|
|
|
|
|
form = await request.form()
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/requests.py:276: in _get_form
|
|
|
|
|
|
|
|
assert parse_options_header is not None, (
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
E AssertionError: The `python-multipart` library must be installed to use form parsing.
|
|
|
|
|
|
|
|
------------------------------ Captured log call -------------------------------
|
|
|
|
|
|
|
|
INFO root:main.py:24 SlabUploader starting up
|
|
|
|
|
|
|
|
INFO app.db.engine:engine.py:49 Connecting to sqlite+aiosqlite:///:memory:
|
|
|
|
|
|
|
|
INFO app.db.engine:engine.py:69 Database initialized
|
|
|
|
|
|
|
|
INFO root:main.py:27 SlabUploader shutting down
|
|
|
|
|
|
|
|
____________________ TestCreateSlab.test_returns_server_rev ____________________
|
|
|
|
|
|
|
|
tests/contract/test_slabs.py:181: in test_returns_server_rev
|
|
|
|
|
|
|
|
response = client.post(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:556: in post
|
|
|
|
|
|
|
|
return super().post(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:1144: in post
|
|
|
|
|
|
|
|
return self.request(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:455: in request
|
|
|
|
|
|
|
|
return super().request(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:825: in request
|
|
|
|
|
|
|
|
return self.send(request, auth=auth, follow_redirects=follow_redirects)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:914: in send
|
|
|
|
|
|
|
|
response = self._send_handling_auth(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:942: in _send_handling_auth
|
|
|
|
|
|
|
|
response = self._send_handling_redirects(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:979: in _send_handling_redirects
|
|
|
|
|
|
|
|
response = self._send_single_request(request)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:1014: in _send_single_request
|
|
|
|
|
|
|
|
response = transport.handle_request(request)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:354: in handle_request
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:351: in handle_request
|
|
|
|
|
|
|
|
portal.call(self.app, scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/anyio/from_thread.py:340: in call
|
|
|
|
|
|
|
|
return cast(T_Retval, self.start_task_soon(func, *args).result())
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
/usr/lib/python3.13/concurrent/futures/_base.py:456: in result
|
|
|
|
|
|
|
|
return self.__get_result()
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
/usr/lib/python3.13/concurrent/futures/_base.py:401: in __get_result
|
|
|
|
|
|
|
|
raise self._exception
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/anyio/from_thread.py:265: in _call_func
|
|
|
|
|
|
|
|
retval = await retval_or_awaitable
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/applications.py:1163: in __call__
|
|
|
|
|
|
|
|
await super().__call__(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/applications.py:96: in __call__
|
|
|
|
|
|
|
|
await self.middleware_stack(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/middleware/errors.py:186: in __call__
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/middleware/errors.py:164: in __call__
|
|
|
|
|
|
|
|
await self.app(scope, receive, _send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/middleware/exceptions.py:63: in __call__
|
|
|
|
|
|
|
|
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:53: in wrapped_app
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:42: in wrapped_app
|
|
|
|
|
|
|
|
await app(scope, receive, sender)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/middleware/asyncexitstack.py:18: in __call__
|
|
|
|
|
|
|
|
await self.app(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/routing.py:670: in __call__
|
|
|
|
|
|
|
|
await self.middleware_stack(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:2734: in app
|
|
|
|
|
|
|
|
await route.handle(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:1780: in handle
|
|
|
|
|
|
|
|
await self.original_router.handle(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:2789: in handle
|
|
|
|
|
|
|
|
await included_router._handle_selected(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:1800: in _handle_selected
|
|
|
|
|
|
|
|
await original_route.handle(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:1279: in handle
|
|
|
|
|
|
|
|
await app(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:158: in app
|
|
|
|
|
|
|
|
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:53: in wrapped_app
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:42: in wrapped_app
|
|
|
|
|
|
|
|
await app(scope, receive, sender)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:144: in app
|
|
|
|
|
|
|
|
response = await f(request)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:706: in app
|
|
|
|
|
|
|
|
raw_response = await run_endpoint_function(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:352: in run_endpoint_function
|
|
|
|
|
|
|
|
return await dependant.call(**values)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
app/api/slabs.py:263: in create_slab
|
|
|
|
|
|
|
|
form = await request.form()
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/requests.py:276: in _get_form
|
|
|
|
|
|
|
|
assert parse_options_header is not None, (
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
E AssertionError: The `python-multipart` library must be installed to use form parsing.
|
|
|
|
|
|
|
|
------------------------------ Captured log call -------------------------------
|
|
|
|
|
|
|
|
INFO root:main.py:24 SlabUploader starting up
|
|
|
|
|
|
|
|
INFO app.db.engine:engine.py:49 Connecting to sqlite+aiosqlite:///:memory:
|
|
|
|
|
|
|
|
INFO app.db.engine:engine.py:69 Database initialized
|
|
|
|
|
|
|
|
INFO root:main.py:27 SlabUploader shutting down
|
|
|
|
|
|
|
|
______________________ TestCreateSlab.test_response_shape ______________________
|
|
|
|
|
|
|
|
tests/contract/test_slabs.py:241: in test_response_shape
|
|
|
|
|
|
|
|
response = client.post(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:556: in post
|
|
|
|
|
|
|
|
return super().post(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:1144: in post
|
|
|
|
|
|
|
|
return self.request(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:455: in request
|
|
|
|
|
|
|
|
return super().request(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:825: in request
|
|
|
|
|
|
|
|
return self.send(request, auth=auth, follow_redirects=follow_redirects)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:914: in send
|
|
|
|
|
|
|
|
response = self._send_handling_auth(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:942: in _send_handling_auth
|
|
|
|
|
|
|
|
response = self._send_handling_redirects(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:979: in _send_handling_redirects
|
|
|
|
|
|
|
|
response = self._send_single_request(request)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:1014: in _send_single_request
|
|
|
|
|
|
|
|
response = transport.handle_request(request)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:354: in handle_request
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:351: in handle_request
|
|
|
|
|
|
|
|
portal.call(self.app, scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/anyio/from_thread.py:340: in call
|
|
|
|
|
|
|
|
return cast(T_Retval, self.start_task_soon(func, *args).result())
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
/usr/lib/python3.13/concurrent/futures/_base.py:456: in result
|
|
|
|
|
|
|
|
return self.__get_result()
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
/usr/lib/python3.13/concurrent/futures/_base.py:401: in __get_result
|
|
|
|
|
|
|
|
raise self._exception
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/anyio/from_thread.py:265: in _call_func
|
|
|
|
|
|
|
|
retval = await retval_or_awaitable
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/applications.py:1163: in __call__
|
|
|
|
|
|
|
|
await super().__call__(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/applications.py:96: in __call__
|
|
|
|
|
|
|
|
await self.middleware_stack(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/middleware/errors.py:186: in __call__
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/middleware/errors.py:164: in __call__
|
|
|
|
|
|
|
|
await self.app(scope, receive, _send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/middleware/exceptions.py:63: in __call__
|
|
|
|
|
|
|
|
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:53: in wrapped_app
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:42: in wrapped_app
|
|
|
|
|
|
|
|
await app(scope, receive, sender)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/middleware/asyncexitstack.py:18: in __call__
|
|
|
|
|
|
|
|
await self.app(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/routing.py:670: in __call__
|
|
|
|
|
|
|
|
await self.middleware_stack(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:2734: in app
|
|
|
|
|
|
|
|
await route.handle(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:1780: in handle
|
|
|
|
|
|
|
|
await self.original_router.handle(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:2789: in handle
|
|
|
|
|
|
|
|
await included_router._handle_selected(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:1800: in _handle_selected
|
|
|
|
|
|
|
|
await original_route.handle(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:1279: in handle
|
|
|
|
|
|
|
|
await app(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:158: in app
|
|
|
|
|
|
|
|
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:53: in wrapped_app
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:42: in wrapped_app
|
|
|
|
|
|
|
|
await app(scope, receive, sender)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:144: in app
|
|
|
|
|
|
|
|
response = await f(request)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:706: in app
|
|
|
|
|
|
|
|
raw_response = await run_endpoint_function(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:352: in run_endpoint_function
|
|
|
|
|
|
|
|
return await dependant.call(**values)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
app/api/slabs.py:263: in create_slab
|
|
|
|
|
|
|
|
form = await request.form()
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/requests.py:276: in _get_form
|
|
|
|
|
|
|
|
assert parse_options_header is not None, (
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
E AssertionError: The `python-multipart` library must be installed to use form parsing.
|
|
|
|
|
|
|
|
------------------------------ Captured log call -------------------------------
|
|
|
|
|
|
|
|
INFO root:main.py:24 SlabUploader starting up
|
|
|
|
|
|
|
|
INFO app.db.engine:engine.py:49 Connecting to sqlite+aiosqlite:///:memory:
|
|
|
|
|
|
|
|
INFO app.db.engine:engine.py:69 Database initialized
|
|
|
|
|
|
|
|
INFO root:main.py:27 SlabUploader shutting down
|
|
|
|
|
|
|
|
_____________________ TestCreateSlab.test_multiple_photos ______________________
|
|
|
|
|
|
|
|
tests/contract/test_slabs.py:335: in test_multiple_photos
|
|
|
|
|
|
|
|
response = client.post(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:556: in post
|
|
|
|
|
|
|
|
return super().post(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:1144: in post
|
|
|
|
|
|
|
|
return self.request(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:455: in request
|
|
|
|
|
|
|
|
return super().request(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:825: in request
|
|
|
|
|
|
|
|
return self.send(request, auth=auth, follow_redirects=follow_redirects)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:914: in send
|
|
|
|
|
|
|
|
response = self._send_handling_auth(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:942: in _send_handling_auth
|
|
|
|
|
|
|
|
response = self._send_handling_redirects(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:979: in _send_handling_redirects
|
|
|
|
|
|
|
|
response = self._send_single_request(request)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:1014: in _send_single_request
|
|
|
|
|
|
|
|
response = transport.handle_request(request)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:354: in handle_request
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:351: in handle_request
|
|
|
|
|
|
|
|
portal.call(self.app, scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/anyio/from_thread.py:340: in call
|
|
|
|
|
|
|
|
return cast(T_Retval, self.start_task_soon(func, *args).result())
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
/usr/lib/python3.13/concurrent/futures/_base.py:449: in result
|
|
|
|
|
|
|
|
return self.__get_result()
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
/usr/lib/python3.13/concurrent/futures/_base.py:401: in __get_result
|
|
|
|
|
|
|
|
raise self._exception
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/anyio/from_thread.py:265: in _call_func
|
|
|
|
|
|
|
|
retval = await retval_or_awaitable
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/applications.py:1163: in __call__
|
|
|
|
|
|
|
|
await super().__call__(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/applications.py:96: in __call__
|
|
|
|
|
|
|
|
await self.middleware_stack(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/middleware/errors.py:186: in __call__
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/middleware/errors.py:164: in __call__
|
|
|
|
|
|
|
|
await self.app(scope, receive, _send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/middleware/exceptions.py:63: in __call__
|
|
|
|
|
|
|
|
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:53: in wrapped_app
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:42: in wrapped_app
|
|
|
|
|
|
|
|
await app(scope, receive, sender)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/middleware/asyncexitstack.py:18: in __call__
|
|
|
|
|
|
|
|
await self.app(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/routing.py:670: in __call__
|
|
|
|
|
|
|
|
await self.middleware_stack(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:2734: in app
|
|
|
|
|
|
|
|
await route.handle(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:1780: in handle
|
|
|
|
|
|
|
|
await self.original_router.handle(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:2789: in handle
|
|
|
|
|
|
|
|
await included_router._handle_selected(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:1800: in _handle_selected
|
|
|
|
|
|
|
|
await original_route.handle(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:1279: in handle
|
|
|
|
|
|
|
|
await app(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:158: in app
|
|
|
|
|
|
|
|
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:53: in wrapped_app
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:42: in wrapped_app
|
|
|
|
|
|
|
|
await app(scope, receive, sender)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:144: in app
|
|
|
|
|
|
|
|
response = await f(request)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:706: in app
|
|
|
|
|
|
|
|
raw_response = await run_endpoint_function(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:352: in run_endpoint_function
|
|
|
|
|
|
|
|
return await dependant.call(**values)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
app/api/slabs.py:263: in create_slab
|
|
|
|
|
|
|
|
form = await request.form()
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/requests.py:276: in _get_form
|
|
|
|
|
|
|
|
assert parse_options_header is not None, (
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
E AssertionError: The `python-multipart` library must be installed to use form parsing.
|
|
|
|
|
|
|
|
------------------------------ Captured log call -------------------------------
|
|
|
|
|
|
|
|
INFO root:main.py:24 SlabUploader starting up
|
|
|
|
|
|
|
|
INFO app.db.engine:engine.py:49 Connecting to sqlite+aiosqlite:///:memory:
|
|
|
|
|
|
|
|
INFO app.db.engine:engine.py:69 Database initialized
|
|
|
|
|
|
|
|
INFO root:main.py:27 SlabUploader shutting down
|
|
|
|
|
|
|
|
______________ TestCreateSlab.test_missing_data_field_returns_400 ______________
|
|
|
|
|
|
|
|
tests/contract/test_slabs.py:367: in test_missing_data_field_returns_400
|
|
|
|
|
|
|
|
response = client.post(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:556: in post
|
|
|
|
|
|
|
|
return super().post(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:1144: in post
|
|
|
|
|
|
|
|
return self.request(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:455: in request
|
|
|
|
|
|
|
|
return super().request(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:825: in request
|
|
|
|
|
|
|
|
return self.send(request, auth=auth, follow_redirects=follow_redirects)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:914: in send
|
|
|
|
|
|
|
|
response = self._send_handling_auth(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:942: in _send_handling_auth
|
|
|
|
|
|
|
|
response = self._send_handling_redirects(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:979: in _send_handling_redirects
|
|
|
|
|
|
|
|
response = self._send_single_request(request)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:1014: in _send_single_request
|
|
|
|
|
|
|
|
response = transport.handle_request(request)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:354: in handle_request
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:351: in handle_request
|
|
|
|
|
|
|
|
portal.call(self.app, scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/anyio/from_thread.py:340: in call
|
|
|
|
|
|
|
|
return cast(T_Retval, self.start_task_soon(func, *args).result())
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
/usr/lib/python3.13/concurrent/futures/_base.py:456: in result
|
|
|
|
|
|
|
|
return self.__get_result()
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
/usr/lib/python3.13/concurrent/futures/_base.py:401: in __get_result
|
|
|
|
|
|
|
|
raise self._exception
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/anyio/from_thread.py:265: in _call_func
|
|
|
|
|
|
|
|
retval = await retval_or_awaitable
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/applications.py:1163: in __call__
|
|
|
|
|
|
|
|
await super().__call__(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/applications.py:96: in __call__
|
|
|
|
|
|
|
|
await self.middleware_stack(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/middleware/errors.py:186: in __call__
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/middleware/errors.py:164: in __call__
|
|
|
|
|
|
|
|
await self.app(scope, receive, _send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/middleware/exceptions.py:63: in __call__
|
|
|
|
|
|
|
|
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:53: in wrapped_app
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:42: in wrapped_app
|
|
|
|
|
|
|
|
await app(scope, receive, sender)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/middleware/asyncexitstack.py:18: in __call__
|
|
|
|
|
|
|
|
await self.app(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/routing.py:670: in __call__
|
|
|
|
|
|
|
|
await self.middleware_stack(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:2734: in app
|
|
|
|
|
|
|
|
await route.handle(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:1780: in handle
|
|
|
|
|
|
|
|
await self.original_router.handle(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:2789: in handle
|
|
|
|
|
|
|
|
await included_router._handle_selected(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:1800: in _handle_selected
|
|
|
|
|
|
|
|
await original_route.handle(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:1279: in handle
|
|
|
|
|
|
|
|
await app(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:158: in app
|
|
|
|
|
|
|
|
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:53: in wrapped_app
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:42: in wrapped_app
|
|
|
|
|
|
|
|
await app(scope, receive, sender)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:144: in app
|
|
|
|
|
|
|
|
response = await f(request)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:706: in app
|
|
|
|
|
|
|
|
raw_response = await run_endpoint_function(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:352: in run_endpoint_function
|
|
|
|
|
|
|
|
return await dependant.call(**values)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
app/api/slabs.py:263: in create_slab
|
|
|
|
|
|
|
|
form = await request.form()
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/requests.py:276: in _get_form
|
|
|
|
|
|
|
|
assert parse_options_header is not None, (
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
E AssertionError: The `python-multipart` library must be installed to use form parsing.
|
|
|
|
|
|
|
|
------------------------------ Captured log call -------------------------------
|
|
|
|
|
|
|
|
INFO root:main.py:24 SlabUploader starting up
|
|
|
|
|
|
|
|
INFO app.db.engine:engine.py:49 Connecting to sqlite+aiosqlite:///:memory:
|
|
|
|
|
|
|
|
INFO app.db.engine:engine.py:69 Database initialized
|
|
|
|
|
|
|
|
INFO root:main.py:27 SlabUploader shutting down
|
|
|
|
|
|
|
|
________________ TestCreateSlab.test_duplicate_sku_returns_409 _________________
|
|
|
|
|
|
|
|
tests/contract/test_slabs.py:427: in test_duplicate_sku_returns_409
|
|
|
|
|
|
|
|
response1 = client.post(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:556: in post
|
|
|
|
|
|
|
|
return super().post(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:1144: in post
|
|
|
|
|
|
|
|
return self.request(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:455: in request
|
|
|
|
|
|
|
|
return super().request(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:825: in request
|
|
|
|
|
|
|
|
return self.send(request, auth=auth, follow_redirects=follow_redirects)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:914: in send
|
|
|
|
|
|
|
|
response = self._send_handling_auth(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:942: in _send_handling_auth
|
|
|
|
|
|
|
|
response = self._send_handling_redirects(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:979: in _send_handling_redirects
|
|
|
|
|
|
|
|
response = self._send_single_request(request)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:1014: in _send_single_request
|
|
|
|
|
|
|
|
response = transport.handle_request(request)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:354: in handle_request
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:351: in handle_request
|
|
|
|
|
|
|
|
portal.call(self.app, scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/anyio/from_thread.py:340: in call
|
|
|
|
|
|
|
|
return cast(T_Retval, self.start_task_soon(func, *args).result())
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
/usr/lib/python3.13/concurrent/futures/_base.py:456: in result
|
|
|
|
|
|
|
|
return self.__get_result()
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
/usr/lib/python3.13/concurrent/futures/_base.py:401: in __get_result
|
|
|
|
|
|
|
|
raise self._exception
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/anyio/from_thread.py:265: in _call_func
|
|
|
|
|
|
|
|
retval = await retval_or_awaitable
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/applications.py:1163: in __call__
|
|
|
|
|
|
|
|
await super().__call__(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/applications.py:96: in __call__
|
|
|
|
|
|
|
|
await self.middleware_stack(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/middleware/errors.py:186: in __call__
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/middleware/errors.py:164: in __call__
|
|
|
|
|
|
|
|
await self.app(scope, receive, _send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/middleware/exceptions.py:63: in __call__
|
|
|
|
|
|
|
|
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:53: in wrapped_app
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:42: in wrapped_app
|
|
|
|
|
|
|
|
await app(scope, receive, sender)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/middleware/asyncexitstack.py:18: in __call__
|
|
|
|
|
|
|
|
await self.app(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/routing.py:670: in __call__
|
|
|
|
|
|
|
|
await self.middleware_stack(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:2734: in app
|
|
|
|
|
|
|
|
await route.handle(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:1780: in handle
|
|
|
|
|
|
|
|
await self.original_router.handle(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:2789: in handle
|
|
|
|
|
|
|
|
await included_router._handle_selected(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:1800: in _handle_selected
|
|
|
|
|
|
|
|
await original_route.handle(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:1279: in handle
|
|
|
|
|
|
|
|
await app(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:158: in app
|
|
|
|
|
|
|
|
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:53: in wrapped_app
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:42: in wrapped_app
|
|
|
|
|
|
|
|
await app(scope, receive, sender)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:144: in app
|
|
|
|
|
|
|
|
response = await f(request)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:706: in app
|
|
|
|
|
|
|
|
raw_response = await run_endpoint_function(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:352: in run_endpoint_function
|
|
|
|
|
|
|
|
return await dependant.call(**values)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
app/api/slabs.py:263: in create_slab
|
|
|
|
|
|
|
|
form = await request.form()
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/requests.py:276: in _get_form
|
|
|
|
|
|
|
|
assert parse_options_header is not None, (
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
E AssertionError: The `python-multipart` library must be installed to use form parsing.
|
|
|
|
|
|
|
|
------------------------------ Captured log call -------------------------------
|
|
|
|
|
|
|
|
INFO root:main.py:24 SlabUploader starting up
|
|
|
|
|
|
|
|
INFO app.db.engine:engine.py:49 Connecting to sqlite+aiosqlite:///:memory:
|
|
|
|
|
|
|
|
INFO app.db.engine:engine.py:69 Database initialized
|
|
|
|
|
|
|
|
INFO root:main.py:27 SlabUploader shutting down
|
|
|
|
|
|
|
|
________________ TestCreateSlab.test_with_test_client_lifespan _________________
|
|
|
|
|
|
|
|
tests/contract/test_slabs.py:503: in test_with_test_client_lifespan
|
|
|
|
|
|
|
|
response = client.post(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:556: in post
|
|
|
|
|
|
|
|
return super().post(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:1144: in post
|
|
|
|
|
|
|
|
return self.request(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:455: in request
|
|
|
|
|
|
|
|
return super().request(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:825: in request
|
|
|
|
|
|
|
|
return self.send(request, auth=auth, follow_redirects=follow_redirects)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:914: in send
|
|
|
|
|
|
|
|
response = self._send_handling_auth(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:942: in _send_handling_auth
|
|
|
|
|
|
|
|
response = self._send_handling_redirects(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:979: in _send_handling_redirects
|
|
|
|
|
|
|
|
response = self._send_single_request(request)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/httpx/_client.py:1014: in _send_single_request
|
|
|
|
|
|
|
|
response = transport.handle_request(request)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:354: in handle_request
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:351: in handle_request
|
|
|
|
|
|
|
|
portal.call(self.app, scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/anyio/from_thread.py:340: in call
|
|
|
|
|
|
|
|
return cast(T_Retval, self.start_task_soon(func, *args).result())
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
/usr/lib/python3.13/concurrent/futures/_base.py:449: in result
|
|
|
|
|
|
|
|
return self.__get_result()
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
/usr/lib/python3.13/concurrent/futures/_base.py:401: in __get_result
|
|
|
|
|
|
|
|
raise self._exception
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/anyio/from_thread.py:265: in _call_func
|
|
|
|
|
|
|
|
retval = await retval_or_awaitable
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/applications.py:1163: in __call__
|
|
|
|
|
|
|
|
await super().__call__(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/applications.py:96: in __call__
|
|
|
|
|
|
|
|
await self.middleware_stack(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/middleware/errors.py:186: in __call__
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/middleware/errors.py:164: in __call__
|
|
|
|
|
|
|
|
await self.app(scope, receive, _send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/middleware/exceptions.py:63: in __call__
|
|
|
|
|
|
|
|
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:53: in wrapped_app
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:42: in wrapped_app
|
|
|
|
|
|
|
|
await app(scope, receive, sender)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/middleware/asyncexitstack.py:18: in __call__
|
|
|
|
|
|
|
|
await self.app(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/routing.py:670: in __call__
|
|
|
|
|
|
|
|
await self.middleware_stack(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:2734: in app
|
|
|
|
|
|
|
|
await route.handle(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:1780: in handle
|
|
|
|
|
|
|
|
await self.original_router.handle(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:2789: in handle
|
|
|
|
|
|
|
|
await included_router._handle_selected(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:1800: in _handle_selected
|
|
|
|
|
|
|
|
await original_route.handle(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:1279: in handle
|
|
|
|
|
|
|
|
await app(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:158: in app
|
|
|
|
|
|
|
|
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:53: in wrapped_app
|
|
|
|
|
|
|
|
raise exc
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/_exception_handler.py:42: in wrapped_app
|
|
|
|
|
|
|
|
await app(scope, receive, sender)
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:144: in app
|
|
|
|
|
|
|
|
response = await f(request)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:706: in app
|
|
|
|
|
|
|
|
raw_response = await run_endpoint_function(
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/routing.py:352: in run_endpoint_function
|
|
|
|
|
|
|
|
return await dependant.call(**values)
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
app/api/slabs.py:263: in create_slab
|
|
|
|
|
|
|
|
form = await request.form()
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/requests.py:276: in _get_form
|
|
|
|
|
|
|
|
assert parse_options_header is not None, (
|
|
|
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
E AssertionError: The `python-multipart` library must be installed to use form parsing.
|
|
|
|
|
|
|
|
------------------------------ Captured log call -------------------------------
|
|
|
|
|
|
|
|
INFO root:main.py:24 SlabUploader starting up
|
|
|
|
|
|
|
|
INFO app.db.engine:engine.py:49 Connecting to sqlite+aiosqlite:///:memory:
|
|
|
|
|
|
|
|
INFO app.db.engine:engine.py:69 Database initialized
|
|
|
|
|
|
|
|
INFO root:main.py:27 SlabUploader shutting down
|
|
|
|
|
|
|
|
=============================== warnings summary ===============================
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/fastapi/testclient.py:1
|
|
|
|
|
|
|
|
/workspace/gitea-atd/Ty_Tech/SlabUploader/backend/.venv/lib/python3.13/site-packages/fastapi/testclient.py:1: StarletteDeprecationWarning: Using `httpx` with `starlette.testclient` is deprecated; install `httpx2` instead.
|
|
|
|
|
|
|
|
from starlette.testclient import TestClient as TestClient # noqa
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.venv/lib/python3.13/site-packages/starlette/testclient.py:53
|
|
|
|
|
|
|
|
/workspace/gitea-atd/Ty_Tech/SlabUploader/backend/.venv/lib/python3.13/site-packages/starlette/testclient.py:53: DeprecationWarning: The anyio.abc.BlockingPortal alias is deprecated, use anyio.from_thread.BlockingPortal instead.
|
|
|
|
|
|
|
|
_PortalFactoryType = Callable[[], AbstractContextManager[anyio.abc.BlockingPortal]]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
|
|
|
|
|
|
|
|
=========================== short test summary info ============================
|
|
|
|
|
|
|
|
FAILED tests/contract/test_slabs.py::TestCreateSlab::test_returns_201 - Asser...
|
|
|
|
|
|
|
|
FAILED tests/contract/test_slabs.py::TestCreateSlab::test_returns_status_calibrated
|
|
|
|
|
|
|
|
FAILED tests/contract/test_slabs.py::TestCreateSlab::test_returns_server_rev
|
|
|
|
|
|
|
|
FAILED tests/contract/test_slabs.py::TestCreateSlab::test_response_shape - As...
|
|
|
|
|
|
|
|
FAILED tests/contract/test_slabs.py::TestCreateSlab::test_multiple_photos - A...
|
|
|
|
|
|
|
|
FAILED tests/contract/test_slabs.py::TestCreateSlab::test_missing_data_field_returns_400
|
|
|
|
|
|
|
|
FAILED tests/contract/test_slabs.py::TestCreateSlab::test_duplicate_sku_returns_409
|
|
|
|
|
|
|
|
FAILED tests/contract/test_slabs.py::TestCreateSlab::test_with_test_client_lifespan
|
|
|
|
|
|
|
|
=================== 8 failed, 31 passed, 2 warnings in 3.06s ===================
|
|
|
|
|
|
|
|
EXIT:0
|