kryten-webqueue 0.44.6__tar.gz → 0.44.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/CHANGELOG.md +16 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/PKG-INFO +1 -1
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/db/_catalog.py +10 -18
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/db/_connection.py +4 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/pyproject.toml +1 -1
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/.github/workflows/gitleaks.yml +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/.github/workflows/python-publish.yml +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/.github/workflows/release.yml +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/.gitignore +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/.gitleaks.toml +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/.pre-commit-config.yaml +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/AGENT-WORKFLOW-GUIDE.md +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/AGENTS.md +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/README.md +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/config.example.json +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/deploy/kryten-webqueue.service +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/deploy/nginx-queue.conf +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/docs/IMPLEMENTATION_SPEC.md +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/docs/IMPL_API_GATE.md +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/docs/IMPL_ECONOMY.md +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/docs/IMPL_KRYTEN_PY.md +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/docs/IMPL_ROBOT.md +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/docs/Kryten-Economy Service Quality Survey Report at v0.13.0.md +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/docs/Kryten-Webqueue Service Quality Survey Report at v0.27.1.md +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/docs/Log for incorrect promo insertion problem.txt +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/docs/PLAN_PRESENCE_AND_PROMOS.md +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/docs/PRD_TMDB_LOCAL_INDEX.md +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/docs/PRE_PLAN_GAPS.md +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/docs/PRODUCT_PLAN.md +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/docs/PUBLIC_API.md +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/docs/SPEC-Visual-UX-Sprint-August-2026.md +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/docs/SPEC_ADMIN_ITEM_EDITOR.md +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/docs/SPEC_CATALOG_ENRICHMENT_PIPELINE.md +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/docs/SPEC_EMOTE_REHOST.md +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/docs/SPEC_JOBS_AND_BROWSE.md +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/docs/SPEC_TMDB_LOCAL_INDEX.md +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/docs/UX_POLISH_PLAN.md +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/__init__.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/__main__.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/api_gate/__init__.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/api_gate/client.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/app.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/auth/__init__.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/auth/device_keys.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/auth/otp.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/auth/rate_limit.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/auth/session.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/__init__.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/db/__init__.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/db/_blackouts.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/db/_devices.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/db/_enrichment.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/db/_feedback.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/db/_fetch_queue.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/db/_people.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/db/_playlists.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/db/_queue.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/db/_watchlist.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/enrichment/__init__.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/enrichment/classify.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/enrichment/normalise.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/enrichment/pipeline.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/enrichment/providers.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/enrichment/report.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/enrichment/steps/__init__.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/enrichment/steps/art.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/enrichment/steps/categories.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/enrichment/steps/identify.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/enrichment/steps/meta.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/enrichment/steps/sync.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/enrichment/steps/tags.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/enrichment/steps/title.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/images.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/mediacms.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/sync.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/tmdb_index/__init__.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/tmdb_index/_schema.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/tmdb_index/_textmatch.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/tmdb_index/_ttscrape.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/tmdb_index/builder.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/tmdb_index/coverage.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/tmdb_index/index.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/config.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/integrations/__init__.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/integrations/cmsutils/__init__.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/integrations/cmsutils/_common.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/integrations/cmsutils/blackout_scan.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/integrations/cmsutils/enrichmeta.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/integrations/cmsutils/enrichtitles.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/integrations/cmsutils/enrichtv.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/integrations/cmsutils/fetchurls.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/integrations/cmsutils/motdposters.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/integrations/cmsutils/playedmovies.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/integrations/ytpipe/__init__.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/integrations/ytpipe/downloader.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/jobs/__init__.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/jobs/fetchurls_auth.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/jobs/job_scheduler.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/jobs/log_capture.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/jobs/manager.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/jobs/rehost_emotes.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/jobs/tasks.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/logging_config.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/playlists/__init__.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/playlists/bulk_add.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/playlists/fire.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/playlists/importer.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/playlists/ordering.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/playlists/scheduler.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/promos/__init__.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/promos/director.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/queue/__init__.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/queue/completion.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/queue/ordering.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/queue/poller.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/queue/presence.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/queue/race_poller.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/queue/shadow.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/routes/__init__.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/routes/admin_catalog.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/routes/admin_feedback.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/routes/admin_job_schedules.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/routes/admin_jobs.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/routes/admin_moderation.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/routes/admin_playlists.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/routes/admin_promos.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/routes/admin_queue.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/routes/admin_schedules.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/routes/auth.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/routes/catalog.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/routes/devices.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/routes/feedback.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/routes/pages.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/routes/public_api.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/routes/queue.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/routes/user.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/static/css/main.css +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/static/js/admin-playlists.js +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/static/js/admin-promos.js +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/static/js/admin-queue-mgmt.js +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/static/js/admin-schedules.js +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/static/js/admin.js +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/static/js/keybindings.js +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/static/js/main.js +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/templates/admin/index.html +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/templates/admin/playlists.html +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/templates/admin/promos.html +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/templates/admin/queue_mgmt.html +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/templates/admin/schedules.html +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/templates/auth/login.html +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/templates/base.html +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/templates/catalog/browse.html +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/templates/catalog/edit_item_modal.html +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/templates/catalog/item_detail.html +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/templates/catalog/item_not_found.html +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/templates/feedback/index.html +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/templates/queue/index.html +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/templates/race.html +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/templates/user/dashboard.html +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/templates/user/link_device.html +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/templates/user/my_list.html +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/ws/__init__.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/ws/handler.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/ws/manager.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/scripts/AGENTS.md +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/scripts/patch_mediacms_bulk_facets.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/scripts/patch_mediacms_tags.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/scripts/trigger_enrich.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/__init__.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/test_catalog_blackout.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/test_catalog_delete.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/test_classify.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/test_config_persistence.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/test_device_linking.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/test_feedback.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/test_fetch_queue_pacing.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/test_fetchurls_sharepoint.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/test_identify_step.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/test_job_logs_and_queue_visibility.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/test_people_facets.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/test_phase1.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/test_phase2_jobs.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/test_phase3_jobs.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/test_phase4_live_fixes.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/test_playlist_import.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/test_presence_refund.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/test_promo_director.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/test_promo_pool_exclusion.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/test_providers.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/test_queue_announce.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/test_queue_preview_fallback.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/test_race_poller.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/test_recently_played_hide.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/test_save_results_to_playlist.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/test_schedule_lock.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/test_search_facets.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/test_title_normalization.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/test_tmdb_index.py +0 -0
- {kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/test_watchlist.py +0 -0
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.44.7] - 2026-08-31
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- **SQLite WAL corruption mitigation.** The catalog DB connection now sets
|
|
8
|
+
`synchronous=NORMAL` (safe in WAL mode), `busy_timeout=5000` (retry on
|
|
9
|
+
lock contention instead of failing immediately), `wal_autocheckpoint=100`
|
|
10
|
+
(checkpoint every 100 pages instead of the 1000-page default, keeping the
|
|
11
|
+
WAL small), and runs a passive checkpoint on every connect to drain any
|
|
12
|
+
stale frames left by an unclean previous run.
|
|
13
|
+
- **`delete_stale_catalog_items` rewritten to use subqueries.** Previously
|
|
14
|
+
built a potentially huge `IN (?, ?, …)` parameter list (one bind for every
|
|
15
|
+
stale token) before issuing two separate bulk DELETEs. Now uses correlated
|
|
16
|
+
subqueries instead, eliminating the SELECT round-trip and the large
|
|
17
|
+
parameter list, reducing per-sync WAL pressure.
|
|
18
|
+
|
|
3
19
|
## [0.44.6] - 2026-08-30
|
|
4
20
|
|
|
5
21
|
### Fixed
|
|
@@ -1042,30 +1042,22 @@ class _CatalogMixin:
|
|
|
1042
1042
|
- catalog_people
|
|
1043
1043
|
- catalog_studios
|
|
1044
1044
|
"""
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
[sync_started_at],
|
|
1048
|
-
)
|
|
1049
|
-
tokens = [row[0] for row in await cursor.fetchall()]
|
|
1050
|
-
|
|
1051
|
-
if not tokens:
|
|
1052
|
-
return 0
|
|
1053
|
-
|
|
1054
|
-
# Delete from FTS first (not automatically cascaded)
|
|
1055
|
-
placeholders = ",".join("?" * len(tokens))
|
|
1045
|
+
# Delete from FTS first (not automatically cascaded); use subquery to avoid
|
|
1046
|
+
# building a potentially huge IN-list parameter list for large syncs.
|
|
1056
1047
|
await self._db.execute(
|
|
1057
|
-
|
|
1058
|
-
|
|
1048
|
+
"DELETE FROM catalog_fts WHERE friendly_token IN "
|
|
1049
|
+
"(SELECT friendly_token FROM catalog WHERE synced_at < ? OR synced_at IS NULL)",
|
|
1050
|
+
[sync_started_at],
|
|
1059
1051
|
)
|
|
1060
1052
|
|
|
1061
1053
|
# Delete from catalog (cascades to join tables via ON DELETE CASCADE)
|
|
1062
|
-
await self._db.execute(
|
|
1063
|
-
|
|
1064
|
-
|
|
1054
|
+
cursor = await self._db.execute(
|
|
1055
|
+
"DELETE FROM catalog WHERE synced_at < ? OR synced_at IS NULL",
|
|
1056
|
+
[sync_started_at],
|
|
1065
1057
|
)
|
|
1066
|
-
|
|
1058
|
+
count = cursor.rowcount
|
|
1067
1059
|
await self._db.commit()
|
|
1068
|
-
return
|
|
1060
|
+
return count or 0
|
|
1069
1061
|
|
|
1070
1062
|
async def find_catalog_by_title(self, title: str) -> dict | None:
|
|
1071
1063
|
"""Best-effort lookup of a catalog item whose title matches ``title``.
|
|
@@ -549,6 +549,10 @@ class _DBBase:
|
|
|
549
549
|
self._db.row_factory = aiosqlite.Row
|
|
550
550
|
await self._db.execute("PRAGMA journal_mode=WAL")
|
|
551
551
|
await self._db.execute("PRAGMA foreign_keys=ON")
|
|
552
|
+
await self._db.execute("PRAGMA synchronous=NORMAL") # safe in WAL; faster than FULL
|
|
553
|
+
await self._db.execute("PRAGMA busy_timeout=5000") # retry up to 5 s on lock
|
|
554
|
+
await self._db.execute("PRAGMA wal_autocheckpoint=100") # checkpoint every 100 pages
|
|
555
|
+
await self._db.execute("PRAGMA wal_checkpoint(PASSIVE)") # drain any stale WAL on open
|
|
552
556
|
|
|
553
557
|
async def close(self):
|
|
554
558
|
if self._db:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/docs/Log for incorrect promo insertion problem.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/db/_fetch_queue.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/enrichment/__init__.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/enrichment/classify.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/enrichment/normalise.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/enrichment/pipeline.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/enrichment/providers.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/enrichment/report.py
RENAMED
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/enrichment/steps/art.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/enrichment/steps/meta.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/enrichment/steps/sync.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/enrichment/steps/tags.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/enrichment/steps/title.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/tmdb_index/__init__.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/tmdb_index/_schema.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/tmdb_index/_textmatch.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/tmdb_index/_ttscrape.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/tmdb_index/builder.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/tmdb_index/coverage.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/catalog/tmdb_index/index.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/integrations/cmsutils/__init__.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/integrations/cmsutils/_common.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/integrations/cmsutils/enrichtv.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/integrations/cmsutils/fetchurls.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/integrations/ytpipe/__init__.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/integrations/ytpipe/downloader.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/routes/admin_job_schedules.py
RENAMED
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/routes/admin_moderation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/static/js/admin-playlists.js
RENAMED
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/static/js/admin-queue-mgmt.js
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/static/js/admin-schedules.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/templates/admin/index.html
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/templates/admin/playlists.html
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/templates/admin/promos.html
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/templates/admin/queue_mgmt.html
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/templates/admin/schedules.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/templates/catalog/browse.html
RENAMED
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/templates/catalog/item_detail.html
RENAMED
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/templates/feedback/index.html
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/templates/queue/index.html
RENAMED
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/templates/user/dashboard.html
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/templates/user/link_device.html
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/kryten_webqueue/templates/user/my_list.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.6 → kryten_webqueue-0.44.7}/tests/test_job_logs_and_queue_visibility.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|