This commit is contained in:
JiriUhlir
2026-09-03 10:03:10 +02:00
parent 156289fe2d
commit a922117b3d
13 changed files with 583 additions and 59 deletions
+46 -2
View File
@@ -25,6 +25,11 @@ Hlavicky odpovedi:
Pokud je `X-Missing-Assets` nenulovy, v PDF neco chybi. Detaily jsou dostupne
jen u asynchronni cesty, kde se vraci cely seznam.
Vysledek se nikam neuklada. Vznikne v docasnem adresari, odesle se v odpovedi
a hned po jejim odeslani se i s pracovnim adresarem smaze. Neexistuje adresa,
ze ktere by sel stahnout znovu. Kdo potrebuje vysledek pozdeji, pouzije
`POST /jobs`.
## POST /jobs
Zaradi konverzi do fronty. Vraci HTTP 202.
@@ -73,14 +78,38 @@ dokumentu ukazatel postupu probehne dvakrat.
## GET /jobs/{job_id}/result
Stahne hotove PDF. Soubor se streamuje, nenacita se cely do pameti.
Stahne hotove PDF. Soubor se streamuje, nenacita se cely do pameti. Stahovat
lze opakovane, dokud vysledek nevyprsi.
- 404 job neexistuje nebo uz expiroval
- 409 job jeste nedobehl nebo skoncil chybou
## DELETE /jobs/{job_id}
Zrusi bezici job nebo smaze hotovy vysledek.
Zrusi bezici job nebo smaze hotovy vysledek hned, bez cekani na expiraci.
Soubor z uloziste zmizi okamzite, zaznam jobu zustava jeste po dobu TTL, aby
bylo videt, co se s nim stalo.
## Uchovavani souboru
Nic se neuklada trvale. Vsechno zije jen v docasnem adresari `STORAGE_DIR`
a v pameti procesu.
| Co | Kde skonci | Jak dlouho |
|---|---|---|
| zdrojove HTML | jen v pameti behem konverze | do konce konverze |
| vysledek `POST /convert` | docasny adresar jobu | do odeslani odpovedi, pak se maze |
| vysledek `POST /jobs` | docasny adresar jobu | `JOB_RESULT_TTL_SECONDS` od dokonceni, vychozi 1 hodina |
| meziprodukty renderu | docasny adresar jobu | do dokonceni jobu, pak se mazou |
| vysledek neuspesneho jobu | nikde | pracovni adresar se maze hned |
Presny cas expirace je v poli `expires_at` u `GET /jobs/{job_id}`. Po nem se
smaze soubor i zaznam jobu a dalsi dotaz vraci 404 `job_not_found`.
Uloziste neni trvale. Restart sluzby znamena ztratu rozpracovanych jobu
i hotovych vysledku, ktere jeste nikdo nestahl. Rozpracovane joby se oznaci
jako failed s kodem `service_restarted`. Pri startu se navic smazou adresare
jobu, ktere po restartu zustaly bez zaznamu.
## GET /health
@@ -207,6 +236,21 @@ Delici body jsou elementy `section`, `article`, `h1`, elementy s atributem
`break-before`. Pokud dokument zadny takovy nema, renderuje se vcelku a sluzba
to zaloguje.
### obrazky v tabulkach
WeasyPrint neumi vyresit procentualni sirku obrazku uvnitr bunky tabulky.
Sirku bunky v tu chvili jeste nezna, obrazek vyjde nulove siroky a z PDF zmizi
bez jakekoliv chyby, takze se neobjevi ani v `missing_assets`.
Sluzba proto u enginu `weasyprint` u obrazku uvnitr `td` a `th` prepise
`width: <n>%` na `width: auto` a procentualni atribut `width` odstrani. Pokud
obrazek nema zadne `max-width`, doplni se `max-width: 100%`, aby z bunky
nevystoupil. Obrazek se tim vykresli ve sve vlastni velikosti omezene bunkou,
coz je to, co dokument zamyslel.
Chromia se to netyka, ten takove obrazky rozvrhne spravne, a uprava se u nej
neprovadi.
### wait_for
Pouziva jen Chromium. `state` je `load`, `domcontentloaded` nebo `networkidle`,