mirror of
https://github.com/calibrain/shelfmark.git
synced 2026-11-15 13:38:31 +00:00
## Summary Adds Jackett as a separate release source (`jackett`), as requested in #1443. - New `shelfmark/release_sources/jackett/` package: API client, settings tab, source and handler. - Searches Jackett's Torznab endpoints: the `all` aggregate by default, or each selected indexer individually. Failed or timed-out searches raise `SourceUnavailableError` instead of reporting "no releases found". - Reuses Prowlarr code rather than duplicating it: the Torznab parser (now also reads `<jackettindexer>`), `_prowlarr_result_to_release` (new optional `source`/`source_id` args), the release cache, URL/protocol helpers, the timeout clamp and size-limit helper (new optional config-key args), and the handler's `list_files` / retry-restore logic. - Downloads use the existing shared torrent client settings. - `JACKETT_URL` is a trusted origin for `.torrent` fetching (it is usually on the LAN). Prowlarr's `X-Api-Key` is not sent to it. - Added a Jackett section to `docs/environment-variables.md`. ## Screenshots <img width="1117" height="936" alt="Screenshot 2026-10-21 at 13-45-34 Shelfmark" src="https://github.com/user-attachments/assets/00339999-72c7-4226-bd9a-df8b325a7e22" /> <img width="1117" height="938" alt="Screenshot 2026-10-21 at 13-50-38 Shelfmark" src="https://github.com/user-attachments/assets/3c9cd2b4-932a-4b5c-9e10-6ec22b5f987d" /> <img width="1117" height="937" alt="Screenshot 2026-10-21 at 13-50-57 Shelfmark" src="https://github.com/user-attachments/assets/9c4d0ed9-da2f-4323-b188-341b45066efd" /> ## Not included - First-run onboarding does not offer Jackett yet. - No Jackett-specific category settings; it uses the standard 7000 / 3030 categories. ## Testing - New unit tests in `tests/jackett/` (client, source, handler) using mocked responses. - Full suite passes except 11 `tests/e2e` tests that also fail on a clean tree here (cannot write `/var/log/shelfmark`). - Tested against a live Jackett instance. Closes #1443 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> Co-authored-by: CaliBrain <calibrain@l4n.xyz>
25 lines
721 B
Python
25 lines
721 B
Python
"""
|
|
Jackett test configuration.
|
|
|
|
Stubs out optional heavy dependencies (flask_socketio) that are not available
|
|
in lightweight dev/CI environments. These are only needed by the IRC source,
|
|
which is unrelated to the jackett plugin under test.
|
|
"""
|
|
|
|
import sys
|
|
import types
|
|
|
|
|
|
def _stub_module(name: str) -> None:
|
|
"""Insert a minimal stub module into sys.modules if not already present."""
|
|
if name not in sys.modules:
|
|
stub = types.ModuleType(name)
|
|
# Provide no-op stand-ins for the symbols IRC source imports.
|
|
stub.SocketIO = object
|
|
stub.join_room = lambda *a, **kw: None
|
|
stub.leave_room = lambda *a, **kw: None
|
|
sys.modules[name] = stub
|
|
|
|
|
|
_stub_module("flask_socketio")
|