kryten-webqueue 0.20.1__tar.gz → 0.21.0__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.20.1 → kryten_webqueue-0.21.0}/CHANGELOG.md +9 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/PKG-INFO +1 -1
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/app.py +4 -1
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/templates/admin/index.html +1 -1
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/pyproject.toml +1 -1
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/.github/workflows/python-publish.yml +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/.github/workflows/release.yml +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/.gitignore +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/README.md +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/config.example.json +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/deploy/kryten-webqueue.service +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/deploy/nginx-queue.conf +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/docs/IMPLEMENTATION_SPEC.md +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/docs/IMPL_API_GATE.md +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/docs/IMPL_ECONOMY.md +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/docs/IMPL_KRYTEN_PY.md +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/docs/IMPL_ROBOT.md +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/docs/PLAN_PRESENCE_AND_PROMOS.md +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/docs/PRE_PLAN_GAPS.md +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/docs/PRODUCT_PLAN.md +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/docs/SPEC_JOBS_AND_BROWSE.md +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/docs/UX_POLISH_PLAN.md +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/__init__.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/__main__.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/api_gate/__init__.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/api_gate/client.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/auth/__init__.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/auth/otp.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/auth/rate_limit.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/auth/session.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/catalog/__init__.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/catalog/db.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/catalog/images.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/catalog/mediacms.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/catalog/sync.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/config.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/integrations/__init__.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/integrations/cmsutils/__init__.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/integrations/cmsutils/_common.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/integrations/cmsutils/enrichmeta.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/integrations/cmsutils/enrichtitles.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/integrations/cmsutils/enrichtv.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/integrations/cmsutils/fetchurls.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/integrations/ytpipe/__init__.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/integrations/ytpipe/downloader.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/jobs/__init__.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/jobs/fetchurls_auth.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/jobs/manager.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/jobs/tasks.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/logging_config.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/playlists/__init__.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/playlists/bulk_add.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/playlists/fire.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/playlists/importer.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/playlists/ordering.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/playlists/scheduler.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/promos/__init__.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/promos/director.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/queue/__init__.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/queue/ordering.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/queue/poller.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/queue/presence.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/queue/shadow.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/routes/__init__.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/routes/admin_catalog.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/routes/admin_jobs.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/routes/admin_playlists.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/routes/admin_promos.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/routes/admin_queue.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/routes/admin_schedules.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/routes/auth.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/routes/catalog.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/routes/pages.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/routes/queue.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/routes/user.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/static/css/main.css +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/static/js/main.js +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/templates/admin/playlists.html +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/templates/admin/promos.html +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/templates/admin/queue_mgmt.html +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/templates/admin/schedules.html +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/templates/auth/login.html +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/templates/base.html +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/templates/catalog/browse.html +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/templates/catalog/item_detail.html +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/templates/catalog/item_not_found.html +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/templates/queue/index.html +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/templates/user/dashboard.html +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/ws/__init__.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/ws/handler.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/ws/manager.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/tests/__init__.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/tests/test_config_persistence.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/tests/test_fetchurls_sharepoint.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/tests/test_phase1.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/tests/test_phase2_jobs.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/tests/test_phase3_jobs.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/tests/test_phase4_live_fixes.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/tests/test_playlist_import.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/tests/test_presence_refund.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/tests/test_promo_director.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/tests/test_promo_pool_exclusion.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/tests/test_queue_announce.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/tests/test_save_results_to_playlist.py +0 -0
- {kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/tests/test_search_facets.py +0 -0
|
@@ -6,6 +6,15 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.21.0] — 2026-06-17
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
|
|
13
|
+
- **Catalog sync no longer runs on startup.** The background sync loop now waits a full interval before its first run instead of syncing immediately when the process starts, so a restart won't kick off a sync. Admins can still trigger it on demand with the "Sync Catalog" button.
|
|
14
|
+
- **Friendlier job buttons.** Jobs that open a parameter dialog before running now show **"Begin…"** instead of "Run…", signalling that a dialog (with a Cancel) comes next rather than an immediate action. One-click jobs keep the plain **"Run"** label.
|
|
15
|
+
|
|
16
|
+
[0.21.0]: https://github.com/grobertson/kryten-webqueue/releases/tag/v0.21.0
|
|
17
|
+
|
|
9
18
|
## [0.20.1] — 2026-06-17
|
|
10
19
|
|
|
11
20
|
### Fixed
|
|
@@ -163,12 +163,15 @@ async def lifespan(app: FastAPI):
|
|
|
163
163
|
# Background workers
|
|
164
164
|
async def _catalog_sync_loop():
|
|
165
165
|
interval = config.catalog_sync_interval_hours * 3600
|
|
166
|
+
# Sync on the interval, NOT immediately on startup — a restart should
|
|
167
|
+
# not trigger a catalog sync. Admins can run it on demand from the
|
|
168
|
+
# "Sync Catalog" button.
|
|
166
169
|
while True:
|
|
170
|
+
await asyncio.sleep(interval)
|
|
167
171
|
try:
|
|
168
172
|
await catalog_sync.sync()
|
|
169
173
|
except Exception as e:
|
|
170
174
|
logger.exception(f"Catalog sync error: {type(e).__name__}: {e}")
|
|
171
|
-
await asyncio.sleep(interval)
|
|
172
175
|
|
|
173
176
|
async def _otp_cleanup_loop():
|
|
174
177
|
while True:
|
{kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/templates/admin/index.html
RENAMED
|
@@ -199,7 +199,7 @@ async function loadJobs() {
|
|
|
199
199
|
<span class="job-label">${escapeHtml(j.label)}${hasParams ? ' <span class="job-badge">params</span>' : ''}</span>
|
|
200
200
|
${summary}
|
|
201
201
|
<button class="btn btn-sm" onclick="startJob('${j.name}')" ${j.running ? 'disabled' : ''}>
|
|
202
|
-
${j.running ? 'Running…' : (hasParams ? '
|
|
202
|
+
${j.running ? 'Running…' : (hasParams ? 'Begin…' : 'Run')}
|
|
203
203
|
</button>
|
|
204
204
|
</div>`;
|
|
205
205
|
}).join('')
|
|
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
|
|
File without changes
|
{kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/integrations/cmsutils/__init__.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/integrations/cmsutils/_common.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/integrations/cmsutils/enrichtv.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/integrations/cmsutils/fetchurls.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/integrations/ytpipe/__init__.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/templates/admin/playlists.html
RENAMED
|
File without changes
|
{kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/templates/admin/promos.html
RENAMED
|
File without changes
|
{kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/templates/admin/queue_mgmt.html
RENAMED
|
File without changes
|
{kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/templates/admin/schedules.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/templates/catalog/browse.html
RENAMED
|
File without changes
|
{kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/templates/catalog/item_detail.html
RENAMED
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/templates/queue/index.html
RENAMED
|
File without changes
|
{kryten_webqueue-0.20.1 → kryten_webqueue-0.21.0}/kryten_webqueue/templates/user/dashboard.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
|