mirror of
https://github.com/calibrain/shelfmark.git
synced 2026-09-28 08:30:20 +01:00
- Add new booklore API file formats - Renamed cookie for better login persistence with reverse proxy - Updated fs.py to try hardlink before atomic move from tmp dir - Fix transmission URL parsing - Fix scenario where file processing of huge files starves the healthcheck - Large enhancements to custom scripting, including passing JSON download info, more consistent activation across output types, decoupling from staging behavior, and added full documentation.
70 lines
2.2 KiB
Python
70 lines
2.2 KiB
Python
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
from shelfmark.core.models import DownloadTask
|
|
from shelfmark.download.postprocess import scan as scan_mod
|
|
|
|
|
|
def test_scan_directory_tree_runs_walk_via_run_blocking_io(tmp_path, monkeypatch) -> None:
|
|
(tmp_path / "book.epub").write_text("x", encoding="utf-8")
|
|
|
|
inside_run_blocking = False
|
|
walk_called = False
|
|
|
|
original_walk = scan_mod.os.walk
|
|
|
|
def walk_wrapper(*args, **kwargs):
|
|
nonlocal walk_called
|
|
walk_called = True
|
|
assert inside_run_blocking, "os.walk should run within run_blocking_io"
|
|
return original_walk(*args, **kwargs)
|
|
|
|
def run_blocking_io_stub(func, *args, **kwargs):
|
|
nonlocal inside_run_blocking
|
|
inside_run_blocking = True
|
|
try:
|
|
return func(*args, **kwargs)
|
|
finally:
|
|
inside_run_blocking = False
|
|
|
|
monkeypatch.setattr(scan_mod.os, "walk", walk_wrapper)
|
|
monkeypatch.setattr(scan_mod, "run_blocking_io", run_blocking_io_stub)
|
|
|
|
scan_mod.scan_directory_tree(tmp_path, content_type=None)
|
|
|
|
assert walk_called, "Expected scan_directory_tree to call os.walk"
|
|
|
|
|
|
def test_extract_archive_files_runs_extract_via_run_blocking_io(tmp_path, monkeypatch) -> None:
|
|
inside_run_blocking = False
|
|
extract_called = False
|
|
|
|
def extract_archive_stub(*args, **kwargs):
|
|
nonlocal extract_called
|
|
extract_called = True
|
|
assert inside_run_blocking, "extract_archive should run within run_blocking_io"
|
|
return [], [], []
|
|
|
|
def run_blocking_io_stub(func, *args, **kwargs):
|
|
nonlocal inside_run_blocking
|
|
inside_run_blocking = True
|
|
try:
|
|
return func(*args, **kwargs)
|
|
finally:
|
|
inside_run_blocking = False
|
|
|
|
monkeypatch.setattr(scan_mod, "extract_archive", extract_archive_stub)
|
|
monkeypatch.setattr(scan_mod, "run_blocking_io", run_blocking_io_stub)
|
|
|
|
task = DownloadTask(task_id="t", source="prowlarr", title="Test", content_type="book")
|
|
scan_mod.extract_archive_files(
|
|
archive_path=Path("/tmp/fake.zip"),
|
|
output_dir=tmp_path,
|
|
task=task,
|
|
cleanup_archive=False,
|
|
)
|
|
|
|
assert extract_called, "Expected extract_archive_files to call extract_archive"
|
|
|