kryten-webqueue 0.9.11__tar.gz → 0.9.12__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.
Files changed (89) hide show
  1. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/CHANGELOG.md +6 -0
  2. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/PKG-INFO +1 -1
  3. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/integrations/ytpipe/downloader.py +6 -2
  4. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/pyproject.toml +1 -1
  5. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/.github/workflows/python-publish.yml +0 -0
  6. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/.github/workflows/release.yml +0 -0
  7. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/.gitignore +0 -0
  8. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/README.md +0 -0
  9. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/config.example.json +0 -0
  10. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/deploy/kryten-webqueue.service +0 -0
  11. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/deploy/nginx-queue.conf +0 -0
  12. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/docs/IMPLEMENTATION_SPEC.md +0 -0
  13. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/docs/IMPL_API_GATE.md +0 -0
  14. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/docs/IMPL_ECONOMY.md +0 -0
  15. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/docs/IMPL_KRYTEN_PY.md +0 -0
  16. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/docs/IMPL_ROBOT.md +0 -0
  17. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/docs/PRE_PLAN_GAPS.md +0 -0
  18. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/docs/PRODUCT_PLAN.md +0 -0
  19. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/docs/SPEC_JOBS_AND_BROWSE.md +0 -0
  20. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/__init__.py +0 -0
  21. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/__main__.py +0 -0
  22. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/api_gate/__init__.py +0 -0
  23. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/api_gate/client.py +0 -0
  24. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/app.py +0 -0
  25. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/auth/__init__.py +0 -0
  26. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/auth/otp.py +0 -0
  27. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/auth/rate_limit.py +0 -0
  28. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/auth/session.py +0 -0
  29. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/catalog/__init__.py +0 -0
  30. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/catalog/db.py +0 -0
  31. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/catalog/images.py +0 -0
  32. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/catalog/mediacms.py +0 -0
  33. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/catalog/sync.py +0 -0
  34. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/config.py +0 -0
  35. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/integrations/__init__.py +0 -0
  36. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/integrations/cmsutils/__init__.py +0 -0
  37. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/integrations/cmsutils/_common.py +0 -0
  38. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/integrations/cmsutils/enrichmeta.py +0 -0
  39. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/integrations/cmsutils/enrichtitles.py +0 -0
  40. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/integrations/cmsutils/enrichtv.py +0 -0
  41. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/integrations/cmsutils/fetchurls.py +0 -0
  42. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/integrations/ytpipe/__init__.py +0 -0
  43. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/jobs/__init__.py +0 -0
  44. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/jobs/fetchurls_auth.py +0 -0
  45. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/jobs/manager.py +0 -0
  46. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/jobs/tasks.py +0 -0
  47. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/playlists/__init__.py +0 -0
  48. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/playlists/fire.py +0 -0
  49. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/playlists/importer.py +0 -0
  50. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/playlists/scheduler.py +0 -0
  51. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/queue/__init__.py +0 -0
  52. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/queue/ordering.py +0 -0
  53. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/queue/poller.py +0 -0
  54. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/queue/shadow.py +0 -0
  55. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/routes/__init__.py +0 -0
  56. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/routes/admin_catalog.py +0 -0
  57. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/routes/admin_jobs.py +0 -0
  58. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/routes/admin_playlists.py +0 -0
  59. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/routes/admin_queue.py +0 -0
  60. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/routes/admin_schedules.py +0 -0
  61. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/routes/auth.py +0 -0
  62. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/routes/catalog.py +0 -0
  63. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/routes/pages.py +0 -0
  64. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/routes/queue.py +0 -0
  65. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/routes/user.py +0 -0
  66. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/static/css/main.css +0 -0
  67. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/static/js/main.js +0 -0
  68. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/templates/admin/index.html +0 -0
  69. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/templates/admin/playlists.html +0 -0
  70. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/templates/admin/queue_mgmt.html +0 -0
  71. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/templates/admin/schedules.html +0 -0
  72. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/templates/auth/login.html +0 -0
  73. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/templates/base.html +0 -0
  74. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/templates/catalog/browse.html +0 -0
  75. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/templates/catalog/item_detail.html +0 -0
  76. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/templates/catalog/item_not_found.html +0 -0
  77. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/templates/queue/index.html +0 -0
  78. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/templates/user/dashboard.html +0 -0
  79. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/ws/__init__.py +0 -0
  80. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/ws/handler.py +0 -0
  81. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/kryten_webqueue/ws/manager.py +0 -0
  82. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/tests/__init__.py +0 -0
  83. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/tests/test_fetchurls_sharepoint.py +0 -0
  84. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/tests/test_phase1.py +0 -0
  85. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/tests/test_phase2_jobs.py +0 -0
  86. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/tests/test_phase3_jobs.py +0 -0
  87. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/tests/test_phase4_live_fixes.py +0 -0
  88. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/tests/test_playlist_import.py +0 -0
  89. {kryten_webqueue-0.9.11 → kryten_webqueue-0.9.12}/tests/test_queue_announce.py +0 -0
@@ -6,6 +6,12 @@ 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.9.12] — 2026-06-12
10
+
11
+ ### Fixed
12
+
13
+ - **`fetch`/`fetchurls` no longer crash with "Invalid js_runtimes format".** Newer yt-dlp expects `js_runtimes` as a dict of `{runtime: {config}}`, not a list; the vendored downloader now passes `js_runtimes={'deno': {}, 'node': {}}`.
14
+
9
15
  ## [0.9.11] — 2026-06-12
10
16
 
11
17
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kryten-webqueue
3
- Version: 0.9.11
3
+ Version: 0.9.12
4
4
  Summary: Netflix/Tubi-style catalog browser and pay-to-play queue management for CyTube
5
5
  Author: grobertson
6
6
  License-Expression: MIT
@@ -41,13 +41,17 @@ from slugify import slugify
41
41
  # available runtime is used. Applied centrally via a thin YoutubeDL subclass so
42
42
  # every extraction/download call in this module gets it without editing each
43
43
  # ydl_opts dict. ``setdefault`` means an explicit per-call value still wins.
44
- _JS_RUNTIMES = ["deno", "node"]
44
+ #
45
+ # yt-dlp expects ``js_runtimes`` as a dict of ``{runtime: {config}}`` (an empty
46
+ # dict means default config for that runtime); passing a list raises
47
+ # "Invalid js_runtimes format, expected a dict of {runtime: {config}}".
48
+ _JS_RUNTIMES = {"deno": {}, "node": {}}
45
49
 
46
50
 
47
51
  class _YoutubeDLWithJSRuntimes(yt_dlp.YoutubeDL):
48
52
  def __init__(self, params=None, *args, **kwargs): # noqa: D107
49
53
  merged = dict(params or {})
50
- merged.setdefault("js_runtimes", _JS_RUNTIMES)
54
+ merged.setdefault("js_runtimes", dict(_JS_RUNTIMES))
51
55
  super().__init__(merged, *args, **kwargs)
52
56
 
53
57
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "kryten-webqueue"
3
- version = "0.9.11"
3
+ version = "0.9.12"
4
4
  description = "Netflix/Tubi-style catalog browser and pay-to-play queue management for CyTube"
5
5
  readme = "README.md"
6
6
  license = "MIT"