feat(e-pub): jobs overlever genstart (job.json, slettes efter et døgn) og sendes automatisk til CWA/Audiobookshelf
Claude-Session: https://claude.ai/code/session_01AUj1LSMmrowcomkn1ciAgj
This commit is contained in:
+26
-5
@@ -28,7 +28,7 @@ os.chdir(pathlib.Path(__file__).resolve().parents[1])
|
||||
import config # noqa: E402
|
||||
config.EPUB_SETTINGS_PATH.write_text(json.dumps({"tools_dir": str(VAERKTOEJ), "job_timeout_seconds": 3,
|
||||
"output_ttl_seconds": 4, "max_concurrent_jobs": 1,
|
||||
"cwa_ingest_dir": str(ROD / "cwa"), "abs_dir": str(ROD / "abs")}))
|
||||
"cwa_ingest_dir": str(ROD / "cwa"), "abs_dir": str(ROD / "abs"), "auto_send": False}))
|
||||
(ROD / "cwa").mkdir()
|
||||
(ROD / "abs").mkdir()
|
||||
import main # noqa: E402
|
||||
@@ -84,7 +84,7 @@ tjek("epub content-type", r.headers["content-type"] == "application/epub+zip" an
|
||||
tjek("filnavn i Content-Disposition", "Min%20Bog.epub" in r.headers["content-disposition"] or "Min Bog.epub" in r.headers["content-disposition"])
|
||||
time.sleep(0.3)
|
||||
tjek("slettet efter hentning", c.get(f"/e-pub/status/{a['id']}").json()["tilstand"] == "hentet"
|
||||
and not (config.EPUB_SCRATCH / a["id"]).exists())
|
||||
and not (config.EPUB_SCRATCH / a["id"] / "ud").exists())
|
||||
tjek("anden hentning = 410", c.get(f"/e-pub/hent/{a['id']}").status_code == 410)
|
||||
sb = vent(b["id"])
|
||||
tjek("m4b færdig, \\r-linjer splittet", sb["filnavn"] == "Ane Forfatter - Lydbog æøå.m4b" and "trin 3" in sb["log"])
|
||||
@@ -116,10 +116,31 @@ tjek("men ikke til andres job", c.get(f"/e-pub/status/{b['id']}").status_code ==
|
||||
tjek("og ikke admin", c.get("/admin/epub").status_code == 403)
|
||||
|
||||
BRUGER.update(username="test", groups=["authentik Admins"])
|
||||
u = vent(c.post("/e-pub/start", data={"link": "ok-epub 2"}).json()["id"])
|
||||
import epub # noqa: E402
|
||||
indst = json.loads(config.EPUB_SETTINGS_PATH.read_text())
|
||||
config.EPUB_SETTINGS_PATH.write_text(json.dumps({**indst, "auto_send": True, "output_ttl_seconds": 30}))
|
||||
u = vent(c.post("/e-pub/start", data={"link": "ok-epub 3"}).json()["id"])
|
||||
time.sleep(0.5)
|
||||
u = c.get(f"/e-pub/status/{u['id']}").json()
|
||||
tjek("auto-send til CWA", u["sendt"] == "CWA" and (ROD / "cwa" / "Min Bog (2).epub").exists() and u["tilstand"] == "faerdig")
|
||||
|
||||
# Genstart: en færdig fil overlever, et job der var i gang bliver "afbrudt".
|
||||
k = vent(c.post("/e-pub/start", data={"link": "slow"}).json()["id"], slut=("koerer",))
|
||||
epub._jobs.clear()
|
||||
epub._indlaes()
|
||||
tjek("færdig fil overlever genstart", c.get(f"/e-pub/status/{u['id']}").json()["tilstand"] == "faerdig"
|
||||
and c.get(f"/e-pub/hent/{u['id']}").content == b"PK")
|
||||
k2 = c.get(f"/e-pub/status/{k['id']}").json()
|
||||
tjek("igangværende job → afbrudt efter genstart", k2["tilstand"] == "fejl" and "genstartet" in k2["besked"])
|
||||
time.sleep(3.5) # det gamle job når at time ud; må ikke overskrive noget
|
||||
|
||||
config.EPUB_SETTINGS_PATH.write_text(json.dumps({**indst, "auto_send": False, "output_ttl_seconds": 4}))
|
||||
v = vent(c.post("/e-pub/start", data={"link": "ok-epub 4"}).json()["id"])
|
||||
time.sleep(1)
|
||||
tjek("ikke-hentet fil findes stadig inden TTL", c.get(f"/e-pub/status/{v['id']}").json()["tilstand"] == "faerdig")
|
||||
time.sleep(5)
|
||||
tjek("ikke-hentet fil udløber efter TTL", c.get(f"/e-pub/status/{u['id']}").json()["tilstand"] == "udloebet"
|
||||
and not (config.EPUB_SCRATCH / u["id"]).exists())
|
||||
tjek("job + fil væk efter TTL", c.get(f"/e-pub/status/{v['id']}").status_code == 404
|
||||
and not (config.EPUB_SCRATCH / v["id"]).exists())
|
||||
tjek("admin gem validerer", c.post("/admin/epub", data={"tools_dir": "relativ"}, follow_redirects=False).headers["location"].startswith("/admin/epub?saved=Afvist"))
|
||||
c.post("/admin/epub", data={"tools_dir": "/x", "max_concurrent_jobs": "99", "job_timeout_seconds": "abc", "rp_required": "on"})
|
||||
s = json.loads(config.EPUB_SETTINGS_PATH.read_text())
|
||||
|
||||
Reference in New Issue
Block a user