kryten-webqueue 0.44.0__tar.gz → 0.44.2__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.0 → kryten_webqueue-0.44.2}/CHANGELOG.md +26 -1
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/PKG-INFO +1 -1
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/integrations/ytpipe/downloader.py +16 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/templates/admin/index.html +1 -1
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/templates/admin/playlists.html +1 -1
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/templates/admin/promos.html +1 -1
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/templates/admin/queue_mgmt.html +1 -1
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/templates/admin/schedules.html +1 -1
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/templates/base.html +3 -3
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/pyproject.toml +1 -1
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/.github/workflows/gitleaks.yml +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/.github/workflows/python-publish.yml +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/.github/workflows/release.yml +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/.gitignore +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/.gitleaks.toml +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/.pre-commit-config.yaml +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/AGENT-WORKFLOW-GUIDE.md +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/AGENTS.md +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/README.md +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/config.example.json +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/deploy/kryten-webqueue.service +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/deploy/nginx-queue.conf +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/docs/IMPLEMENTATION_SPEC.md +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/docs/IMPL_API_GATE.md +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/docs/IMPL_ECONOMY.md +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/docs/IMPL_KRYTEN_PY.md +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/docs/IMPL_ROBOT.md +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/docs/Kryten-Economy Service Quality Survey Report at v0.13.0.md +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/docs/Kryten-Webqueue Service Quality Survey Report at v0.27.1.md +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/docs/Log for incorrect promo insertion problem.txt +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/docs/PLAN_PRESENCE_AND_PROMOS.md +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/docs/PRD_TMDB_LOCAL_INDEX.md +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/docs/PRE_PLAN_GAPS.md +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/docs/PRODUCT_PLAN.md +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/docs/PUBLIC_API.md +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/docs/SPEC-Visual-UX-Sprint-August-2026.md +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/docs/SPEC_ADMIN_ITEM_EDITOR.md +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/docs/SPEC_CATALOG_ENRICHMENT_PIPELINE.md +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/docs/SPEC_EMOTE_REHOST.md +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/docs/SPEC_JOBS_AND_BROWSE.md +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/docs/SPEC_TMDB_LOCAL_INDEX.md +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/docs/UX_POLISH_PLAN.md +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/__init__.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/__main__.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/api_gate/__init__.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/api_gate/client.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/app.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/auth/__init__.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/auth/device_keys.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/auth/otp.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/auth/rate_limit.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/auth/session.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/__init__.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/db/__init__.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/db/_blackouts.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/db/_catalog.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/db/_connection.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/db/_devices.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/db/_enrichment.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/db/_feedback.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/db/_fetch_queue.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/db/_people.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/db/_playlists.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/db/_queue.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/db/_watchlist.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/enrichment/__init__.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/enrichment/classify.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/enrichment/normalise.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/enrichment/pipeline.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/enrichment/providers.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/enrichment/report.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/enrichment/steps/__init__.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/enrichment/steps/art.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/enrichment/steps/categories.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/enrichment/steps/identify.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/enrichment/steps/meta.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/enrichment/steps/sync.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/enrichment/steps/tags.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/enrichment/steps/title.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/images.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/mediacms.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/sync.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/tmdb_index/__init__.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/tmdb_index/_schema.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/tmdb_index/_textmatch.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/tmdb_index/_ttscrape.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/tmdb_index/builder.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/tmdb_index/coverage.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/tmdb_index/index.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/config.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/integrations/__init__.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/integrations/cmsutils/__init__.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/integrations/cmsutils/_common.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/integrations/cmsutils/blackout_scan.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/integrations/cmsutils/enrichmeta.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/integrations/cmsutils/enrichtitles.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/integrations/cmsutils/enrichtv.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/integrations/cmsutils/fetchurls.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/integrations/cmsutils/motdposters.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/integrations/cmsutils/playedmovies.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/integrations/ytpipe/__init__.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/jobs/__init__.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/jobs/fetchurls_auth.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/jobs/job_scheduler.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/jobs/log_capture.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/jobs/manager.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/jobs/rehost_emotes.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/jobs/tasks.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/logging_config.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/playlists/__init__.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/playlists/bulk_add.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/playlists/fire.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/playlists/importer.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/playlists/ordering.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/playlists/scheduler.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/promos/__init__.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/promos/director.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/queue/__init__.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/queue/completion.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/queue/ordering.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/queue/poller.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/queue/presence.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/queue/race_poller.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/queue/shadow.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/routes/__init__.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/routes/admin_catalog.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/routes/admin_feedback.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/routes/admin_job_schedules.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/routes/admin_jobs.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/routes/admin_moderation.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/routes/admin_playlists.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/routes/admin_promos.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/routes/admin_queue.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/routes/admin_schedules.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/routes/auth.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/routes/catalog.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/routes/devices.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/routes/feedback.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/routes/pages.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/routes/public_api.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/routes/queue.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/routes/user.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/static/css/main.css +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/static/js/admin-playlists.js +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/static/js/admin-promos.js +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/static/js/admin-queue-mgmt.js +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/static/js/admin-schedules.js +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/static/js/admin.js +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/static/js/keybindings.js +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/static/js/main.js +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/templates/auth/login.html +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/templates/catalog/browse.html +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/templates/catalog/edit_item_modal.html +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/templates/catalog/item_detail.html +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/templates/catalog/item_not_found.html +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/templates/feedback/index.html +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/templates/queue/index.html +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/templates/race.html +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/templates/user/dashboard.html +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/templates/user/link_device.html +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/templates/user/my_list.html +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/ws/__init__.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/ws/handler.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/ws/manager.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/scripts/AGENTS.md +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/scripts/patch_mediacms_bulk_facets.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/scripts/patch_mediacms_tags.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/scripts/trigger_enrich.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/tests/__init__.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/tests/test_catalog_blackout.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/tests/test_catalog_delete.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/tests/test_classify.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/tests/test_config_persistence.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/tests/test_device_linking.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/tests/test_feedback.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/tests/test_fetch_queue_pacing.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/tests/test_fetchurls_sharepoint.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/tests/test_identify_step.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/tests/test_job_logs_and_queue_visibility.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/tests/test_people_facets.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/tests/test_phase1.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/tests/test_phase2_jobs.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/tests/test_phase3_jobs.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/tests/test_phase4_live_fixes.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/tests/test_playlist_import.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/tests/test_presence_refund.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/tests/test_promo_director.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/tests/test_promo_pool_exclusion.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/tests/test_providers.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/tests/test_queue_announce.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/tests/test_race_poller.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/tests/test_recently_played_hide.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/tests/test_save_results_to_playlist.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/tests/test_schedule_lock.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/tests/test_search_facets.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/tests/test_title_normalization.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/tests/test_tmdb_index.py +0 -0
- {kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/tests/test_watchlist.py +0 -0
|
@@ -1,6 +1,31 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## [
|
|
3
|
+
## [0.44.2] - 2026-08-29
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- **Gentler source fetching (fixes intermittent Tubi "Read timed out").** Every
|
|
8
|
+
yt-dlp call now flows through a socket-timeout **floor of 60s** (raising
|
|
9
|
+
over-aggressive per-call values like 10s), paces data-extraction HTTP requests
|
|
10
|
+
(`sleep_interval_requests = 1s`), and retries a failed webpage/m3u8 extraction
|
|
11
|
+
step (`extractor_retries = 5`). Sources like Tubi soft-throttle bursts of
|
|
12
|
+
requests, which surfaced as `HTTPSConnectionPool(host='tubitv.com'): Read timed
|
|
13
|
+
out` and cascading "Requested format is not available" errors; these defaults
|
|
14
|
+
make the downloader slower-but-steadier and far less likely to trip throttling.
|
|
15
|
+
Applied centrally in the vendored downloader's `YoutubeDL` wrapper.
|
|
16
|
+
|
|
17
|
+
## [0.44.1] - 2026-08-27
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
|
|
21
|
+
- **Static assets are now cache-busted by version.** JS/CSS includes gained a
|
|
22
|
+
`?v={app_version}` query string, so browsers fetch fresh assets after every
|
|
23
|
+
release instead of serving a stale cached copy. This fixes the admin Download
|
|
24
|
+
Queue rendering as empty immediately after the 0.44.0 upgrade: the new endpoint
|
|
25
|
+
returns `{items, …}` but a cached pre-0.44.0 `admin.js` read the response as a
|
|
26
|
+
bare array, so `.length` was `undefined` and it showed "Queue is empty."
|
|
27
|
+
|
|
28
|
+
## [0.44.0]
|
|
4
29
|
|
|
5
30
|
### Added
|
|
6
31
|
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/integrations/ytpipe/downloader.py
RENAMED
|
@@ -54,12 +54,28 @@ from . import RetryableUploadError
|
|
|
54
54
|
_JS_RUNTIMES = {"deno": {}, "node": {}}
|
|
55
55
|
_REMOTE_COMPONENTS = ["ejs:github", "ejs:npm"]
|
|
56
56
|
|
|
57
|
+
# "Be gentle" defaults applied to every yt-dlp call (see subclass below). Sources
|
|
58
|
+
# like Tubi soft-throttle repeat requests, surfacing as intermittent
|
|
59
|
+
# "Read timed out" on the webpage/m3u8 extraction steps. Pace requests, tolerate
|
|
60
|
+
# slow responses, and retry the extractor rather than hard-failing.
|
|
61
|
+
_SOURCE_SOCKET_TIMEOUT = 60 # floor (yt-dlp default is 20)
|
|
62
|
+
_SOURCE_SLEEP_REQUESTS = 1.0 # seconds between data-extraction HTTP requests
|
|
63
|
+
_SOURCE_EXTRACTOR_RETRIES = 5 # retry a failed "Downloading webpage" step
|
|
64
|
+
|
|
57
65
|
|
|
58
66
|
class _YoutubeDLWithJSRuntimes(yt_dlp.YoutubeDL):
|
|
59
67
|
def __init__(self, params=None, *args, **kwargs): # noqa: D107
|
|
60
68
|
merged = dict(params or {})
|
|
61
69
|
merged.setdefault("js_runtimes", dict(_JS_RUNTIMES))
|
|
62
70
|
merged.setdefault("remote_components", list(_REMOTE_COMPONENTS))
|
|
71
|
+
# Enforce a socket-timeout floor (raise over-aggressive per-call values
|
|
72
|
+
# like 10s), pace extraction requests, and retry transient extractor
|
|
73
|
+
# failures. setdefault lets an explicit larger per-call value still win.
|
|
74
|
+
merged["socket_timeout"] = max(
|
|
75
|
+
int(merged.get("socket_timeout") or 0), _SOURCE_SOCKET_TIMEOUT
|
|
76
|
+
)
|
|
77
|
+
merged.setdefault("sleep_interval_requests", _SOURCE_SLEEP_REQUESTS)
|
|
78
|
+
merged.setdefault("extractor_retries", _SOURCE_EXTRACTOR_RETRIES)
|
|
63
79
|
super().__init__(merged, *args, **kwargs)
|
|
64
80
|
|
|
65
81
|
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
24
24
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
25
25
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap">
|
|
26
|
-
<link rel="stylesheet" href="/static/css/main.css">
|
|
26
|
+
<link rel="stylesheet" href="/static/css/main.css?v={{ app_version }}">
|
|
27
27
|
{% block head %}{% endblock %}
|
|
28
28
|
</head>
|
|
29
29
|
<body class="{% block body_class %}{% endblock %}">
|
|
@@ -60,8 +60,8 @@
|
|
|
60
60
|
<p>© Channel-Z — Powered by <a href="https://github.com/grobertson/kryten-webqueue" target="_blank" rel="noopener">kryten-webqueue</a>{% if app_version %} <span class="footer-version">v{{ app_version }}</span>{% endif %}</p>
|
|
61
61
|
</footer>
|
|
62
62
|
|
|
63
|
-
<script src="/static/js/main.js"></script>
|
|
64
|
-
<script src="/static/js/keybindings.js"></script>
|
|
63
|
+
<script src="/static/js/main.js?v={{ app_version }}"></script>
|
|
64
|
+
<script src="/static/js/keybindings.js?v={{ app_version }}"></script>
|
|
65
65
|
{% block scripts %}{% endblock %}
|
|
66
66
|
</body>
|
|
67
67
|
</html>
|
|
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.0 → kryten_webqueue-0.44.2}/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
|
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/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.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/enrichment/__init__.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/enrichment/classify.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/enrichment/normalise.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/enrichment/pipeline.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/enrichment/providers.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/enrichment/report.py
RENAMED
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/enrichment/steps/art.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/enrichment/steps/meta.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/enrichment/steps/sync.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/enrichment/steps/tags.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/enrichment/steps/title.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/tmdb_index/__init__.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/tmdb_index/_schema.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/tmdb_index/_textmatch.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/tmdb_index/_ttscrape.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/tmdb_index/builder.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/tmdb_index/coverage.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/catalog/tmdb_index/index.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/integrations/cmsutils/__init__.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/integrations/cmsutils/_common.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/integrations/cmsutils/enrichtv.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/integrations/cmsutils/fetchurls.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/integrations/ytpipe/__init__.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.0 → kryten_webqueue-0.44.2}/kryten_webqueue/routes/admin_job_schedules.py
RENAMED
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/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.0 → kryten_webqueue-0.44.2}/kryten_webqueue/static/js/admin-playlists.js
RENAMED
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/static/js/admin-queue-mgmt.js
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/static/js/admin-schedules.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/templates/catalog/browse.html
RENAMED
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/templates/catalog/item_detail.html
RENAMED
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/templates/feedback/index.html
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/templates/queue/index.html
RENAMED
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/templates/user/dashboard.html
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/kryten_webqueue/templates/user/link_device.html
RENAMED
|
File without changes
|
{kryten_webqueue-0.44.0 → kryten_webqueue-0.44.2}/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.0 → kryten_webqueue-0.44.2}/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
|