Files
Imago/tests_failed.log
bruno 2f2a5e9b4a
CI / Lint & Format (push) Failing after 28s
CI / Tests (push) Has been skipped
CI / Security Scan (push) Failing after 8s
CI / Docker Build (push) Has been skipped
Add admin panel, WebSocket support, and API versioning
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.
2026-06-22 11:25:22 -04:00

801 lines
137 KiB
Plaintext

c:\Users\bruno\scoop\apps\python\3.14.3\Lib\site-packages\pytest_asyncio\plugin.py:208: PytestDeprecationWarning: The configuration option "asyncio_default_fixture_loop_scope" is unset.
The event loop scope for asynchronous fixtures will default to the fixture caching scope. Future versions of pytest-asyncio will default the loop scope for asynchronous fixtures to function scope. Set the default fixture loop scope explicitly in order to avoid unexpected behavior in the future. Valid fixture loop scopes are: "function", "class", "module", "package", "session"
warnings.warn(PytestDeprecationWarning(_DEFAULT_FIXTURE_LOOP_SCOPE_UNSET))
============================= test session starts =============================
platform win32 -- Python 3.14.3, pytest-8.3.3, pluggy-1.6.0
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
collected 88 items
tests\test_ai_extended.py ... [ 3%]
tests\test_ai_vision_extended.py .... [ 7%]
tests\test_ai_vision_internals.py ........ [ 17%]
tests\test_auth.py ............. [ 31%]
tests\test_database_extended.py . [ 32%]
tests\test_db_generator.py .. [ 35%]
tests\test_exif_extended.py .F [ 37%]
tests\test_images_extended.py ...... [ 44%]
tests\test_isolation.py ...... [ 51%]
tests\test_main_extended.py ... [ 54%]
tests\test_middleware_extended.py .... [ 59%]
tests\test_ocr_extended.py .F. [ 62%]
tests\test_pipeline_extended.py .... [ 67%]
tests\test_rate_limit.py ... [ 70%]
tests\test_scraper_extended.py ... [ 73%]
tests\test_services.py ....... [ 81%]
tests\test_storage_extended.py ...F [ 86%]
tests\test_versioning.py .... [ 90%]
tests\test_websocket.py ........ [100%]
================================== FAILURES ===================================
__________________________ test_extract_exif_success __________________________
tests\test_exif_extended.py:51: in test_extract_exif_success
assert result["make"] == "Canon"
E AssertionError: assert None == 'Canon'
---------------------------- Captured stdout setup ----------------------------
2026-02-25T16:07:54.830429Z [debug ] Using proactor: IocpProactor [asyncio]
2026-02-25T16:07:54.831433Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:54.831697Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:54.832036Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE0EFAC0>, 'PRAGMA main.table_info("images")', ()) [aiosqlite]
2026-02-25T16:07:54.832284Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE0EFAC0>, 'PRAGMA main.table_info("images")', ()) completed [aiosqlite]
2026-02-25T16:07:54.832628Z [debug ] executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE0EFAC0>) [aiosqlite]
2026-02-25T16:07:54.832882Z [debug ] operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE0EFAC0>) completed [aiosqlite]
2026-02-25T16:07:54.833206Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE0EFAC0>) [aiosqlite]
2026-02-25T16:07:54.833333Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE0EFAC0>) completed [aiosqlite]
2026-02-25T16:07:54.833633Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:54.833760Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:54.833975Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE0920C0>, 'PRAGMA temp.table_info("images")', ()) [aiosqlite]
2026-02-25T16:07:54.834127Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE0920C0>, 'PRAGMA temp.table_info("images")', ()) completed [aiosqlite]
2026-02-25T16:07:54.834368Z [debug ] executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE0920C0>) [aiosqlite]
2026-02-25T16:07:54.834494Z [debug ] operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE0920C0>) completed [aiosqlite]
2026-02-25T16:07:54.834754Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE0920C0>) [aiosqlite]
2026-02-25T16:07:54.834880Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE0920C0>) completed [aiosqlite]
2026-02-25T16:07:54.835193Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:54.835337Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:54.835544Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE0907C0>, 'PRAGMA main.table_info("api_clients")', ()) [aiosqlite]
2026-02-25T16:07:54.835691Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE0907C0>, 'PRAGMA main.table_info("api_clients")', ()) completed [aiosqlite]
2026-02-25T16:07:54.835897Z [debug ] executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE0907C0>) [aiosqlite]
2026-02-25T16:07:54.836023Z [debug ] operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE0907C0>) completed [aiosqlite]
2026-02-25T16:07:54.836254Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE0907C0>) [aiosqlite]
2026-02-25T16:07:54.836377Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE0907C0>) completed [aiosqlite]
2026-02-25T16:07:54.836619Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:54.836773Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:54.836972Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE091040>, 'PRAGMA temp.table_info("api_clients")', ()) [aiosqlite]
2026-02-25T16:07:54.837111Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE091040>, 'PRAGMA temp.table_info("api_clients")', ()) completed [aiosqlite]
2026-02-25T16:07:54.837306Z [debug ] executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE091040>) [aiosqlite]
2026-02-25T16:07:54.837430Z [debug ] operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE091040>) completed [aiosqlite]
2026-02-25T16:07:54.837616Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE091040>) [aiosqlite]
2026-02-25T16:07:54.837739Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE091040>) completed [aiosqlite]
2026-02-25T16:07:54.838234Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:54.838359Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:54.838559Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE090440>, '\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-25T16:07:54.838827Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE090440>, '\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-25T16:07:54.839062Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE090440>) [aiosqlite]
2026-02-25T16:07:54.839189Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE090440>) completed [aiosqlite]
2026-02-25T16:07:54.839453Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:54.839580Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:54.839773Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE0902C0>, 'CREATE UNIQUE INDEX ix_api_clients_api_key_hash ON api_clients (api_key_hash)', ()) [aiosqlite]
2026-02-25T16:07:54.839970Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE0902C0>, 'CREATE UNIQUE INDEX ix_api_clients_api_key_hash ON api_clients (api_key_hash)', ()) completed [aiosqlite]
2026-02-25T16:07:54.840176Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE0902C0>) [aiosqlite]
2026-02-25T16:07:54.840307Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE0902C0>) completed [aiosqlite]
2026-02-25T16:07:54.840649Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:54.840804Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:54.841033Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE090140>, 'CREATE INDEX ix_api_clients_id ON api_clients (id)', ()) [aiosqlite]
2026-02-25T16:07:54.841237Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE090140>, 'CREATE INDEX ix_api_clients_id ON api_clients (id)', ()) completed [aiosqlite]
2026-02-25T16:07:54.841474Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE090140>) [aiosqlite]
2026-02-25T16:07:54.841653Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE090140>) completed [aiosqlite]
2026-02-25T16:07:54.842468Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:54.842627Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:54.842896Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE091EC0>, '\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-25T16:07:54.843231Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE091EC0>, '\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-25T16:07:54.843520Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE091EC0>) [aiosqlite]
2026-02-25T16:07:54.843653Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE091EC0>) completed [aiosqlite]
2026-02-25T16:07:54.843929Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:54.844059Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:54.844273Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE091440>, 'CREATE UNIQUE INDEX ix_images_uuid ON images (uuid)', ()) [aiosqlite]
2026-02-25T16:07:54.844484Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE091440>, 'CREATE UNIQUE INDEX ix_images_uuid ON images (uuid)', ()) completed [aiosqlite]
2026-02-25T16:07:54.844702Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE091440>) [aiosqlite]
2026-02-25T16:07:54.844836Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE091440>) completed [aiosqlite]
2026-02-25T16:07:54.845093Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:54.845224Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:54.845421Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE091340>, 'CREATE INDEX ix_images_id ON images (id)', ()) [aiosqlite]
2026-02-25T16:07:54.845608Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE091340>, 'CREATE INDEX ix_images_id ON images (id)', ()) completed [aiosqlite]
2026-02-25T16:07:54.845825Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE091340>) [aiosqlite]
2026-02-25T16:07:54.845951Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE091340>) completed [aiosqlite]
2026-02-25T16:07:54.846188Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:54.846313Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:54.846503Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE093240>, 'CREATE INDEX ix_images_client_id ON images (client_id)', ()) [aiosqlite]
2026-02-25T16:07:54.846688Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE093240>, 'CREATE INDEX ix_images_client_id ON images (client_id)', ()) completed [aiosqlite]
2026-02-25T16:07:54.846894Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE093240>) [aiosqlite]
2026-02-25T16:07:54.847019Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE093240>) completed [aiosqlite]
2026-02-25T16:07:54.847249Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:54.847379Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:54.847589Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE0921C0>, 'CREATE INDEX ix_images_processing_status ON images (processing_status)', ()) [aiosqlite]
2026-02-25T16:07:54.847775Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE0921C0>, 'CREATE INDEX ix_images_processing_status ON images (processing_status)', ()) completed [aiosqlite]
2026-02-25T16:07:54.848034Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE0921C0>) [aiosqlite]
2026-02-25T16:07:54.848161Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE0921C0>) completed [aiosqlite]
2026-02-25T16:07:54.848410Z [debug ] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:54.848536Z [debug ] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:54.848779Z [debug ] executing functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:54.848905Z [debug ] operation functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001B9AE0B2D40>) 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 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE0EFAC0>, 'PRAGMA main.table_info("images")', ())
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE0EFAC0>, 'PRAGMA main.table_info("images")', ()) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE0EFAC0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE0EFAC0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE0EFAC0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE0EFAC0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE0920C0>, 'PRAGMA temp.table_info("images")', ())
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE0920C0>, 'PRAGMA temp.table_info("images")', ()) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE0920C0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE0920C0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE0920C0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE0920C0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE0907C0>, 'PRAGMA main.table_info("api_clients")', ())
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE0907C0>, 'PRAGMA main.table_info("api_clients")', ()) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE0907C0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE0907C0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE0907C0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE0907C0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE091040>, 'PRAGMA temp.table_info("api_clients")', ())
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE091040>, 'PRAGMA temp.table_info("api_clients")', ()) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE091040>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE091040>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE091040>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE091040>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE090440>, '\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 0x000001B9AE090440>, '\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 0x000001B9AE090440>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE090440>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE0902C0>, '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 0x000001B9AE0902C0>, '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 0x000001B9AE0902C0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE0902C0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE090140>, '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 0x000001B9AE090140>, '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 0x000001B9AE090140>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE090140>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE091EC0>, '\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 0x000001B9AE091EC0>, '\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 0x000001B9AE091EC0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE091EC0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE091440>, '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 0x000001B9AE091440>, '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 0x000001B9AE091440>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE091440>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE091340>, '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 0x000001B9AE091340>, '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 0x000001B9AE091340>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE091340>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE093240>, '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 0x000001B9AE093240>, '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 0x000001B9AE093240>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE093240>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE0921C0>, '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 0x000001B9AE0921C0>, '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 0x000001B9AE0921C0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE0921C0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
---------------------------- Captured stdout call -----------------------------
2026-02-25T16:07:54.850868Z [error ] exif.extraction_error [app.services.exif_service] error=[Errno 2] No such file or directory: 'data\\fake\\path.jpg' file=fake/path.jpg
------------------------------ Captured log call ------------------------------
ERROR app.services.exif_service:exif_service.py:174 exif.extraction_error
-------------------------- Captured stdout teardown ---------------------------
2026-02-25T16:07:55.133645Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:55.134053Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:55.134477Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE368140>, 'PRAGMA main.table_info("images")', ()) [aiosqlite]
2026-02-25T16:07:55.134786Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE368140>, 'PRAGMA main.table_info("images")', ()) completed [aiosqlite]
2026-02-25T16:07:55.135125Z [debug ] executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE368140>) [aiosqlite]
2026-02-25T16:07:55.135385Z [debug ] operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE368140>) completed [aiosqlite]
2026-02-25T16:07:55.135620Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE368140>) [aiosqlite]
2026-02-25T16:07:55.135758Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE368140>) completed [aiosqlite]
2026-02-25T16:07:55.136131Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:55.136268Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:55.136563Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE368340>, 'PRAGMA main.table_info("api_clients")', ()) [aiosqlite]
2026-02-25T16:07:55.136720Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE368340>, 'PRAGMA main.table_info("api_clients")', ()) completed [aiosqlite]
2026-02-25T16:07:55.137021Z [debug ] executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE368340>) [aiosqlite]
2026-02-25T16:07:55.137170Z [debug ] operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE368340>) completed [aiosqlite]
2026-02-25T16:07:55.137405Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE368340>) [aiosqlite]
2026-02-25T16:07:55.137531Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE368340>) completed [aiosqlite]
2026-02-25T16:07:55.137944Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:55.138071Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:55.138296Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE3682C0>, '\nDROP TABLE images', ()) [aiosqlite]
2026-02-25T16:07:55.138687Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE3682C0>, '\nDROP TABLE images', ()) completed [aiosqlite]
2026-02-25T16:07:55.138928Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE3682C0>) [aiosqlite]
2026-02-25T16:07:55.139055Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE3682C0>) completed [aiosqlite]
2026-02-25T16:07:55.139346Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:55.139470Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:55.139666Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE3684C0>, '\nDROP TABLE api_clients', ()) [aiosqlite]
2026-02-25T16:07:55.139874Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE3684C0>, '\nDROP TABLE api_clients', ()) completed [aiosqlite]
2026-02-25T16:07:55.140076Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE3684C0>) [aiosqlite]
2026-02-25T16:07:55.140200Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE3684C0>) completed [aiosqlite]
2026-02-25T16:07:55.140508Z [debug ] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:55.140636Z [debug ] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:55.140882Z [debug ] executing functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:55.141007Z [debug ] operation functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:55.141509Z [debug ] Using proactor: IocpProactor [asyncio]
---------------------------- Captured log teardown ----------------------------
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE368140>, 'PRAGMA main.table_info("images")', ())
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE368140>, 'PRAGMA main.table_info("images")', ()) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE368140>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE368140>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE368140>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE368140>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE368340>, 'PRAGMA main.table_info("api_clients")', ())
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE368340>, 'PRAGMA main.table_info("api_clients")', ()) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE368340>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE368340>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE368340>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE368340>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE3682C0>, '\nDROP TABLE images', ())
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE3682C0>, '\nDROP TABLE images', ()) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE3682C0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE3682C0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE3684C0>, '\nDROP TABLE api_clients', ())
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE3684C0>, '\nDROP TABLE api_clients', ()) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE3684C0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE3684C0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG asyncio:proactor_events.py:633 Using proactor: IocpProactor
__________________________ test_extract_text_success __________________________
app\services\ocr_service.py:62: in extract_text
image_bytes = await backend.get_bytes(file_path)
app\services\storage_backend.py:111: in get_bytes
async with aiofiles.open(full, "rb") as f:
C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\aiofiles\base.py:63: in __aenter__
return await self
C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\aiofiles\base.py:59: in __await__
self._obj = yield from self._coro.__await__()
C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\aiofiles\threadpool\__init__.py:92: in _open
f = await loop.run_in_executor(executor, cb)
C:\Users\bruno\scoop\apps\python\current\Lib\concurrent\futures\thread.py:86: in run
result = ctx.run(self.task)
C:\Users\bruno\scoop\apps\python\current\Lib\concurrent\futures\thread.py:73: in run
return fn(*args, **kwargs)
E FileNotFoundError: [Errno 2] No such file or directory: 'data\\fake\\path.jpg'
During handling of the above exception, another exception occurred:
tests\test_ocr_extended.py:30: in test_extract_text_success
result = await extract_text("fake/path.jpg")
app\services\ocr_service.py:104: in extract_text
except pytesseract.TesseractNotFoundError:
E TypeError: catching classes that do not inherit from BaseException is not allowed
---------------------------- Captured stdout setup ----------------------------
2026-02-25T16:07:56.240021Z [debug ] Using proactor: IocpProactor [asyncio]
2026-02-25T16:07:56.241041Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:56.241223Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:56.241494Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE369840>, 'PRAGMA main.table_info("images")', ()) [aiosqlite]
2026-02-25T16:07:56.241780Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE369840>, 'PRAGMA main.table_info("images")', ()) completed [aiosqlite]
2026-02-25T16:07:56.242097Z [debug ] executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE369840>) [aiosqlite]
2026-02-25T16:07:56.242234Z [debug ] operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE369840>) completed [aiosqlite]
2026-02-25T16:07:56.242432Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE369840>) [aiosqlite]
2026-02-25T16:07:56.242562Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE369840>) completed [aiosqlite]
2026-02-25T16:07:56.242834Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:56.242966Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:56.243186Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE061540>, 'PRAGMA temp.table_info("images")', ()) [aiosqlite]
2026-02-25T16:07:56.243333Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE061540>, 'PRAGMA temp.table_info("images")', ()) completed [aiosqlite]
2026-02-25T16:07:56.243549Z [debug ] executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE061540>) [aiosqlite]
2026-02-25T16:07:56.243698Z [debug ] operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE061540>) completed [aiosqlite]
2026-02-25T16:07:56.243900Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE061540>) [aiosqlite]
2026-02-25T16:07:56.244025Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE061540>) completed [aiosqlite]
2026-02-25T16:07:56.244355Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:56.244483Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:56.244712Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE061EC0>, 'PRAGMA main.table_info("api_clients")', ()) [aiosqlite]
2026-02-25T16:07:56.244859Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE061EC0>, 'PRAGMA main.table_info("api_clients")', ()) completed [aiosqlite]
2026-02-25T16:07:56.245081Z [debug ] executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE061EC0>) [aiosqlite]
2026-02-25T16:07:56.245207Z [debug ] operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE061EC0>) completed [aiosqlite]
2026-02-25T16:07:56.245415Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE061EC0>) [aiosqlite]
2026-02-25T16:07:56.245538Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE061EC0>) completed [aiosqlite]
2026-02-25T16:07:56.245829Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:56.245955Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:56.246168Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE060BC0>, 'PRAGMA temp.table_info("api_clients")', ()) [aiosqlite]
2026-02-25T16:07:56.246310Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE060BC0>, 'PRAGMA temp.table_info("api_clients")', ()) completed [aiosqlite]
2026-02-25T16:07:56.246512Z [debug ] executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE060BC0>) [aiosqlite]
2026-02-25T16:07:56.246637Z [debug ] operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE060BC0>) completed [aiosqlite]
2026-02-25T16:07:56.246840Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE060BC0>) [aiosqlite]
2026-02-25T16:07:56.246964Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE060BC0>) completed [aiosqlite]
2026-02-25T16:07:56.247469Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:56.247602Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:56.247804Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE0628C0>, '\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-25T16:07:56.248071Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE0628C0>, '\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-25T16:07:56.248310Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE0628C0>) [aiosqlite]
2026-02-25T16:07:56.248438Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE0628C0>) completed [aiosqlite]
2026-02-25T16:07:56.248702Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:56.248829Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:56.249048Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48D4C0>, 'CREATE UNIQUE INDEX ix_api_clients_api_key_hash ON api_clients (api_key_hash)', ()) [aiosqlite]
2026-02-25T16:07:56.249378Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48D4C0>, 'CREATE UNIQUE INDEX ix_api_clients_api_key_hash ON api_clients (api_key_hash)', ()) completed [aiosqlite]
2026-02-25T16:07:56.249698Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48D4C0>) [aiosqlite]
2026-02-25T16:07:56.249914Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48D4C0>) completed [aiosqlite]
2026-02-25T16:07:56.250245Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:56.250370Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:56.250564Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48FD40>, 'CREATE INDEX ix_api_clients_id ON api_clients (id)', ()) [aiosqlite]
2026-02-25T16:07:56.250757Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48FD40>, 'CREATE INDEX ix_api_clients_id ON api_clients (id)', ()) completed [aiosqlite]
2026-02-25T16:07:56.250968Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48FD40>) [aiosqlite]
2026-02-25T16:07:56.251093Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48FD40>) completed [aiosqlite]
2026-02-25T16:07:56.251677Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:56.251809Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:56.252017Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE436340>, '\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-25T16:07:56.252343Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE436340>, '\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-25T16:07:56.252615Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE436340>) [aiosqlite]
2026-02-25T16:07:56.252744Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE436340>) completed [aiosqlite]
2026-02-25T16:07:56.252989Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:56.253212Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:56.253439Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48FAC0>, 'CREATE UNIQUE INDEX ix_images_uuid ON images (uuid)', ()) [aiosqlite]
2026-02-25T16:07:56.253640Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48FAC0>, 'CREATE UNIQUE INDEX ix_images_uuid ON images (uuid)', ()) completed [aiosqlite]
2026-02-25T16:07:56.253857Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48FAC0>) [aiosqlite]
2026-02-25T16:07:56.253990Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48FAC0>) completed [aiosqlite]
2026-02-25T16:07:56.254301Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:56.254435Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:56.254735Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48CD40>, 'CREATE INDEX ix_images_id ON images (id)', ()) [aiosqlite]
2026-02-25T16:07:56.254957Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48CD40>, 'CREATE INDEX ix_images_id ON images (id)', ()) completed [aiosqlite]
2026-02-25T16:07:56.255194Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48CD40>) [aiosqlite]
2026-02-25T16:07:56.255331Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48CD40>) completed [aiosqlite]
2026-02-25T16:07:56.255615Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:56.255758Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:56.255966Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48EA40>, 'CREATE INDEX ix_images_client_id ON images (client_id)', ()) [aiosqlite]
2026-02-25T16:07:56.256188Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48EA40>, 'CREATE INDEX ix_images_client_id ON images (client_id)', ()) completed [aiosqlite]
2026-02-25T16:07:56.256448Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48EA40>) [aiosqlite]
2026-02-25T16:07:56.256580Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48EA40>) completed [aiosqlite]
2026-02-25T16:07:56.256923Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:56.257060Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:56.257325Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48F840>, 'CREATE INDEX ix_images_processing_status ON images (processing_status)', ()) [aiosqlite]
2026-02-25T16:07:56.257523Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48F840>, 'CREATE INDEX ix_images_processing_status ON images (processing_status)', ()) completed [aiosqlite]
2026-02-25T16:07:56.257781Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48F840>) [aiosqlite]
2026-02-25T16:07:56.257913Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48F840>) completed [aiosqlite]
2026-02-25T16:07:56.258244Z [debug ] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:56.258373Z [debug ] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:56.258682Z [debug ] executing functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:56.258924Z [debug ] operation functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001B9AE0B2D40>) 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 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE369840>, 'PRAGMA main.table_info("images")', ())
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE369840>, 'PRAGMA main.table_info("images")', ()) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE369840>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE369840>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE369840>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE369840>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE061540>, 'PRAGMA temp.table_info("images")', ())
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE061540>, 'PRAGMA temp.table_info("images")', ()) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE061540>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE061540>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE061540>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE061540>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE061EC0>, 'PRAGMA main.table_info("api_clients")', ())
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE061EC0>, 'PRAGMA main.table_info("api_clients")', ()) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE061EC0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE061EC0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE061EC0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE061EC0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE060BC0>, 'PRAGMA temp.table_info("api_clients")', ())
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE060BC0>, 'PRAGMA temp.table_info("api_clients")', ()) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE060BC0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE060BC0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE060BC0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE060BC0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE0628C0>, '\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 0x000001B9AE0628C0>, '\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 0x000001B9AE0628C0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE0628C0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48D4C0>, '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 0x000001B9AE48D4C0>, '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 0x000001B9AE48D4C0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48D4C0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48FD40>, '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 0x000001B9AE48FD40>, '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 0x000001B9AE48FD40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48FD40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE436340>, '\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 0x000001B9AE436340>, '\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 0x000001B9AE436340>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE436340>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48FAC0>, '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 0x000001B9AE48FAC0>, '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 0x000001B9AE48FAC0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48FAC0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48CD40>, '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 0x000001B9AE48CD40>, '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 0x000001B9AE48CD40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48CD40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48EA40>, '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 0x000001B9AE48EA40>, '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 0x000001B9AE48EA40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48EA40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48F840>, '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 0x000001B9AE48F840>, '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 0x000001B9AE48F840>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48F840>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
-------------------------- Captured stdout teardown ---------------------------
2026-02-25T16:07:56.278360Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:56.278790Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:56.279182Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE170540>, 'PRAGMA main.table_info("images")', ()) [aiosqlite]
2026-02-25T16:07:56.279373Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE170540>, 'PRAGMA main.table_info("images")', ()) completed [aiosqlite]
2026-02-25T16:07:56.279605Z [debug ] executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE170540>) [aiosqlite]
2026-02-25T16:07:56.279769Z [debug ] operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE170540>) completed [aiosqlite]
2026-02-25T16:07:56.279976Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE170540>) [aiosqlite]
2026-02-25T16:07:56.280107Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE170540>) completed [aiosqlite]
2026-02-25T16:07:56.280416Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:56.280546Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:56.280748Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE4357C0>, 'PRAGMA main.table_info("api_clients")', ()) [aiosqlite]
2026-02-25T16:07:56.280900Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE4357C0>, 'PRAGMA main.table_info("api_clients")', ()) completed [aiosqlite]
2026-02-25T16:07:56.281103Z [debug ] executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE4357C0>) [aiosqlite]
2026-02-25T16:07:56.281241Z [debug ] operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE4357C0>) completed [aiosqlite]
2026-02-25T16:07:56.281438Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE4357C0>) [aiosqlite]
2026-02-25T16:07:56.281562Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE4357C0>) completed [aiosqlite]
2026-02-25T16:07:56.281913Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:56.282044Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:56.282241Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE4358C0>, '\nDROP TABLE images', ()) [aiosqlite]
2026-02-25T16:07:56.282502Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE4358C0>, '\nDROP TABLE images', ()) completed [aiosqlite]
2026-02-25T16:07:56.282719Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE4358C0>) [aiosqlite]
2026-02-25T16:07:56.282846Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE4358C0>) completed [aiosqlite]
2026-02-25T16:07:56.283151Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:56.283281Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:56.283481Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE4349C0>, '\nDROP TABLE api_clients', ()) [aiosqlite]
2026-02-25T16:07:56.283698Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE4349C0>, '\nDROP TABLE api_clients', ()) completed [aiosqlite]
2026-02-25T16:07:56.283987Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE4349C0>) [aiosqlite]
2026-02-25T16:07:56.284252Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE4349C0>) completed [aiosqlite]
2026-02-25T16:07:56.284780Z [debug ] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:56.285001Z [debug ] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:56.285299Z [debug ] executing functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:56.285462Z [debug ] operation functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:56.286126Z [debug ] Using proactor: IocpProactor [asyncio]
---------------------------- Captured log teardown ----------------------------
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE170540>, 'PRAGMA main.table_info("images")', ())
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE170540>, 'PRAGMA main.table_info("images")', ()) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE170540>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE170540>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE170540>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE170540>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE4357C0>, 'PRAGMA main.table_info("api_clients")', ())
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE4357C0>, 'PRAGMA main.table_info("api_clients")', ()) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE4357C0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE4357C0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE4357C0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE4357C0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE4358C0>, '\nDROP TABLE images', ())
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE4358C0>, '\nDROP TABLE images', ()) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE4358C0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE4358C0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE4349C0>, '\nDROP TABLE api_clients', ())
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE4349C0>, '\nDROP TABLE api_clients', ()) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE4349C0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE4349C0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG asyncio:proactor_events.py:633 Using proactor: IocpProactor
_____________________________ test_get_image_url ______________________________
tests\test_storage_extended.py:44: in test_get_image_url
storage = LocalStorage("/")
E TypeError: LocalStorage.__init__() missing 1 required positional argument: 'secret'
---------------------------- Captured stdout setup ----------------------------
2026-02-25T16:07:57.905339Z [debug ] Using proactor: IocpProactor [asyncio]
2026-02-25T16:07:57.906762Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:57.907143Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:57.907554Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE3693C0>, 'PRAGMA main.table_info("images")', ()) [aiosqlite]
2026-02-25T16:07:57.907755Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE3693C0>, 'PRAGMA main.table_info("images")', ()) completed [aiosqlite]
2026-02-25T16:07:57.908172Z [debug ] executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE3693C0>) [aiosqlite]
2026-02-25T16:07:57.908570Z [debug ] operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE3693C0>) completed [aiosqlite]
2026-02-25T16:07:57.908859Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE3693C0>) [aiosqlite]
2026-02-25T16:07:57.909068Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE3693C0>) completed [aiosqlite]
2026-02-25T16:07:57.909532Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:57.909725Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:57.910014Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE368A40>, 'PRAGMA temp.table_info("images")', ()) [aiosqlite]
2026-02-25T16:07:57.910259Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE368A40>, 'PRAGMA temp.table_info("images")', ()) completed [aiosqlite]
2026-02-25T16:07:57.910547Z [debug ] executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE368A40>) [aiosqlite]
2026-02-25T16:07:57.910738Z [debug ] operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE368A40>) completed [aiosqlite]
2026-02-25T16:07:57.910982Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE368A40>) [aiosqlite]
2026-02-25T16:07:57.911139Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE368A40>) completed [aiosqlite]
2026-02-25T16:07:57.911530Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:57.911691Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:57.911977Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE36AFC0>, 'PRAGMA main.table_info("api_clients")', ()) [aiosqlite]
2026-02-25T16:07:57.912185Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE36AFC0>, 'PRAGMA main.table_info("api_clients")', ()) completed [aiosqlite]
2026-02-25T16:07:57.912446Z [debug ] executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE36AFC0>) [aiosqlite]
2026-02-25T16:07:57.912610Z [debug ] operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE36AFC0>) completed [aiosqlite]
2026-02-25T16:07:57.912859Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE36AFC0>) [aiosqlite]
2026-02-25T16:07:57.913003Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE36AFC0>) completed [aiosqlite]
2026-02-25T16:07:57.913325Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:57.913469Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:57.913758Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE29FE40>, 'PRAGMA temp.table_info("api_clients")', ()) [aiosqlite]
2026-02-25T16:07:57.913935Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE29FE40>, 'PRAGMA temp.table_info("api_clients")', ()) completed [aiosqlite]
2026-02-25T16:07:57.914175Z [debug ] executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE29FE40>) [aiosqlite]
2026-02-25T16:07:57.914315Z [debug ] operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE29FE40>) completed [aiosqlite]
2026-02-25T16:07:57.914644Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE29FE40>) [aiosqlite]
2026-02-25T16:07:57.914810Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE29FE40>) completed [aiosqlite]
2026-02-25T16:07:57.915443Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:57.915635Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:57.915970Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE118E40>, '\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-25T16:07:57.916317Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE118E40>, '\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-25T16:07:57.916640Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE118E40>) [aiosqlite]
2026-02-25T16:07:57.916797Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE118E40>) completed [aiosqlite]
2026-02-25T16:07:57.917170Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:57.917320Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:57.917624Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE119E40>, 'CREATE UNIQUE INDEX ix_api_clients_api_key_hash ON api_clients (api_key_hash)', ()) [aiosqlite]
2026-02-25T16:07:57.917938Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE119E40>, 'CREATE UNIQUE INDEX ix_api_clients_api_key_hash ON api_clients (api_key_hash)', ()) completed [aiosqlite]
2026-02-25T16:07:57.918321Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE119E40>) [aiosqlite]
2026-02-25T16:07:57.918534Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE119E40>) completed [aiosqlite]
2026-02-25T16:07:57.919033Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:57.919301Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:57.919610Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48CD40>, 'CREATE INDEX ix_api_clients_id ON api_clients (id)', ()) [aiosqlite]
2026-02-25T16:07:57.919886Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48CD40>, 'CREATE INDEX ix_api_clients_id ON api_clients (id)', ()) completed [aiosqlite]
2026-02-25T16:07:57.920212Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48CD40>) [aiosqlite]
2026-02-25T16:07:57.920421Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48CD40>) completed [aiosqlite]
2026-02-25T16:07:57.921288Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:57.921475Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:57.921758Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE1189C0>, '\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-25T16:07:57.922168Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE1189C0>, '\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-25T16:07:57.922510Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE1189C0>) [aiosqlite]
2026-02-25T16:07:57.922686Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE1189C0>) completed [aiosqlite]
2026-02-25T16:07:57.923051Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:57.923228Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:57.923531Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48F940>, 'CREATE UNIQUE INDEX ix_images_uuid ON images (uuid)', ()) [aiosqlite]
2026-02-25T16:07:57.923788Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48F940>, 'CREATE UNIQUE INDEX ix_images_uuid ON images (uuid)', ()) completed [aiosqlite]
2026-02-25T16:07:57.924024Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48F940>) [aiosqlite]
2026-02-25T16:07:57.924182Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48F940>) completed [aiosqlite]
2026-02-25T16:07:57.924505Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:57.924700Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:57.925049Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48DC40>, 'CREATE INDEX ix_images_id ON images (id)', ()) [aiosqlite]
2026-02-25T16:07:57.925272Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48DC40>, 'CREATE INDEX ix_images_id ON images (id)', ()) completed [aiosqlite]
2026-02-25T16:07:57.925562Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48DC40>) [aiosqlite]
2026-02-25T16:07:57.925719Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48DC40>) completed [aiosqlite]
2026-02-25T16:07:57.926101Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:57.926246Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:57.926495Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48D3C0>, 'CREATE INDEX ix_images_client_id ON images (client_id)', ()) [aiosqlite]
2026-02-25T16:07:57.926725Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48D3C0>, 'CREATE INDEX ix_images_client_id ON images (client_id)', ()) completed [aiosqlite]
2026-02-25T16:07:57.926956Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48D3C0>) [aiosqlite]
2026-02-25T16:07:57.927088Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48D3C0>) completed [aiosqlite]
2026-02-25T16:07:57.927394Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:57.927554Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:57.927850Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48FAC0>, 'CREATE INDEX ix_images_processing_status ON images (processing_status)', ()) [aiosqlite]
2026-02-25T16:07:57.928211Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48FAC0>, 'CREATE INDEX ix_images_processing_status ON images (processing_status)', ()) completed [aiosqlite]
2026-02-25T16:07:57.928612Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48FAC0>) [aiosqlite]
2026-02-25T16:07:57.928897Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48FAC0>) completed [aiosqlite]
2026-02-25T16:07:57.929308Z [debug ] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:57.929590Z [debug ] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:57.930093Z [debug ] executing functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:57.930312Z [debug ] operation functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001B9AE0B2D40>) 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 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE3693C0>, 'PRAGMA main.table_info("images")', ())
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE3693C0>, 'PRAGMA main.table_info("images")', ()) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE3693C0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE3693C0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE3693C0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE3693C0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE368A40>, 'PRAGMA temp.table_info("images")', ())
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE368A40>, 'PRAGMA temp.table_info("images")', ()) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE368A40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE368A40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE368A40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE368A40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE36AFC0>, 'PRAGMA main.table_info("api_clients")', ())
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE36AFC0>, 'PRAGMA main.table_info("api_clients")', ()) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE36AFC0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE36AFC0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE36AFC0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE36AFC0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE29FE40>, 'PRAGMA temp.table_info("api_clients")', ())
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE29FE40>, 'PRAGMA temp.table_info("api_clients")', ()) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE29FE40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE29FE40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE29FE40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE29FE40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE118E40>, '\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 0x000001B9AE118E40>, '\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 0x000001B9AE118E40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE118E40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE119E40>, '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 0x000001B9AE119E40>, '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 0x000001B9AE119E40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE119E40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48CD40>, '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 0x000001B9AE48CD40>, '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 0x000001B9AE48CD40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48CD40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE1189C0>, '\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 0x000001B9AE1189C0>, '\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 0x000001B9AE1189C0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE1189C0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48F940>, '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 0x000001B9AE48F940>, '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 0x000001B9AE48F940>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48F940>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48DC40>, '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 0x000001B9AE48DC40>, '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 0x000001B9AE48DC40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48DC40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48D3C0>, '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 0x000001B9AE48D3C0>, '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 0x000001B9AE48D3C0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48D3C0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE48FAC0>, '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 0x000001B9AE48FAC0>, '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 0x000001B9AE48FAC0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE48FAC0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
-------------------------- Captured stdout teardown ---------------------------
2026-02-25T16:07:57.934771Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:57.935135Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:57.935456Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE118BC0>, 'PRAGMA main.table_info("images")', ()) [aiosqlite]
2026-02-25T16:07:57.935649Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE118BC0>, 'PRAGMA main.table_info("images")', ()) completed [aiosqlite]
2026-02-25T16:07:57.935918Z [debug ] executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE118BC0>) [aiosqlite]
2026-02-25T16:07:57.936150Z [debug ] operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE118BC0>) completed [aiosqlite]
2026-02-25T16:07:57.936400Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE118BC0>) [aiosqlite]
2026-02-25T16:07:57.936541Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE118BC0>) completed [aiosqlite]
2026-02-25T16:07:57.936877Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:57.937014Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:57.937224Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE54C9C0>, 'PRAGMA main.table_info("api_clients")', ()) [aiosqlite]
2026-02-25T16:07:57.937381Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE54C9C0>, 'PRAGMA main.table_info("api_clients")', ()) completed [aiosqlite]
2026-02-25T16:07:57.937624Z [debug ] executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE54C9C0>) [aiosqlite]
2026-02-25T16:07:57.937790Z [debug ] operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE54C9C0>) completed [aiosqlite]
2026-02-25T16:07:57.938055Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE54C9C0>) [aiosqlite]
2026-02-25T16:07:57.938205Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE54C9C0>) completed [aiosqlite]
2026-02-25T16:07:57.938736Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:57.938893Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:57.939177Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE54E640>, '\nDROP TABLE images', ()) [aiosqlite]
2026-02-25T16:07:57.939564Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE54E640>, '\nDROP TABLE images', ()) completed [aiosqlite]
2026-02-25T16:07:57.939807Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE54E640>) [aiosqlite]
2026-02-25T16:07:57.939942Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE54E640>) completed [aiosqlite]
2026-02-25T16:07:57.940292Z [debug ] executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:57.940433Z [debug ] operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:57.940647Z [debug ] executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE170340>, '\nDROP TABLE api_clients', ()) [aiosqlite]
2026-02-25T16:07:57.940881Z [debug ] operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE170340>, '\nDROP TABLE api_clients', ()) completed [aiosqlite]
2026-02-25T16:07:57.941105Z [debug ] executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE170340>) [aiosqlite]
2026-02-25T16:07:57.941247Z [debug ] operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE170340>) completed [aiosqlite]
2026-02-25T16:07:57.941600Z [debug ] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:57.941748Z [debug ] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:57.942029Z [debug ] executing functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001B9AE0B2D40>) [aiosqlite]
2026-02-25T16:07:57.942188Z [debug ] operation functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed [aiosqlite]
2026-02-25T16:07:57.942784Z [debug ] Using proactor: IocpProactor [asyncio]
---------------------------- Captured log teardown ----------------------------
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE118BC0>, 'PRAGMA main.table_info("images")', ())
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE118BC0>, 'PRAGMA main.table_info("images")', ()) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE118BC0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE118BC0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE118BC0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE118BC0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE54C9C0>, 'PRAGMA main.table_info("api_clients")', ())
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE54C9C0>, 'PRAGMA main.table_info("api_clients")', ()) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE54C9C0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method fetchall of sqlite3.Cursor object at 0x000001B9AE54C9C0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE54C9C0>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE54C9C0>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE54E640>, '\nDROP TABLE images', ())
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE54E640>, '\nDROP TABLE images', ()) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE54E640>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE54E640>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method cursor of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE170340>, '\nDROP TABLE api_clients', ())
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method execute of sqlite3.Cursor object at 0x000001B9AE170340>, '\nDROP TABLE api_clients', ()) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE170340>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method close of sqlite3.Cursor object at 0x000001B9AE170340>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG aiosqlite:core.py:114 executing functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001B9AE0B2D40>)
DEBUG aiosqlite:core.py:116 operation functools.partial(<built-in method rollback of sqlite3.Connection object at 0x000001B9AE0B2D40>) completed
DEBUG asyncio:proactor_events.py:633 Using proactor: IocpProactor
============================== warnings summary ===============================
..\..\..\..\Users\bruno\scoop\apps\python\current\Lib\site-packages\_pytest\config\__init__.py:1441
C:\Users\bruno\scoop\apps\python\current\Lib\site-packages\_pytest\config\__init__.py:1441: PytestConfigWarning: Unknown config option: env
self._warn_or_fail_if_strict(f"Unknown config option: {key}\n")
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ===========================
FAILED tests/test_exif_extended.py::test_extract_exif_success - AssertionErro...
FAILED tests/test_ocr_extended.py::test_extract_text_success - TypeError: cat...
FAILED tests/test_storage_extended.py::test_get_image_url - TypeError: LocalS...
=================== 3 failed, 85 passed, 1 warning in 5.16s ===================