kryten-webqueue 0.33.2__tar.gz → 0.33.4__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 (134) hide show
  1. kryten_webqueue-0.33.4/.github/workflows/gitleaks.yml +31 -0
  2. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/.gitignore +3 -0
  3. kryten_webqueue-0.33.4/.gitleaks.toml +6 -0
  4. kryten_webqueue-0.33.4/.pre-commit-config.yaml +36 -0
  5. kryten_webqueue-0.33.4/AGENT-WORKFLOW-GUIDE.md +1247 -0
  6. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/CHANGELOG.md +24 -0
  7. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/PKG-INFO +1 -1
  8. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/config.example.json +11 -0
  9. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/api_gate/client.py +13 -0
  10. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/app.py +22 -1
  11. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/catalog/db/_connection.py +0 -1
  12. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/config.py +19 -0
  13. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/integrations/cmsutils/enrichmeta.py +1 -1
  14. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/integrations/cmsutils/fetchurls.py +9 -9
  15. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/integrations/ytpipe/downloader.py +42 -36
  16. kryten_webqueue-0.33.4/kryten_webqueue/jobs/rehost_emotes.py +289 -0
  17. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/routes/admin_playlists.py +0 -1
  18. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/routes/pages.py +1 -2
  19. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/pyproject.toml +1 -1
  20. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/.github/workflows/python-publish.yml +0 -0
  21. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/.github/workflows/release.yml +0 -0
  22. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/README.md +0 -0
  23. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/deploy/kryten-webqueue.service +0 -0
  24. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/deploy/nginx-queue.conf +0 -0
  25. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/docs/IMPLEMENTATION_SPEC.md +0 -0
  26. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/docs/IMPL_API_GATE.md +0 -0
  27. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/docs/IMPL_ECONOMY.md +0 -0
  28. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/docs/IMPL_KRYTEN_PY.md +0 -0
  29. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/docs/IMPL_ROBOT.md +0 -0
  30. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/docs/Kryten-Economy Service Quality Survey Report at v0.13.0.md +0 -0
  31. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/docs/Kryten-Webqueue Service Quality Survey Report at v0.27.1.md +0 -0
  32. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/docs/Log for incorrect promo insertion problem.txt +0 -0
  33. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/docs/PLAN_PRESENCE_AND_PROMOS.md +0 -0
  34. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/docs/PRE_PLAN_GAPS.md +0 -0
  35. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/docs/PRODUCT_PLAN.md +0 -0
  36. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/docs/SPEC_JOBS_AND_BROWSE.md +0 -0
  37. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/docs/UX_POLISH_PLAN.md +0 -0
  38. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/__init__.py +0 -0
  39. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/__main__.py +0 -0
  40. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/api_gate/__init__.py +0 -0
  41. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/auth/__init__.py +0 -0
  42. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/auth/otp.py +0 -0
  43. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/auth/rate_limit.py +0 -0
  44. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/auth/session.py +0 -0
  45. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/catalog/__init__.py +0 -0
  46. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/catalog/db/__init__.py +0 -0
  47. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/catalog/db/_catalog.py +0 -0
  48. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/catalog/db/_feedback.py +0 -0
  49. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/catalog/db/_playlists.py +0 -0
  50. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/catalog/db/_queue.py +0 -0
  51. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/catalog/images.py +0 -0
  52. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/catalog/mediacms.py +0 -0
  53. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/catalog/sync.py +0 -0
  54. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/integrations/__init__.py +0 -0
  55. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/integrations/cmsutils/__init__.py +0 -0
  56. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/integrations/cmsutils/_common.py +0 -0
  57. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/integrations/cmsutils/enrichtitles.py +0 -0
  58. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/integrations/cmsutils/enrichtv.py +0 -0
  59. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/integrations/ytpipe/__init__.py +0 -0
  60. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/jobs/__init__.py +0 -0
  61. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/jobs/fetchurls_auth.py +0 -0
  62. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/jobs/manager.py +0 -0
  63. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/jobs/tasks.py +0 -0
  64. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/logging_config.py +0 -0
  65. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/playlists/__init__.py +0 -0
  66. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/playlists/bulk_add.py +0 -0
  67. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/playlists/fire.py +0 -0
  68. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/playlists/importer.py +0 -0
  69. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/playlists/ordering.py +0 -0
  70. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/playlists/scheduler.py +0 -0
  71. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/promos/__init__.py +0 -0
  72. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/promos/director.py +0 -0
  73. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/queue/__init__.py +0 -0
  74. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/queue/completion.py +0 -0
  75. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/queue/ordering.py +0 -0
  76. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/queue/poller.py +0 -0
  77. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/queue/presence.py +0 -0
  78. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/queue/race_poller.py +0 -0
  79. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/queue/shadow.py +0 -0
  80. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/routes/__init__.py +0 -0
  81. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/routes/admin_catalog.py +0 -0
  82. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/routes/admin_feedback.py +0 -0
  83. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/routes/admin_jobs.py +0 -0
  84. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/routes/admin_moderation.py +0 -0
  85. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/routes/admin_promos.py +0 -0
  86. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/routes/admin_queue.py +0 -0
  87. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/routes/admin_schedules.py +0 -0
  88. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/routes/auth.py +0 -0
  89. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/routes/catalog.py +0 -0
  90. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/routes/feedback.py +0 -0
  91. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/routes/queue.py +0 -0
  92. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/routes/user.py +0 -0
  93. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/static/css/main.css +0 -0
  94. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/static/js/admin-playlists.js +0 -0
  95. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/static/js/admin-promos.js +0 -0
  96. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/static/js/admin-queue-mgmt.js +0 -0
  97. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/static/js/admin-schedules.js +0 -0
  98. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/static/js/admin.js +0 -0
  99. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/static/js/main.js +0 -0
  100. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/templates/admin/index.html +0 -0
  101. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/templates/admin/playlists.html +0 -0
  102. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/templates/admin/promos.html +0 -0
  103. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/templates/admin/queue_mgmt.html +0 -0
  104. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/templates/admin/schedules.html +0 -0
  105. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/templates/auth/login.html +0 -0
  106. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/templates/base.html +0 -0
  107. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/templates/catalog/browse.html +0 -0
  108. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/templates/catalog/item_detail.html +0 -0
  109. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/templates/catalog/item_not_found.html +0 -0
  110. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/templates/feedback/index.html +0 -0
  111. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/templates/queue/index.html +0 -0
  112. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/templates/race.html +0 -0
  113. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/templates/user/dashboard.html +0 -0
  114. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/ws/__init__.py +0 -0
  115. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/ws/handler.py +0 -0
  116. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/kryten_webqueue/ws/manager.py +0 -0
  117. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/tests/__init__.py +0 -0
  118. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/tests/test_config_persistence.py +0 -0
  119. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/tests/test_feedback.py +0 -0
  120. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/tests/test_fetchurls_sharepoint.py +0 -0
  121. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/tests/test_phase1.py +0 -0
  122. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/tests/test_phase2_jobs.py +0 -0
  123. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/tests/test_phase3_jobs.py +0 -0
  124. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/tests/test_phase4_live_fixes.py +0 -0
  125. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/tests/test_playlist_import.py +0 -0
  126. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/tests/test_presence_refund.py +0 -0
  127. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/tests/test_promo_director.py +0 -0
  128. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/tests/test_promo_pool_exclusion.py +0 -0
  129. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/tests/test_queue_announce.py +0 -0
  130. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/tests/test_race_poller.py +0 -0
  131. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/tests/test_recently_played_hide.py +0 -0
  132. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/tests/test_save_results_to_playlist.py +0 -0
  133. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/tests/test_schedule_lock.py +0 -0
  134. {kryten_webqueue-0.33.2 → kryten_webqueue-0.33.4}/tests/test_search_facets.py +0 -0
@@ -0,0 +1,31 @@
1
+ name: Secret Scan (gitleaks)
2
+
3
+ # Server-side enforcement of the ecosystem secret-scanning requirement.
4
+ # Local pre-commit hooks can be bypassed (--no-verify); this gate cannot.
5
+ on:
6
+ push:
7
+ branches: [ main ]
8
+ pull_request:
9
+ branches: [ main ]
10
+ workflow_dispatch:
11
+
12
+ permissions:
13
+ contents: read
14
+
15
+ jobs:
16
+ gitleaks:
17
+ name: gitleaks
18
+ runs-on: ubuntu-latest
19
+ steps:
20
+ - uses: actions/checkout@v4
21
+ with:
22
+ # Full history so the scan covers every commit in the push / PR range.
23
+ fetch-depth: 0
24
+
25
+ - name: Run gitleaks
26
+ uses: gitleaks/gitleaks-action@v2
27
+ env:
28
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
29
+ # gitleaks-action is free for public repos. For a private repo, add a
30
+ # GITLEAKS_LICENSE org/repo secret (see gitleaks-action docs).
31
+ # Rules + allowlist are read from .gitleaks.toml at the repo root.
@@ -77,3 +77,6 @@ test-output/
77
77
 
78
78
  # uv
79
79
  uv.lock
80
+
81
+ # Runtime configs (local only; keep config.example.* tracked)
82
+ config.yaml
@@ -0,0 +1,6 @@
1
+ title = "kryten-webqueue gitleaks configuration"
2
+
3
+ # Start from gitleaks' built-in ruleset. Add a narrow allowlist only for genuine
4
+ # test fixtures if any are introduced; never allowlist a real credential.
5
+ [extend]
6
+ useDefault = true
@@ -0,0 +1,36 @@
1
+ # Pre-commit hooks (Kryten ecosystem).
2
+ #
3
+ # Runs safe auto-fixers (ruff --fix, black) and a secret scan (gitleaks) before each
4
+ # commit. ruff/black apply fixes and abort the commit so you re-stage and commit again.
5
+ # ruff and black run via `uv run` so they use THIS repo's exact locked versions — the same
6
+ # ones CI uses — avoiding formatter/linter drift between local commits and CI.
7
+ #
8
+ # One-time setup per clone:
9
+ # 1. uv sync # create the project env (ruff/black live here)
10
+ # 2. Install the gitleaks binary: winget install Gitleaks.Gitleaks (macOS: brew install gitleaks)
11
+ # 3. pipx install pre-commit # or: pip install pre-commit
12
+ # 4. pre-commit install
13
+ #
14
+ # Manual run: pre-commit run --all-files
15
+ # Config: ruff/black read pyproject.toml; gitleaks reads .gitleaks.toml.
16
+ repos:
17
+ - repo: local
18
+ hooks:
19
+ - id: ruff
20
+ name: ruff (lint + safe autofix)
21
+ entry: uv run --no-sync ruff check --fix --force-exclude
22
+ language: system
23
+ types_or: [python, pyi]
24
+ require_serial: true
25
+ - id: black
26
+ name: black (format)
27
+ entry: uv run --no-sync black
28
+ language: system
29
+ types_or: [python, pyi]
30
+ require_serial: true
31
+ - id: gitleaks
32
+ name: gitleaks (secret scan)
33
+ description: Block commits that introduce secrets.
34
+ entry: gitleaks git --pre-commit --staged --redact --verbose
35
+ language: system
36
+ pass_filenames: false