Introduce an admin portal (React + Nginx), WebSocket routing, and API versioning middleware with `/api/v1/` prefix deprecation. Add master API key authentication, new Prometheus metrics for AI token consumption and active WebSockets, and extend S3 config with a public endpoint URL. Update test paths and fixtures to align with the new routing structure.
1625 lines
277 KiB
Plaintext
1625 lines
277 KiB
Plaintext
============================= test session starts =============================
|
|
platform win32 -- Python 3.14.3, pytest-8.3.3, pluggy-1.6.0 -- C:\Users\bruno\scoop\apps\python\current\python.exe
|
|
cachedir: .pytest_cache
|
|
rootdir: C:\dev\git\python\imago
|
|
configfile: pytest.ini
|
|
plugins: anyio-4.12.0, asyncio-0.24.0, cov-5.0.0, mock-3.15.1, respx-0.22.0
|
|
asyncio: mode=Mode.AUTO, default_loop_scope=None
|
|
collecting ... collected 8 items
|
|
|
|
tests/test_websocket.py::TestWSPipelineNoToken::test_no_token_rejected PASSED [ 12%]
|
|
tests/test_websocket.py::TestWSPipelineInvalidToken::test_invalid_token_rejected PASSED [ 25%]
|
|
tests/test_websocket.py::TestWSPipelineAuth::test_valid_token_accepted PASSED [ 37%]
|
|
tests/test_websocket.py::TestWSPipelineAuth::test_valid_token_accepted ERROR [ 37%]
|
|
tests/test_websocket.py::TestWSPipelineAuth::test_wrong_owner_rejected PASSED [ 50%]
|
|
tests/test_websocket.py::TestWSPipelineSyntheticDone::test_done_image_sends_synthetic PASSED [ 62%]
|
|
tests/test_websocket.py::TestWSPipelineSyntheticDone::test_done_image_sends_synthetic ERROR [ 62%]
|
|
tests/test_websocket.py::TestWSPipelineSyntheticError::test_error_image_sends_synthetic PASSED [ 75%]
|
|
tests/test_websocket.py::TestWSPipelineSyntheticError::test_error_image_sends_synthetic ERROR [ 75%]
|
|
tests/test_websocket.py::TestWSAdminMonitor::test_admin_no_token_rejected PASSED [ 87%]
|
|
tests/test_websocket.py::TestWSAdminMonitor::test_admin_non_admin_rejected PASSED [100%]
|
|
|
|
=================================== ERRORS ====================================
|
|
______ ERROR at teardown of TestWSPipelineAuth.test_valid_token_accepted ______
|
|
C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\dialects\sqlite\aiosqlite.py:263: in rollback
|
|
self.await_(self._connection.rollback())
|
|
C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py:132: in await_only
|
|
return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
|
|
C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py:196: in greenlet_spawn
|
|
value = await result
|
|
C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\aiosqlite\core.py:169: in rollback
|
|
await self._execute(self._conn.rollback)
|
|
C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\aiosqlite\core.py:83: in _conn
|
|
raise ValueError("no active connection")
|
|
E ValueError: no active connection
|
|
|
|
The above exception was the direct cause of the following exception:
|
|
C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\engine\base.py:1127: in _rollback_impl
|
|
self.engine.dialect.do_rollback(self.connection)
|
|
C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\engine\default.py:699: in do_rollback
|
|
dbapi_connection.rollback()
|
|
C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\dialects\sqlite\aiosqlite.py:265: in rollback
|
|
self._handle_exception(error)
|
|
C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\dialects\sqlite\aiosqlite.py:294: in _handle_exception
|
|
raise self.dbapi.sqlite.OperationalError(
|
|
E sqlite3.OperationalError: no active connection
|
|
|
|
The above exception was the direct cause of the following exception:
|
|
c:\Users\bruno\scoop\apps\python\3.14.3\Lib\site-packages\pytest_asyncio\plugin.py:341: in finalizer
|
|
event_loop.run_until_complete(async_finalizer())
|
|
C:\Users\bruno\scoop\apps\python\current\Lib\asyncio\base_events.py:719: in run_until_complete
|
|
return future.result()
|
|
c:\Users\bruno\scoop\apps\python\3.14.3\Lib\site-packages\pytest_asyncio\plugin.py:333: in async_finalizer
|
|
await gen_obj.__anext__() # type: ignore[union-attr]
|
|
tests\conftest.py:89: in db_session
|
|
async with TestSessionLocal() as session:
|
|
C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\ext\asyncio\session.py:1080: in __aexit__
|
|
await asyncio.shield(task)
|
|
C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\ext\asyncio\session.py:1025: in close
|
|
await greenlet_spawn(self.sync_session.close)
|
|
C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py:203: in greenlet_spawn
|
|
result = context.switch(value)
|
|
C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\orm\session.py:2518: in close
|
|
self._close_impl(invalidate=False)
|
|
C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\orm\session.py:2587: in _close_impl
|
|
transaction.close(invalidate)
|
|
C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\orm\state_changes.py:139: in _go
|
|
ret_value = fn(self, *arg, **kw)
|
|
C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\orm\session.py:1419: in close
|
|
transaction.close()
|
|
C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\engine\base.py:2588: in close
|
|
self._do_close()
|
|
C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\engine\base.py:2726: in _do_close
|
|
self._close_impl()
|
|
C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\engine\base.py:2712: in _close_impl
|
|
self._connection_rollback_impl()
|
|
C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\engine\base.py:2704: in _connection_rollback_impl
|
|
self.connection._rollback_impl()
|
|
C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\engine\base.py:1129: in _rollback_impl
|
|
self._handle_dbapi_exception(e, None, None, None, None)
|
|
C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\engine\base.py:2355: in _handle_dbapi_exception
|
|
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
|
|
C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\engine\base.py:1127: in _rollback_impl
|
|
self.engine.dialect.do_rollback(self.connection)
|
|
C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\engine\default.py:699: in do_rollback
|
|
dbapi_connection.rollback()
|
|
C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\dialects\sqlite\aiosqlite.py:265: in rollback
|
|
self._handle_exception(error)
|
|
C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\dialects\sqlite\aiosqlite.py:294: in _handle_exception
|
|
raise self.dbapi.sqlite.OperationalError(
|
|
E sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no active connection
|
|
E (Background on this error at: https://sqlalche.me/e/20/e3q8)
|
|
---------------------------- Captured stdout setup ----------------------------
|
|
2026-02-25T02:28:35.100145Z [debug ] Using proactor: IocpProactor [asyncio]
|
|
2026-02-25T02:28:35.101637Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) [aiosqlite]
|
|
2026-02-25T02:28:35.102012Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.102424Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C789240>, 'PRAGMA main.table_info("images")', ()) [aiosqlite]
|
|
2026-02-25T02:28:35.102665Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C789240>, 'PRAGMA main.table_info("images")', ()) completed [aiosqlite]
|
|
2026-02-25T02:28:35.102999Z [debug ] executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C789240>) [aiosqlite]
|
|
2026-02-25T02:28:35.103179Z [debug ] operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C789240>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.103481Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C789240>) [aiosqlite]
|
|
2026-02-25T02:28:35.103672Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C789240>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.104049Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) [aiosqlite]
|
|
2026-02-25T02:28:35.104232Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.104545Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C6F5340>, 'PRAGMA temp.table_info("images")', ()) [aiosqlite]
|
|
2026-02-25T02:28:35.104747Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C6F5340>, 'PRAGMA temp.table_info("images")', ()) completed [aiosqlite]
|
|
2026-02-25T02:28:35.105056Z [debug ] executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C6F5340>) [aiosqlite]
|
|
2026-02-25T02:28:35.105227Z [debug ] operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C6F5340>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.105519Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C6F5340>) [aiosqlite]
|
|
2026-02-25T02:28:35.105687Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C6F5340>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.106126Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) [aiosqlite]
|
|
2026-02-25T02:28:35.106312Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.106677Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C6F4840>, 'PRAGMA main.table_info("api_clients")', ()) [aiosqlite]
|
|
2026-02-25T02:28:35.106952Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C6F4840>, 'PRAGMA main.table_info("api_clients")', ()) completed [aiosqlite]
|
|
2026-02-25T02:28:35.107358Z [debug ] executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C6F4840>) [aiosqlite]
|
|
2026-02-25T02:28:35.107547Z [debug ] operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C6F4840>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.107808Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C6F4840>) [aiosqlite]
|
|
2026-02-25T02:28:35.107970Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C6F4840>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.108332Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) [aiosqlite]
|
|
2026-02-25T02:28:35.108579Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.108954Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C6F7F40>, 'PRAGMA temp.table_info("api_clients")', ()) [aiosqlite]
|
|
2026-02-25T02:28:35.109152Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C6F7F40>, 'PRAGMA temp.table_info("api_clients")', ()) completed [aiosqlite]
|
|
2026-02-25T02:28:35.109439Z [debug ] executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C6F7F40>) [aiosqlite]
|
|
2026-02-25T02:28:35.109603Z [debug ] operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C6F7F40>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.109891Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C6F7F40>) [aiosqlite]
|
|
2026-02-25T02:28:35.110071Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C6F7F40>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.110813Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) [aiosqlite]
|
|
2026-02-25T02:28:35.110987Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.111277Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C6F78C0>, '\nCREATE TABLE api_clients (\n\tid VARCHAR(36) NOT NULL, \n\tname VARCHAR(256) NOT NULL, \n\tapi_key_hash VARCHAR(64) NOT NULL, \n\tscopes JSON NOT NULL, \n\t"plan" VARCHAR(8) NOT NULL, \n\tis_active BOOLEAN NOT NULL, \n\tstorage_used_bytes BIGINT NOT NULL, \n\tquota_storage_mb INTEGER NOT NULL, \n\tquota_images INTEGER NOT NULL, \n\tcreated_at DATETIME, \n\tupdated_at DATETIME, \n\tPRIMARY KEY (id)\n)\n\n', ()) [aiosqlite]
|
|
2026-02-25T02:28:35.111634Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C6F78C0>, '\nCREATE TABLE api_clients (\n\tid VARCHAR(36) NOT NULL, \n\tname VARCHAR(256) NOT NULL, \n\tapi_key_hash VARCHAR(64) NOT NULL, \n\tscopes JSON NOT NULL, \n\t"plan" VARCHAR(8) NOT NULL, \n\tis_active BOOLEAN NOT NULL, \n\tstorage_used_bytes BIGINT NOT NULL, \n\tquota_storage_mb INTEGER NOT NULL, \n\tquota_images INTEGER NOT NULL, \n\tcreated_at DATETIME, \n\tupdated_at DATETIME, \n\tPRIMARY KEY (id)\n)\n\n', ()) completed [aiosqlite]
|
|
2026-02-25T02:28:35.111987Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C6F78C0>) [aiosqlite]
|
|
2026-02-25T02:28:35.112239Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C6F78C0>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.112794Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) [aiosqlite]
|
|
2026-02-25T02:28:35.113099Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.113497Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C742440>, 'CREATE UNIQUE INDEX ix_api_clients_api_key_hash ON api_clients (api_key_hash)', ()) [aiosqlite]
|
|
2026-02-25T02:28:35.113779Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C742440>, 'CREATE UNIQUE INDEX ix_api_clients_api_key_hash ON api_clients (api_key_hash)', ()) completed [aiosqlite]
|
|
2026-02-25T02:28:35.114097Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C742440>) [aiosqlite]
|
|
2026-02-25T02:28:35.114284Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C742440>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.114684Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) [aiosqlite]
|
|
2026-02-25T02:28:35.114872Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.115239Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C742BC0>, 'CREATE INDEX ix_api_clients_id ON api_clients (id)', ()) [aiosqlite]
|
|
2026-02-25T02:28:35.115630Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C742BC0>, 'CREATE INDEX ix_api_clients_id ON api_clients (id)', ()) completed [aiosqlite]
|
|
2026-02-25T02:28:35.116017Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C742BC0>) [aiosqlite]
|
|
2026-02-25T02:28:35.116216Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C742BC0>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.117121Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) [aiosqlite]
|
|
2026-02-25T02:28:35.117391Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.117877Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C7CFBC0>, '\nCREATE TABLE images (\n\tid INTEGER NOT NULL, \n\tuuid VARCHAR(36) NOT NULL, \n\tclient_id VARCHAR(36) NOT NULL, \n\toriginal_name VARCHAR(512) NOT NULL, \n\tfilename VARCHAR(512) NOT NULL, \n\tfile_path VARCHAR(1024) NOT NULL, \n\tthumbnail_path VARCHAR(1024), \n\tmime_type VARCHAR(128), \n\tfile_size BIGINT, \n\twidth INTEGER, \n\theight INTEGER, \n\tuploaded_at DATETIME, \n\tprocessing_status VARCHAR(10) NOT NULL, \n\tprocessing_error TEXT, \n\tprocessing_started_at DATETIME, \n\tprocessing_done_at DATETIME, \n\texif_raw JSON, \n\texif_make VARCHAR(256), \n\texif_model VARCHAR(256), \n\texif_lens VARCHAR(256), \n\texif_taken_at DATETIME, \n\texif_gps_lat FLOAT, \n\texif_gps_lon FLOAT, \n\texif_altitude FLOAT, \n\texif_iso INTEGER, \n\texif_aperture VARCHAR(32), \n\texif_shutter VARCHAR(32), \n\texif_focal VARCHAR(32), \n\texif_flash BOOLEAN, \n\texif_orientation INTEGER, \n\texif_software VARCHAR(256), \n\tocr_text TEXT, \n\tocr_language VARCHAR(64), \n\tocr_confidence FLOAT, \n\tocr_has_text BOOLEAN, \n\tai_description TEXT, \n\tai_tags JSON, \n\tai_confidence FLOAT, \n\tai_model_used VARCHAR(128), \n\tai_processed_at DATETIME, \n\tai_prompt_tokens INTEGER, \n\tai_output_tokens INTEGER, \n\tPRIMARY KEY (id), \n\tFOREIGN KEY(client_id) REFERENCES api_clients (id)\n)\n\n', ()) [aiosqlite]
|
|
2026-02-25T02:28:35.118347Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C7CFBC0>, '\nCREATE TABLE images (\n\tid INTEGER NOT NULL, \n\tuuid VARCHAR(36) NOT NULL, \n\tclient_id VARCHAR(36) NOT NULL, \n\toriginal_name VARCHAR(512) NOT NULL, \n\tfilename VARCHAR(512) NOT NULL, \n\tfile_path VARCHAR(1024) NOT NULL, \n\tthumbnail_path VARCHAR(1024), \n\tmime_type VARCHAR(128), \n\tfile_size BIGINT, \n\twidth INTEGER, \n\theight INTEGER, \n\tuploaded_at DATETIME, \n\tprocessing_status VARCHAR(10) NOT NULL, \n\tprocessing_error TEXT, \n\tprocessing_started_at DATETIME, \n\tprocessing_done_at DATETIME, \n\texif_raw JSON, \n\texif_make VARCHAR(256), \n\texif_model VARCHAR(256), \n\texif_lens VARCHAR(256), \n\texif_taken_at DATETIME, \n\texif_gps_lat FLOAT, \n\texif_gps_lon FLOAT, \n\texif_altitude FLOAT, \n\texif_iso INTEGER, \n\texif_aperture VARCHAR(32), \n\texif_shutter VARCHAR(32), \n\texif_focal VARCHAR(32), \n\texif_flash BOOLEAN, \n\texif_orientation INTEGER, \n\texif_software VARCHAR(256), \n\tocr_text TEXT, \n\tocr_language VARCHAR(64), \n\tocr_confidence FLOAT, \n\tocr_has_text BOOLEAN, \n\tai_description TEXT, \n\tai_tags JSON, \n\tai_confidence FLOAT, \n\tai_model_used VARCHAR(128), \n\tai_processed_at DATETIME, \n\tai_prompt_tokens INTEGER, \n\tai_output_tokens INTEGER, \n\tPRIMARY KEY (id), \n\tFOREIGN KEY(client_id) REFERENCES api_clients (id)\n)\n\n', ()) completed [aiosqlite]
|
|
2026-02-25T02:28:35.119006Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C7CFBC0>) [aiosqlite]
|
|
2026-02-25T02:28:35.119197Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C7CFBC0>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.119641Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) [aiosqlite]
|
|
2026-02-25T02:28:35.119821Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.120131Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C742340>, 'CREATE UNIQUE INDEX ix_images_uuid ON images (uuid)', ()) [aiosqlite]
|
|
2026-02-25T02:28:35.120430Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C742340>, 'CREATE UNIQUE INDEX ix_images_uuid ON images (uuid)', ()) completed [aiosqlite]
|
|
2026-02-25T02:28:35.120755Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C742340>) [aiosqlite]
|
|
2026-02-25T02:28:35.120927Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C742340>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.121395Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) [aiosqlite]
|
|
2026-02-25T02:28:35.121566Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.121860Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C743EC0>, 'CREATE INDEX ix_images_id ON images (id)', ()) [aiosqlite]
|
|
2026-02-25T02:28:35.122125Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C743EC0>, 'CREATE INDEX ix_images_id ON images (id)', ()) completed [aiosqlite]
|
|
2026-02-25T02:28:35.122439Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C743EC0>) [aiosqlite]
|
|
2026-02-25T02:28:35.122603Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C743EC0>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.123021Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) [aiosqlite]
|
|
2026-02-25T02:28:35.123186Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.123466Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C741D40>, 'CREATE INDEX ix_images_client_id ON images (client_id)', ()) [aiosqlite]
|
|
2026-02-25T02:28:35.123704Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C741D40>, 'CREATE INDEX ix_images_client_id ON images (client_id)', ()) completed [aiosqlite]
|
|
2026-02-25T02:28:35.123989Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C741D40>) [aiosqlite]
|
|
2026-02-25T02:28:35.124152Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C741D40>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.124553Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) [aiosqlite]
|
|
2026-02-25T02:28:35.124840Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.125252Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C7420C0>, 'CREATE INDEX ix_images_processing_status ON images (processing_status)', ()) [aiosqlite]
|
|
2026-02-25T02:28:35.125518Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C7420C0>, 'CREATE INDEX ix_images_processing_status ON images (processing_status)', ()) completed [aiosqlite]
|
|
2026-02-25T02:28:35.125838Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C7420C0>) [aiosqlite]
|
|
2026-02-25T02:28:35.126006Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C7420C0>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.126416Z [debug ] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001F56C729210>) [aiosqlite]
|
|
2026-02-25T02:28:35.126638Z [debug ] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001F56C729210>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.127004Z [debug ] executing functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001F56C729210>) [aiosqlite]
|
|
2026-02-25T02:28:35.127235Z [debug ] operation functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001F56C729210>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.130149Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) [aiosqlite]
|
|
2026-02-25T02:28:35.130392Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.130726Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C789B40>, 'INSERT INTO api_clients (id, name, api_key_hash, scopes, "plan", is_active, storage_used_bytes, quota_storage_mb, quota_images, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', ('ead8707d-34f8-4468-9fe3-4f912ac57e5d', 'Test Client A', '982e4d62421a0c37943e4a54bc2511f5ca0f29003fd7aa4ae43f7b8e5b29fef1', '["images:read", "images:write", "images:delete", "ai:use"]', 'STANDARD', 1, 0, 500, 1000, '2026-02-25 02:28:35.129914', '2026-02-25 02:28:35.129916')) [aiosqlite]
|
|
2026-02-25T02:28:35.131108Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C789B40>, 'INSERT INTO api_clients (id, name, api_key_hash, scopes, "plan", is_active, storage_used_bytes, quota_storage_mb, quota_images, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', ('ead8707d-34f8-4468-9fe3-4f912ac57e5d', 'Test Client A', '982e4d62421a0c37943e4a54bc2511f5ca0f29003fd7aa4ae43f7b8e5b29fef1', '["images:read", "images:write", "images:delete", "ai:use"]', 'STANDARD', 1, 0, 500, 1000, '2026-02-25 02:28:35.129914', '2026-02-25 02:28:35.129916')) completed [aiosqlite]
|
|
2026-02-25T02:28:35.131470Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C789B40>) [aiosqlite]
|
|
2026-02-25T02:28:35.131648Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C789B40>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.132262Z [debug ] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001F56C729210>) [aiosqlite]
|
|
2026-02-25T02:28:35.132469Z [debug ] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001F56C729210>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.132774Z [debug ] executing functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001F56C729210>) [aiosqlite]
|
|
2026-02-25T02:28:35.132938Z [debug ] operation functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001F56C729210>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.135113Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) [aiosqlite]
|
|
2026-02-25T02:28:35.135376Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.135719Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C7425C0>, 'SELECT api_clients.id, api_clients.name, api_clients.api_key_hash, api_clients.scopes, api_clients."plan", api_clients.is_active, api_clients.storage_used_bytes, api_clients.quota_storage_mb, api_clients.quota_images, api_clients.created_at, api_clients.updated_at \nFROM api_clients \nWHERE api_clients.id = ?', ('ead8707d-34f8-4468-9fe3-4f912ac57e5d',)) [aiosqlite]
|
|
2026-02-25T02:28:35.136001Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C7425C0>, 'SELECT api_clients.id, api_clients.name, api_clients.api_key_hash, api_clients.scopes, api_clients."plan", api_clients.is_active, api_clients.storage_used_bytes, api_clients.quota_storage_mb, api_clients.quota_images, api_clients.created_at, api_clients.updated_at \nFROM api_clients \nWHERE api_clients.id = ?', ('ead8707d-34f8-4468-9fe3-4f912ac57e5d',)) completed [aiosqlite]
|
|
2026-02-25T02:28:35.136360Z [debug ] executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C7425C0>) [aiosqlite]
|
|
2026-02-25T02:28:35.136542Z [debug ] operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C7425C0>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.136874Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C7425C0>) [aiosqlite]
|
|
2026-02-25T02:28:35.137065Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C7425C0>) completed [aiosqlite]
|
|
----------------------------- Captured log setup ------------------------------
|
|
DEBUG asyncio:proactor_events.py:633 Using proactor: IocpProactor
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C789240>, 'PRAGMA main.table_info("images")', ())
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C789240>, 'PRAGMA main.table_info("images")', ()) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C789240>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C789240>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C789240>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C789240>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C6F5340>, 'PRAGMA temp.table_info("images")', ())
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C6F5340>, 'PRAGMA temp.table_info("images")', ()) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C6F5340>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C6F5340>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C6F5340>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C6F5340>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C6F4840>, 'PRAGMA main.table_info("api_clients")', ())
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C6F4840>, 'PRAGMA main.table_info("api_clients")', ()) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C6F4840>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C6F4840>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C6F4840>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C6F4840>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C6F7F40>, 'PRAGMA temp.table_info("api_clients")', ())
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C6F7F40>, 'PRAGMA temp.table_info("api_clients")', ()) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C6F7F40>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C6F7F40>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C6F7F40>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C6F7F40>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C6F78C0>, '\nCREATE TABLE api_clients (\n\tid VARCHAR(36) NOT NULL, \n\tname VARCHAR(256) NOT NULL, \n\tapi_key_hash VARCHAR(64) NOT NULL, \n\tscopes JSON NOT NULL, \n\t"plan" VARCHAR(8) NOT NULL, \n\tis_active BOOLEAN NOT NULL, \n\tstorage_used_bytes BIGINT NOT NULL, \n\tquota_storage_mb INTEGER NOT NULL, \n\tquota_images INTEGER NOT NULL, \n\tcreated_at DATETIME, \n\tupdated_at DATETIME, \n\tPRIMARY KEY (id)\n)\n\n', ())
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C6F78C0>, '\nCREATE TABLE api_clients (\n\tid VARCHAR(36) NOT NULL, \n\tname VARCHAR(256) NOT NULL, \n\tapi_key_hash VARCHAR(64) NOT NULL, \n\tscopes JSON NOT NULL, \n\t"plan" VARCHAR(8) NOT NULL, \n\tis_active BOOLEAN NOT NULL, \n\tstorage_used_bytes BIGINT NOT NULL, \n\tquota_storage_mb INTEGER NOT NULL, \n\tquota_images INTEGER NOT NULL, \n\tcreated_at DATETIME, \n\tupdated_at DATETIME, \n\tPRIMARY KEY (id)\n)\n\n', ()) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C6F78C0>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C6F78C0>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C742440>, 'CREATE UNIQUE INDEX ix_api_clients_api_key_hash ON api_clients (api_key_hash)', ())
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C742440>, 'CREATE UNIQUE INDEX ix_api_clients_api_key_hash ON api_clients (api_key_hash)', ()) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C742440>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C742440>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C742BC0>, 'CREATE INDEX ix_api_clients_id ON api_clients (id)', ())
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C742BC0>, 'CREATE INDEX ix_api_clients_id ON api_clients (id)', ()) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C742BC0>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C742BC0>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C7CFBC0>, '\nCREATE TABLE images (\n\tid INTEGER NOT NULL, \n\tuuid VARCHAR(36) NOT NULL, \n\tclient_id VARCHAR(36) NOT NULL, \n\toriginal_name VARCHAR(512) NOT NULL, \n\tfilename VARCHAR(512) NOT NULL, \n\tfile_path VARCHAR(1024) NOT NULL, \n\tthumbnail_path VARCHAR(1024), \n\tmime_type VARCHAR(128), \n\tfile_size BIGINT, \n\twidth INTEGER, \n\theight INTEGER, \n\tuploaded_at DATETIME, \n\tprocessing_status VARCHAR(10) NOT NULL, \n\tprocessing_error TEXT, \n\tprocessing_started_at DATETIME, \n\tprocessing_done_at DATETIME, \n\texif_raw JSON, \n\texif_make VARCHAR(256), \n\texif_model VARCHAR(256), \n\texif_lens VARCHAR(256), \n\texif_taken_at DATETIME, \n\texif_gps_lat FLOAT, \n\texif_gps_lon FLOAT, \n\texif_altitude FLOAT, \n\texif_iso INTEGER, \n\texif_aperture VARCHAR(32), \n\texif_shutter VARCHAR(32), \n\texif_focal VARCHAR(32), \n\texif_flash BOOLEAN, \n\texif_orientation INTEGER, \n\texif_software VARCHAR(256), \n\tocr_text TEXT, \n\tocr_language VARCHAR(64), \n\tocr_confidence FLOAT, \n\tocr_has_text BOOLEAN, \n\tai_description TEXT, \n\tai_tags JSON, \n\tai_confidence FLOAT, \n\tai_model_used VARCHAR(128), \n\tai_processed_at DATETIME, \n\tai_prompt_tokens INTEGER, \n\tai_output_tokens INTEGER, \n\tPRIMARY KEY (id), \n\tFOREIGN KEY(client_id) REFERENCES api_clients (id)\n)\n\n', ())
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C7CFBC0>, '\nCREATE TABLE images (\n\tid INTEGER NOT NULL, \n\tuuid VARCHAR(36) NOT NULL, \n\tclient_id VARCHAR(36) NOT NULL, \n\toriginal_name VARCHAR(512) NOT NULL, \n\tfilename VARCHAR(512) NOT NULL, \n\tfile_path VARCHAR(1024) NOT NULL, \n\tthumbnail_path VARCHAR(1024), \n\tmime_type VARCHAR(128), \n\tfile_size BIGINT, \n\twidth INTEGER, \n\theight INTEGER, \n\tuploaded_at DATETIME, \n\tprocessing_status VARCHAR(10) NOT NULL, \n\tprocessing_error TEXT, \n\tprocessing_started_at DATETIME, \n\tprocessing_done_at DATETIME, \n\texif_raw JSON, \n\texif_make VARCHAR(256), \n\texif_model VARCHAR(256), \n\texif_lens VARCHAR(256), \n\texif_taken_at DATETIME, \n\texif_gps_lat FLOAT, \n\texif_gps_lon FLOAT, \n\texif_altitude FLOAT, \n\texif_iso INTEGER, \n\texif_aperture VARCHAR(32), \n\texif_shutter VARCHAR(32), \n\texif_focal VARCHAR(32), \n\texif_flash BOOLEAN, \n\texif_orientation INTEGER, \n\texif_software VARCHAR(256), \n\tocr_text TEXT, \n\tocr_language VARCHAR(64), \n\tocr_confidence FLOAT, \n\tocr_has_text BOOLEAN, \n\tai_description TEXT, \n\tai_tags JSON, \n\tai_confidence FLOAT, \n\tai_model_used VARCHAR(128), \n\tai_processed_at DATETIME, \n\tai_prompt_tokens INTEGER, \n\tai_output_tokens INTEGER, \n\tPRIMARY KEY (id), \n\tFOREIGN KEY(client_id) REFERENCES api_clients (id)\n)\n\n', ()) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C7CFBC0>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C7CFBC0>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C742340>, 'CREATE UNIQUE INDEX ix_images_uuid ON images (uuid)', ())
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C742340>, 'CREATE UNIQUE INDEX ix_images_uuid ON images (uuid)', ()) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C742340>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C742340>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C743EC0>, 'CREATE INDEX ix_images_id ON images (id)', ())
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C743EC0>, 'CREATE INDEX ix_images_id ON images (id)', ()) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C743EC0>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C743EC0>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C741D40>, 'CREATE INDEX ix_images_client_id ON images (client_id)', ())
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C741D40>, 'CREATE INDEX ix_images_client_id ON images (client_id)', ()) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C741D40>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C741D40>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C7420C0>, 'CREATE INDEX ix_images_processing_status ON images (processing_status)', ())
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C7420C0>, 'CREATE INDEX ix_images_processing_status ON images (processing_status)', ()) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C7420C0>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C7420C0>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001F56C729210>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001F56C729210>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001F56C729210>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001F56C729210>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C789B40>, 'INSERT INTO api_clients (id, name, api_key_hash, scopes, "plan", is_active, storage_used_bytes, quota_storage_mb, quota_images, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', ('ead8707d-34f8-4468-9fe3-4f912ac57e5d', 'Test Client A', '982e4d62421a0c37943e4a54bc2511f5ca0f29003fd7aa4ae43f7b8e5b29fef1', '["images:read", "images:write", "images:delete", "ai:use"]', 'STANDARD', 1, 0, 500, 1000, '2026-02-25 02:28:35.129914', '2026-02-25 02:28:35.129916'))
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C789B40>, 'INSERT INTO api_clients (id, name, api_key_hash, scopes, "plan", is_active, storage_used_bytes, quota_storage_mb, quota_images, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', ('ead8707d-34f8-4468-9fe3-4f912ac57e5d', 'Test Client A', '982e4d62421a0c37943e4a54bc2511f5ca0f29003fd7aa4ae43f7b8e5b29fef1', '["images:read", "images:write", "images:delete", "ai:use"]', 'STANDARD', 1, 0, 500, 1000, '2026-02-25 02:28:35.129914', '2026-02-25 02:28:35.129916')) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C789B40>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C789B40>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001F56C729210>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001F56C729210>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001F56C729210>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001F56C729210>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C7425C0>, 'SELECT api_clients.id, api_clients.name, api_clients.api_key_hash, api_clients.scopes, api_clients."plan", api_clients.is_active, api_clients.storage_used_bytes, api_clients.quota_storage_mb, api_clients.quota_images, api_clients.created_at, api_clients.updated_at \nFROM api_clients \nWHERE api_clients.id = ?', ('ead8707d-34f8-4468-9fe3-4f912ac57e5d',))
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C7425C0>, 'SELECT api_clients.id, api_clients.name, api_clients.api_key_hash, api_clients.scopes, api_clients."plan", api_clients.is_active, api_clients.storage_used_bytes, api_clients.quota_storage_mb, api_clients.quota_images, api_clients.created_at, api_clients.updated_at \nFROM api_clients \nWHERE api_clients.id = ?', ('ead8707d-34f8-4468-9fe3-4f912ac57e5d',)) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C7425C0>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C7425C0>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C7425C0>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C7425C0>) completed
|
|
---------------------------- Captured stdout call -----------------------------
|
|
2026-02-25T02:28:35.141151Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) [aiosqlite]
|
|
2026-02-25T02:28:35.141577Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.142256Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C789940>, 'INSERT INTO images (uuid, client_id, original_name, filename, file_path, thumbnail_path, mime_type, file_size, width, height, uploaded_at, processing_status, processing_error, processing_started_at, processing_done_at, exif_make, exif_model, exif_lens, exif_taken_at, exif_gps_lat, exif_gps_lon, exif_altitude, exif_iso, exif_aperture, exif_shutter, exif_focal, exif_flash, exif_orientation, exif_software, ocr_text, ocr_language, ocr_confidence, ocr_has_text, ai_description, ai_confidence, ai_model_used, ai_processed_at, ai_prompt_tokens, ai_output_tokens) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', ('be8b8fd9-3517-4e69-8708-c7eef0dfff5b', 'ead8707d-34f8-4468-9fe3-4f912ac57e5d', 'test.jpg', 'test.jpg', '/data/test.jpg', None, None, None, None, None, '2026-02-25 02:28:35.140847', 'DONE', None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0, None, None, None, None, None, None)) [aiosqlite]
|
|
2026-02-25T02:28:35.144555Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C789940>, 'INSERT INTO images (uuid, client_id, original_name, filename, file_path, thumbnail_path, mime_type, file_size, width, height, uploaded_at, processing_status, processing_error, processing_started_at, processing_done_at, exif_make, exif_model, exif_lens, exif_taken_at, exif_gps_lat, exif_gps_lon, exif_altitude, exif_iso, exif_aperture, exif_shutter, exif_focal, exif_flash, exif_orientation, exif_software, ocr_text, ocr_language, ocr_confidence, ocr_has_text, ai_description, ai_confidence, ai_model_used, ai_processed_at, ai_prompt_tokens, ai_output_tokens) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', ('be8b8fd9-3517-4e69-8708-c7eef0dfff5b', 'ead8707d-34f8-4468-9fe3-4f912ac57e5d', 'test.jpg', 'test.jpg', '/data/test.jpg', None, None, None, None, None, '2026-02-25 02:28:35.140847', 'DONE', None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0, None, None, None, None, None, None)) completed [aiosqlite]
|
|
2026-02-25T02:28:35.148306Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C789940>) [aiosqlite]
|
|
2026-02-25T02:28:35.149931Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C789940>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.155712Z [debug ] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001F56C729210>) [aiosqlite]
|
|
2026-02-25T02:28:35.157034Z [debug ] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001F56C729210>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.158594Z [debug ] executing functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001F56C729210>) [aiosqlite]
|
|
2026-02-25T02:28:35.159630Z [debug ] operation functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001F56C729210>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.165556Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) [aiosqlite]
|
|
2026-02-25T02:28:35.165918Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.166377Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C7EB540>, 'SELECT images.id, images.uuid, images.client_id, images.original_name, images.filename, images.file_path, images.thumbnail_path, images.mime_type, images.file_size, images.width, images.height, images.uploaded_at, images.processing_status, images.processing_error, images.processing_started_at, images.processing_done_at, images.exif_raw, images.exif_make, images.exif_model, images.exif_lens, images.exif_taken_at, images.exif_gps_lat, images.exif_gps_lon, images.exif_altitude, images.exif_iso, images.exif_aperture, images.exif_shutter, images.exif_focal, images.exif_flash, images.exif_orientation, images.exif_software, images.ocr_text, images.ocr_language, images.ocr_confidence, images.ocr_has_text, images.ai_description, images.ai_tags, images.ai_confidence, images.ai_model_used, images.ai_processed_at, images.ai_prompt_tokens, images.ai_output_tokens \nFROM images \nWHERE images.id = ?', (1,)) [aiosqlite]
|
|
2026-02-25T02:28:35.166872Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C7EB540>, 'SELECT images.id, images.uuid, images.client_id, images.original_name, images.filename, images.file_path, images.thumbnail_path, images.mime_type, images.file_size, images.width, images.height, images.uploaded_at, images.processing_status, images.processing_error, images.processing_started_at, images.processing_done_at, images.exif_raw, images.exif_make, images.exif_model, images.exif_lens, images.exif_taken_at, images.exif_gps_lat, images.exif_gps_lon, images.exif_altitude, images.exif_iso, images.exif_aperture, images.exif_shutter, images.exif_focal, images.exif_flash, images.exif_orientation, images.exif_software, images.ocr_text, images.ocr_language, images.ocr_confidence, images.ocr_has_text, images.ai_description, images.ai_tags, images.ai_confidence, images.ai_model_used, images.ai_processed_at, images.ai_prompt_tokens, images.ai_output_tokens \nFROM images \nWHERE images.id = ?', (1,)) completed [aiosqlite]
|
|
2026-02-25T02:28:35.167419Z [debug ] executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C7EB540>) [aiosqlite]
|
|
2026-02-25T02:28:35.167717Z [debug ] operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C7EB540>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.168180Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C7EB540>) [aiosqlite]
|
|
2026-02-25T02:28:35.168474Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C7EB540>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.170354Z [debug ] Using proactor: IocpProactor [asyncio]
|
|
2026-02-25T02:28:35.172558Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) [aiosqlite]
|
|
2026-02-25T02:28:35.172754Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.173047Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C80DB40>, 'SELECT api_clients.id, api_clients.name, api_clients.api_key_hash, api_clients.scopes, api_clients."plan", api_clients.is_active, api_clients.storage_used_bytes, api_clients.quota_storage_mb, api_clients.quota_images, api_clients.created_at, api_clients.updated_at \nFROM api_clients \nWHERE api_clients.api_key_hash = ?', ('982e4d62421a0c37943e4a54bc2511f5ca0f29003fd7aa4ae43f7b8e5b29fef1',)) [aiosqlite]
|
|
2026-02-25T02:28:35.173325Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C80DB40>, 'SELECT api_clients.id, api_clients.name, api_clients.api_key_hash, api_clients.scopes, api_clients."plan", api_clients.is_active, api_clients.storage_used_bytes, api_clients.quota_storage_mb, api_clients.quota_images, api_clients.created_at, api_clients.updated_at \nFROM api_clients \nWHERE api_clients.api_key_hash = ?', ('982e4d62421a0c37943e4a54bc2511f5ca0f29003fd7aa4ae43f7b8e5b29fef1',)) completed [aiosqlite]
|
|
2026-02-25T02:28:35.173645Z [debug ] executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C80DB40>) [aiosqlite]
|
|
2026-02-25T02:28:35.173820Z [debug ] operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C80DB40>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.174072Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C80DB40>) [aiosqlite]
|
|
2026-02-25T02:28:35.174229Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C80DB40>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.176203Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) [aiosqlite]
|
|
2026-02-25T02:28:35.176457Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.176781Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C7EB8C0>, 'SELECT images.id, images.uuid, images.client_id, images.original_name, images.filename, images.file_path, images.thumbnail_path, images.mime_type, images.file_size, images.width, images.height, images.uploaded_at, images.processing_status, images.processing_error, images.processing_started_at, images.processing_done_at, images.exif_raw, images.exif_make, images.exif_model, images.exif_lens, images.exif_taken_at, images.exif_gps_lat, images.exif_gps_lon, images.exif_altitude, images.exif_iso, images.exif_aperture, images.exif_shutter, images.exif_focal, images.exif_flash, images.exif_orientation, images.exif_software, images.ocr_text, images.ocr_language, images.ocr_confidence, images.ocr_has_text, images.ai_description, images.ai_tags, images.ai_confidence, images.ai_model_used, images.ai_processed_at, images.ai_prompt_tokens, images.ai_output_tokens \nFROM images \nWHERE images.id = ?', (1,)) [aiosqlite]
|
|
2026-02-25T02:28:35.177026Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C7EB8C0>, 'SELECT images.id, images.uuid, images.client_id, images.original_name, images.filename, images.file_path, images.thumbnail_path, images.mime_type, images.file_size, images.width, images.height, images.uploaded_at, images.processing_status, images.processing_error, images.processing_started_at, images.processing_done_at, images.exif_raw, images.exif_make, images.exif_model, images.exif_lens, images.exif_taken_at, images.exif_gps_lat, images.exif_gps_lon, images.exif_altitude, images.exif_iso, images.exif_aperture, images.exif_shutter, images.exif_focal, images.exif_flash, images.exif_orientation, images.exif_software, images.ocr_text, images.ocr_language, images.ocr_confidence, images.ocr_has_text, images.ai_description, images.ai_tags, images.ai_confidence, images.ai_model_used, images.ai_processed_at, images.ai_prompt_tokens, images.ai_output_tokens \nFROM images \nWHERE images.id = ?', (1,)) completed [aiosqlite]
|
|
2026-02-25T02:28:35.177378Z [debug ] executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C7EB8C0>) [aiosqlite]
|
|
2026-02-25T02:28:35.177553Z [debug ] operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C7EB8C0>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.177831Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C7EB8C0>) [aiosqlite]
|
|
2026-02-25T02:28:35.177990Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C7EB8C0>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.178880Z [debug ] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001F56C729210>) [aiosqlite]
|
|
2026-02-25T02:28:35.180127Z [debug ] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001F56C729210>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.180323Z [error ] Exception terminating connection <AdaptedConnection <Connection(Thread-2, started daemon 27452)>> [sqlalchemy.pool.impl.StaticPool]
|
|
Traceback (most recent call last):
|
|
File "C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\pool\base.py", line 374, in _close_connection
|
|
self._dialect.do_terminate(connection)
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
|
|
File "C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\engine\default.py", line 705, in do_terminate
|
|
self.do_close(dbapi_connection)
|
|
~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
|
|
File "C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\engine\default.py", line 708, in do_close
|
|
dbapi_connection.close()
|
|
~~~~~~~~~~~~~~~~~~~~~~^^
|
|
File "C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\dialects\sqlite\aiosqlite.py", line 275, in close
|
|
self.await_(self._connection.close())
|
|
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
File "C:\Users\bruno\scoop\apps\python\current\Lib\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 "C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 196, in greenlet_spawn
|
|
value = await result
|
|
^^^^^^^^^^^^
|
|
File "C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\aiosqlite\core.py", line 178, in close
|
|
await self._execute(self._conn.close)
|
|
File "C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\aiosqlite\core.py", line 132, in _execute
|
|
return await future
|
|
^^^^^^^^^^^^
|
|
asyncio.exceptions.CancelledError: Cancelled via cancel scope 1f56c7c44d0 by <Task pending name='anyio.from_thread.BlockingPortal._call_func' coro=<BlockingPortal._call_func() running at c:\Users\bruno\scoop\apps\python\3.14.3\Lib\site-packages\anyio\from_thread.py:257> cb=[TaskGroup._spawn.<locals>.task_done() at c:\Users\bruno\scoop\apps\python\3.14.3\Lib\site-packages\anyio\_backends\_asyncio.py:805]>
|
|
2026-02-25T02:28:35.183434Z [debug ] executing functools.partial(<built-in method close of sqlite3.Connection object at 0x000001F56C729210>) [aiosqlite]
|
|
2026-02-25T02:28:35.185937Z [debug ] operation functools.partial(<built-in method close of sqlite3.Connection object at 0x000001F56C729210>) completed [aiosqlite]
|
|
2026-02-25T02:28:35.186468Z [debug
|
|
------------------------------ Captured log call ------------------------------
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C789940>, 'INSERT INTO images (uuid, client_id, original_name, filename, file_path, thumbnail_path, mime_type, file_size, width, height, uploaded_at, processing_status, processing_error, processing_started_at, processing_done_at, exif_make, exif_model, exif_lens, exif_taken_at, exif_gps_lat, exif_gps_lon, exif_altitude, exif_iso, exif_aperture, exif_shutter, exif_focal, exif_flash, exif_orientation, exif_software, ocr_text, ocr_language, ocr_confidence, ocr_has_text, ai_description, ai_confidence, ai_model_used, ai_processed_at, ai_prompt_tokens, ai_output_tokens) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', ('be8b8fd9-3517-4e69-8708-c7eef0dfff5b', 'ead8707d-34f8-4468-9fe3-4f912ac57e5d', 'test.jpg', 'test.jpg', '/data/test.jpg', None, None, None, None, None, '2026-02-25 02:28:35.140847', 'DONE', None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0, None, None, None, None, None, None))
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C789940>, 'INSERT INTO images (uuid, client_id, original_name, filename, file_path, thumbnail_path, mime_type, file_size, width, height, uploaded_at, processing_status, processing_error, processing_started_at, processing_done_at, exif_make, exif_model, exif_lens, exif_taken_at, exif_gps_lat, exif_gps_lon, exif_altitude, exif_iso, exif_aperture, exif_shutter, exif_focal, exif_flash, exif_orientation, exif_software, ocr_text, ocr_language, ocr_confidence, ocr_has_text, ai_description, ai_confidence, ai_model_used, ai_processed_at, ai_prompt_tokens, ai_output_tokens) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', ('be8b8fd9-3517-4e69-8708-c7eef0dfff5b', 'ead8707d-34f8-4468-9fe3-4f912ac57e5d', 'test.jpg', 'test.jpg', '/data/test.jpg', None, None, None, None, None, '2026-02-25 02:28:35.140847', 'DONE', None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0, None, None, None, None, None, None)) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C789940>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C789940>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001F56C729210>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001F56C729210>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001F56C729210>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001F56C729210>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C7EB540>, 'SELECT images.id, images.uuid, images.client_id, images.original_name, images.filename, images.file_path, images.thumbnail_path, images.mime_type, images.file_size, images.width, images.height, images.uploaded_at, images.processing_status, images.processing_error, images.processing_started_at, images.processing_done_at, images.exif_raw, images.exif_make, images.exif_model, images.exif_lens, images.exif_taken_at, images.exif_gps_lat, images.exif_gps_lon, images.exif_altitude, images.exif_iso, images.exif_aperture, images.exif_shutter, images.exif_focal, images.exif_flash, images.exif_orientation, images.exif_software, images.ocr_text, images.ocr_language, images.ocr_confidence, images.ocr_has_text, images.ai_description, images.ai_tags, images.ai_confidence, images.ai_model_used, images.ai_processed_at, images.ai_prompt_tokens, images.ai_output_tokens \nFROM images \nWHERE images.id = ?', (1,))
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C7EB540>, 'SELECT images.id, images.uuid, images.client_id, images.original_name, images.filename, images.file_path, images.thumbnail_path, images.mime_type, images.file_size, images.width, images.height, images.uploaded_at, images.processing_status, images.processing_error, images.processing_started_at, images.processing_done_at, images.exif_raw, images.exif_make, images.exif_model, images.exif_lens, images.exif_taken_at, images.exif_gps_lat, images.exif_gps_lon, images.exif_altitude, images.exif_iso, images.exif_aperture, images.exif_shutter, images.exif_focal, images.exif_flash, images.exif_orientation, images.exif_software, images.ocr_text, images.ocr_language, images.ocr_confidence, images.ocr_has_text, images.ai_description, images.ai_tags, images.ai_confidence, images.ai_model_used, images.ai_processed_at, images.ai_prompt_tokens, images.ai_output_tokens \nFROM images \nWHERE images.id = ?', (1,)) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C7EB540>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C7EB540>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C7EB540>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C7EB540>) completed
|
|
DEBUG asyncio:proactor_events.py:633 Using proactor: IocpProactor
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C80DB40>, 'SELECT api_clients.id, api_clients.name, api_clients.api_key_hash, api_clients.scopes, api_clients."plan", api_clients.is_active, api_clients.storage_used_bytes, api_clients.quota_storage_mb, api_clients.quota_images, api_clients.created_at, api_clients.updated_at \nFROM api_clients \nWHERE api_clients.api_key_hash = ?', ('982e4d62421a0c37943e4a54bc2511f5ca0f29003fd7aa4ae43f7b8e5b29fef1',))
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C80DB40>, 'SELECT api_clients.id, api_clients.name, api_clients.api_key_hash, api_clients.scopes, api_clients."plan", api_clients.is_active, api_clients.storage_used_bytes, api_clients.quota_storage_mb, api_clients.quota_images, api_clients.created_at, api_clients.updated_at \nFROM api_clients \nWHERE api_clients.api_key_hash = ?', ('982e4d62421a0c37943e4a54bc2511f5ca0f29003fd7aa4ae43f7b8e5b29fef1',)) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C80DB40>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C80DB40>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C80DB40>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C80DB40>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001F56C729210>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C7EB8C0>, 'SELECT images.id, images.uuid, images.client_id, images.original_name, images.filename, images.file_path, images.thumbnail_path, images.mime_type, images.file_size, images.width, images.height, images.uploaded_at, images.processing_status, images.processing_error, images.processing_started_at, images.processing_done_at, images.exif_raw, images.exif_make, images.exif_model, images.exif_lens, images.exif_taken_at, images.exif_gps_lat, images.exif_gps_lon, images.exif_altitude, images.exif_iso, images.exif_aperture, images.exif_shutter, images.exif_focal, images.exif_flash, images.exif_orientation, images.exif_software, images.ocr_text, images.ocr_language, images.ocr_confidence, images.ocr_has_text, images.ai_description, images.ai_tags, images.ai_confidence, images.ai_model_used, images.ai_processed_at, images.ai_prompt_tokens, images.ai_output_tokens \nFROM images \nWHERE images.id = ?', (1,))
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001F56C7EB8C0>, 'SELECT images.id, images.uuid, images.client_id, images.original_name, images.filename, images.file_path, images.thumbnail_path, images.mime_type, images.file_size, images.width, images.height, images.uploaded_at, images.processing_status, images.processing_error, images.processing_started_at, images.processing_done_at, images.exif_raw, images.exif_make, images.exif_model, images.exif_lens, images.exif_taken_at, images.exif_gps_lat, images.exif_gps_lon, images.exif_altitude, images.exif_iso, images.exif_aperture, images.exif_shutter, images.exif_focal, images.exif_flash, images.exif_orientation, images.exif_software, images.ocr_text, images.ocr_language, images.ocr_confidence, images.ocr_has_text, images.ai_description, images.ai_tags, images.ai_confidence, images.ai_model_used, images.ai_processed_at, images.ai_prompt_tokens, images.ai_output_tokens \nFROM images \nWHERE images.id = ?', (1,)) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C7EB8C0>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001F56C7EB8C0>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C7EB8C0>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001F56C7EB8C0>) completed
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001F56C729210>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001F56C729210>) completed
|
|
ERROR sqlalchemy.pool.impl.StaticPool:base.py:378 Exception terminating connection <AdaptedConnection <Connection(Thread-2, started daemon 27452)>>
|
|
Traceback (most recent call last):
|
|
File "C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\pool\base.py", line 374, in _close_connection
|
|
self._dialect.do_terminate(connection)
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
|
|
File "C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\engine\default.py", line 705, in do_terminate
|
|
self.do_close(dbapi_connection)
|
|
~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
|
|
File "C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\engine\default.py", line 708, in do_close
|
|
dbapi_connection.close()
|
|
~~~~~~~~~~~~~~~~~~~~~~^^
|
|
File "C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\dialects\sqlite\aiosqlite.py", line 275, in close
|
|
self.await_(self._connection.close())
|
|
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
File "C:\Users\bruno\scoop\apps\python\current\Lib\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 "C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 196, in greenlet_spawn
|
|
value = await result
|
|
^^^^^^^^^^^^
|
|
File "C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\aiosqlite\core.py", line 178, in close
|
|
await self._execute(self._conn.close)
|
|
File "C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\aiosqlite\core.py", line 132, in _execute
|
|
return await future
|
|
^^^^^^^^^^^^
|
|
asyncio.exceptions.CancelledError: Cancelled via cancel scope 1f56c7c44d0 by <Task pending name='anyio.from_thread.BlockingPortal._call_func' coro=<BlockingPortal._call_func() running at c:\Users\bruno\scoop\apps\python\3.14.3\Lib\site-packages\anyio\from_thread.py:257> cb=[TaskGroup._spawn.<locals>.task_done() at c:\Users\bruno\scoop\apps\python\3.14.3\Lib\site-packages\anyio\_backends\_asyncio.py:805]>
|
|
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Connection object at 0x000001F56C729210>)
|
|
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Connection object at 0x000001F56C729210>) completed
|
|
-------------------------- Captured stdout teardown ---------------------------
|
|
|