2026-04-06 15:02:08,643 INFO __main__: [scheduler] Enqueued samsung (interval=60m, age=61m)
2026-04-06 15:02:08,985 INFO app.worker: [samsung] Scrape job started
2026-04-06 15:02:08,987 INFO app.worker: [samsung] scraper init starting
2026-04-06 15:02:08,989 INFO app.worker: [samsung] scraper init complete
2026-04-06 15:02:08,990 INFO app.worker: [samsung] bootstrap starting
2026-04-06 15:02:08,990 INFO app.worker: [samsung] bootstrap complete
2026-04-06 15:02:08,992 INFO app.worker: [samsung] channel fetch starting
2026-04-06 15:02:08,993 INFO app.scrapers.samsung: [samsung] fetching channel list for regions=['us']
2026-04-06 15:02:09,845 INFO app.scrapers.samsung: [samsung] 489 channels fetched (region=us)
2026-04-06 15:02:09,846 INFO app.scrapers.samsung: [samsung] 489 total channels across 1 region(s)
2026-04-06 15:02:09,851 INFO app.worker: [samsung] channel fetch complete
2026-04-06 15:02:09,852 INFO app.worker: [samsung] EPG fetch starting
2026-04-06 15:02:10,548 INFO app.scrapers.samsung: [samsung] fetching EPG for regions=['us'] (489 channels)
2026-04-06 15:02:11,740 INFO app.scrapers.samsung: [samsung] 4100 programs parsed (region=us)
2026-04-06 15:02:11,740 INFO app.scrapers.samsung: [samsung] 4100 total programs across 1 region(s)
2026-04-06 15:02:11,753 INFO app.worker: [samsung] EPG fetch complete
2026-04-06 15:02:19,331 INFO app.tvtv_cache: [tvtv-cache] USA-GNSTR-X day+0: 94 stations in 5 batches
2026-04-06 15:02:37,637 ERROR app: Exception on /api/channels/2925 [PATCH]
Traceback (most recent call last):
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
cursor.execute(statement, parameters)
sqlite3.OperationalError: database is locked
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 1511, in wsgi_app
response = self.full_dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 919, in full_dispatch_request
rv = self.handle_user_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 917, in full_dispatch_request
rv = self.dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 902, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/app/routes/api.py", line 818, in update_channel
db.session.commit()
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/scoping.py", line 597, in commit
return self._proxied.commit()
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 2030, in commit
trans.commit(_to_root=True)
File "<string>", line 2, in commit
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 1311, in commit
self._prepare_impl()
File "<string>", line 2, in _prepare_impl
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 1286, in _prepare_impl
self.session.flush()
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 4331, in flush
self._flush(objects)
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 4466, in _flush
with util.safe_reraise():
^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/util/langhelpers.py", line 121, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 4427, in _flush
flush_context.execute()
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/persistence.py", line 85, in save_obj
_emit_update_statements(
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/persistence.py", line 912, in _emit_update_statements
c = connection.execute(
^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/sql/elements.py", line 527, in _execute_on_connection
return connection._execute_clauseelement(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 2363, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
cursor.execute(statement, parameters)
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) database is locked
[SQL: UPDATE channels SET is_enabled=?, updated_at=? WHERE channels.id = ?]
[parameters: (0, '2026-04-06 22:02:07.605784', 2925)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-04-06 15:02:41,997 WARNING app.worker: [samsung] DB locked (attempt 1/3), retrying in 5s
2026-04-06 15:02:42,533 INFO app.tvtv_cache: [tvtv-cache] USA-GNSTR-X day+1: 94 stations in 5 batches
2026-04-06 15:03:00,709 INFO app.tvtv_cache: [tvtv-cache] USA-GNSTR-X day+2: 94 stations in 5 batches
2026-04-06 15:03:14,067 INFO app.tvtv_cache: [tvtv-cache] USA-SAMSUNG-X day+0: 51 stations in 3 batches
2026-04-06 15:03:17,169 WARNING app.worker: [samsung] DB locked (attempt 2/3), retrying in 10s
2026-04-06 15:03:22,296 INFO app.tvtv_cache: [tvtv-cache] USA-SAMSUNG-X day+1: 51 stations in 3 batches
2026-04-06 15:03:31,980 INFO app.tvtv_cache: [tvtv-cache] USA-SAMSUNG-X day+2: 51 stations in 3 batches
2026-04-06 15:03:42,148 INFO app.tvtv_cache: [tvtv-cache] USA-AMZPV-X day+0: 26 stations in 2 batches
2026-04-06 15:03:48,743 INFO app.tvtv_cache: [tvtv-cache] USA-AMZPV-X day+1: 26 stations in 2 batches
2026-04-06 15:03:52,504 ERROR app: Exception on /api/channels/2925 [PATCH]
Traceback (most recent call last):
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
cursor.execute(statement, parameters)
sqlite3.OperationalError: database is locked
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 1511, in wsgi_app
response = self.full_dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 919, in full_dispatch_request
rv = self.handle_user_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 917, in full_dispatch_request
rv = self.dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 902, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/app/routes/api.py", line 818, in update_channel
db.session.commit()
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/scoping.py", line 597, in commit
return self._proxied.commit()
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 2030, in commit
trans.commit(_to_root=True)
File "<string>", line 2, in commit
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 1311, in commit
self._prepare_impl()
File "<string>", line 2, in _prepare_impl
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 1286, in _prepare_impl
self.session.flush()
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 4331, in flush
self._flush(objects)
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 4466, in _flush
with util.safe_reraise():
^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/util/langhelpers.py", line 121, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 4427, in _flush
flush_context.execute()
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/persistence.py", line 85, in save_obj
_emit_update_statements(
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/persistence.py", line 912, in _emit_update_statements
c = connection.execute(
^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/sql/elements.py", line 527, in _execute_on_connection
return connection._execute_clauseelement(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 2363, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
cursor.execute(statement, parameters)
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) database is locked
[SQL: UPDATE channels SET is_enabled=?, updated_at=? WHERE channels.id = ?]
[parameters: (0, '2026-04-06 22:03:22.474044', 2925)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-04-06 15:03:55,454 INFO app.tvtv_cache: [tvtv-cache] USA-AMZPV-X day+2: 26 stations in 2 batches
2026-04-06 15:03:57,317 ERROR app.worker: [samsung] Scrape failed after 108.3s
Traceback (most recent call last):
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1936, in _exec_single_context
self.dialect.do_executemany(
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/default.py", line 949, in do_executemany
cursor.executemany(statement, parameters)
sqlite3.OperationalError: database is locked
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/app/app/worker.py", line 328, in run_scraper
_upsert_channels(source, channels, _gracenote_auto_fill)
File "/app/app/worker.py", line 1450, in _upsert_channels
_refresh_auto_channel_numbers()
File "/app/app/worker.py", line 1307, in _refresh_auto_channel_numbers
.all()
^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/query.py", line 2704, in all
return self._iter().all() # type: ignore
^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/query.py", line 2857, in _iter
result: Union[ScalarResult[_T], Result[_T]] = self.session.execute(
^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 2351, in execute
return self._execute_internal(
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 2228, in _execute_internal
) = compile_state_cls.orm_pre_session_exec(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/context.py", line 577, in orm_pre_session_exec
session._autoflush()
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 3051, in _autoflush
raise e.with_traceback(sys.exc_info()[2])
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 3040, in _autoflush
self.flush()
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 4331, in flush
self._flush(objects)
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 4466, in _flush
with util.safe_reraise():
^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/util/langhelpers.py", line 121, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 4427, in _flush
flush_context.execute()
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/persistence.py", line 85, in save_obj
_emit_update_statements(
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/persistence.py", line 912, in _emit_update_statements
c = connection.execute(
^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/sql/elements.py", line 527, in _execute_on_connection
return connection._execute_clauseelement(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 2363, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1936, in _exec_single_context
self.dialect.do_executemany(
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/default.py", line 949, in do_executemany
cursor.executemany(statement, parameters)
sqlalchemy.exc.OperationalError: (raised as a result of Query-invoked autoflush; consider using a session.no_autoflush block if this flush is occurring prematurely)
(sqlite3.OperationalError) database is locked
[SQL: UPDATE channels SET last_seen_at=?, updated_at=? WHERE channels.id = ?]
[parameters: [('2026-04-06 22:03:27.205683', '2026-04-06 22:03:27.272022', 1317), ('2026-04-06 22:03:27.205683', '2026-04-06 22:03:27.272033', 1318), ('2026-04-06 22:03:27.205683', '2026-04-06 22:03:27.272035', 1319), ('2026-04-06 22:03:27.205683', '2026-04-06 22:03:27.272037', 1320), ('2026-04-06 22:03:27.205683', '2026-04-06 22:03:27.272040', 1321), ('2026-04-06 22:03:27.205683', '2026-04-06 22:03:27.272042', 1322), ('2026-04-06 22:03:27.205683', '2026-04-06 22:03:27.272044', 1323), ('2026-04-06 22:03:27.205683', '2026-04-06 22:03:27.272046', 1324)]]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-04-06 15:04:02,037 INFO app.tvtv_cache: [tvtv-cache] USA-TUBISTR-X day+0: 14 stations in 1 batches
2026-04-06 15:04:05,763 INFO app.tvtv_cache: [tvtv-cache] USA-TUBISTR-X day+1: 14 stations in 1 batches
2026-04-06 15:04:09,380 INFO app.tvtv_cache: [tvtv-cache] USA-TUBISTR-X day+2: 14 stations in 1 batches
2026-04-06 15:04:13,022 INFO app.tvtv_cache: [tvtv-cache] USA-VIZIO-X day+0: 4 stations in 1 batches
2026-04-06 15:04:16,638 INFO app.tvtv_cache: [tvtv-cache] USA-VIZIO-X day+1: 4 stations in 1 batches
2026-04-06 15:04:20,191 INFO app.tvtv_cache: [tvtv-cache] USA-VIZIO-X day+2: 4 stations in 1 batches
2026-04-06 15:04:20,711 ERROR app: Exception on /api/channels/2924 [PATCH]
Traceback (most recent call last):
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
cursor.execute(statement, parameters)
sqlite3.OperationalError: database is locked
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 1511, in wsgi_app
response = self.full_dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 919, in full_dispatch_request
rv = self.handle_user_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 917, in full_dispatch_request
rv = self.dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 902, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/app/routes/api.py", line 818, in update_channel
db.session.commit()
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/scoping.py", line 597, in commit
return self._proxied.commit()
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 2030, in commit
trans.commit(_to_root=True)
File "<string>", line 2, in commit
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 1311, in commit
self._prepare_impl()
File "<string>", line 2, in _prepare_impl
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 1286, in _prepare_impl
self.session.flush()
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 4331, in flush
self._flush(objects)
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 4466, in _flush
with util.safe_reraise():
^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/util/langhelpers.py", line 121, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 4427, in _flush
flush_context.execute()
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/persistence.py", line 85, in save_obj
_emit_update_statements(
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/orm/persistence.py", line 912, in _emit_update_statements
c = connection.execute(
^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/sql/elements.py", line 527, in _execute_on_connection
return connection._execute_clauseelement(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
return self._exec_single_context(
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
self._handle_dbapi_exception(
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 2363, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
self.dialect.do_execute(
File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
cursor.execute(statement, parameters)
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) database is locked
[SQL: UPDATE channels SET is_enabled=?, updated_at=? WHERE channels.id = ?]
[parameters: (0, '2026-04-06 22:03:50.677881', 2924)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2026-04-06 15:04:23,763 INFO app.tvtv_cache: [tvtv-cache] USA-PLUTOTV-X day+0: 13 stations in 1 batches
2026-04-06 15:04:27,428 WARNING app.worker: [samsung] Could not persist last_error to DB
2026-04-06 15:04:27,686 INFO app.tvtv_cache: [tvtv-cache] USA-PLUTOTV-X day+1: 13 stations in 1 batches
2026-04-06 15:04:31,591 INFO app.tvtv_cache: [tvtv-cache] USA-PLUTOTV-X day+2: 13 stations in 1 batches
2026-04-06 15:04:37,205 INFO app.tvtv_cache: [tvtv-cache] refresh complete: {'lineups_fetched': 8, 'days': 3, 'batches': 81, 'rows_inserted': 41217, 'rows_deleted': 10239, 'errors': 0, 'elapsed_s': 274.6, 'dry_run': False}
2026-04-06 15:04:37,209 INFO app.worker: [tvtv-cache] refresh complete: {'lineups_fetched': 8, 'days': 3, 'batches': 81, 'rows_inserted': 41217, 'rows_deleted': 10239, 'errors': 0, 'elapsed_s': 274.6, 'dry_run': False}
2