Make CWA linking and uploads optional
This commit is contained in:
+12
-12
@@ -13,7 +13,6 @@ from bindery import config, fff, orchestrator
|
||||
from bindery.diffing import text_hash
|
||||
from bindery.epub import EpubError
|
||||
from bindery.fff import SiteSnapshot, StoryError
|
||||
from bindery.ingest import IngestFolder
|
||||
from bindery.jobs import DownloadMode, Job, JobQueue, QueueStatus
|
||||
from bindery.store import Store
|
||||
|
||||
@@ -35,7 +34,7 @@ def fake(story_epub, monkeypatch, tmp_path):
|
||||
monkeypatch.setattr(config, "CWA_USERNAME", "bindery")
|
||||
monkeypatch.setattr(config, "CWA_PASSWORD", "secret")
|
||||
monkeypatch.setattr(orchestrator, "store", Store(tmp_path / "bindery.db"))
|
||||
monkeypatch.setattr(orchestrator, "ingest_folder", IngestFolder(tmp_path / "ingest"))
|
||||
monkeypatch.setattr(config, "INGEST_DIR", tmp_path / "ingest")
|
||||
monkeypatch.setattr(orchestrator, "finder", orchestrator.BookFinder())
|
||||
yield server
|
||||
server.close()
|
||||
@@ -51,12 +50,12 @@ def add_story(**changes):
|
||||
|
||||
|
||||
def ingest_files():
|
||||
folder = orchestrator.ingest_folder.path
|
||||
folder = config.INGEST_DIR
|
||||
return sorted(p.name for p in folder.iterdir()) if folder.exists() else []
|
||||
|
||||
|
||||
def opf(name):
|
||||
with zipfile.ZipFile(orchestrator.ingest_folder.path / name) as z:
|
||||
with zipfile.ZipFile(config.INGEST_DIR / name) as z:
|
||||
return z.read("content.opf").decode()
|
||||
|
||||
|
||||
@@ -80,7 +79,7 @@ def test_ingested_story_is_found_and_updated_with_a_sidecar(fake):
|
||||
assert (story["calibre_id"], story["calibre_uuid"]) == (1, "uuid-1")
|
||||
epub, manifest = ingest_files()
|
||||
assert manifest == epub + ".cwa.json"
|
||||
assert json.loads((orchestrator.ingest_folder.path / manifest).read_text()) == {
|
||||
assert json.loads((config.INGEST_DIR / manifest).read_text()) == {
|
||||
"action": "add_format",
|
||||
"book_id": 1,
|
||||
}
|
||||
@@ -94,12 +93,13 @@ def test_update_fails_while_cwa_has_no_such_book(fake):
|
||||
assert ingest_files() == [] # a second plain epub would make a duplicate book
|
||||
|
||||
|
||||
def test_update_fails_without_cwa_url(fake, monkeypatch):
|
||||
def test_update_exports_without_a_library_connection(fake, monkeypatch):
|
||||
monkeypatch.setattr(config, "CWA_URL", "")
|
||||
story_id = add_story(ingested_at="2026-01-01T00:00:00")
|
||||
with pytest.raises(orchestrator.StoryError, match="CWA_URL is not set"):
|
||||
rebuild(story_id)
|
||||
assert ingest_files() == []
|
||||
assert rebuild(story_id) == "Sent to ingest folder"
|
||||
assert orchestrator.store.get_story(story_id)["status"] == "ok"
|
||||
assert orchestrator.store.get_setting(story_id, "upload_held") is None
|
||||
assert len(ingest_files()) == 1
|
||||
|
||||
|
||||
def test_linked_story_still_updates_when_cwa_is_down(fake):
|
||||
@@ -306,7 +306,7 @@ def test_the_site_cover_goes_in_the_book(fake, jobs, monkeypatch, tmp_path):
|
||||
assert update(story_id).startswith("1 new chapter")
|
||||
assert orchestrator.store.cover(story_id)["data"] == PNG
|
||||
(epub,) = [n for n in ingest_files() if n.endswith(".epub")]
|
||||
with zipfile.ZipFile(orchestrator.ingest_folder.path / epub) as z:
|
||||
with zipfile.ZipFile(config.INGEST_DIR / epub) as z:
|
||||
assert "OEBPS/cover.xhtml" in z.namelist()
|
||||
|
||||
|
||||
@@ -598,8 +598,8 @@ def test_paused_uploads_go_to_cwa_when_the_pause_ends(fake, jobs):
|
||||
orchestrator.save_settings(pause_uploads=True)
|
||||
assert "pause" in rebuild(story_id)
|
||||
assert ingest_files() == []
|
||||
assert orchestrator.approve_upload(story_id, "uuid-1")["mode"] == DownloadMode.REBUILD.value
|
||||
assert "pause" in orchestrator._run_rebuild(jobs.get_next())
|
||||
assert orchestrator.approve_upload(story_id, "uuid-1") is None
|
||||
assert jobs.get_next() is None
|
||||
orchestrator.save_settings(pause_uploads=True)
|
||||
assert jobs.get_next() is None
|
||||
orchestrator.save_settings(pause_uploads=False)
|
||||
|
||||
Reference in New Issue
Block a user