Hopp til innhold

Bygde en databasedrevet generator for CV, referanser, portefølje og søknadsbrev i Python — 41 moduler, 10 580 linjer — som gjengir seks utdataformater fra én SQLite‑kilde med 23 tabeller, satt sammen av en idempotent pipeline i 19 trinn.

41 moduler som genererer seks formater fra én database

Situasjon. En CV, en referanseliste, en portefølje og et søknadsbrev er de samme faktaene ordnet på fire måter, og å holde dem som fire dokumenter betyr at hver rettelse gjøres fire ganger og til slutt ikke blir gjort. Med tre språk ganges det med tre. Feilmodusen er ikke at ett dokument er feil; den er at to dokumenter sier forskjellige ting, og at ingenting sier hvilket som er gjeldende.

Oppgave. Én kilde til fakta måtte produsere hvert dokument, på hvert språk, i hvert format, med oppsettet bestemt av kode og ikke av den som sist redigerte en fil.

Handling. Kilden er en SQLite‑database med tjuetre tabeller — resultater, titler, selskaper, regioner, kategorier, tjenester, profiler, referanser, sammendrag — satt sammen av en pipeline i nitten trinn som går fra en tom fil til en komplett database med én kommando. Trinnene er ordnet, og hvert av dem er skrevet slik at det er trygt å gjenta, så pipelinen kan kjøres mot en eksisterende database uten å duplisere en rad. Førtien Python‑moduler på til sammen 10 580 linjer gjengir seks utdataformater fra den: HTML, PDF i to varianter, ren tekst, Markdown og JSON, gjennom seks Jinja‑maler og åtte stilark. Avhengighetene under kjøring ble holdt på nøyaktig to, en malmotor og en PDF‑renderer, ut fra argumentet om at en dokumentgenerator som ikke kan installeres om fem år, ikke har bevart noe. Målretting er et førsteklasses konsept og ikke en manuell redigering: en profil velger hvilke resultater som vises og i hvilken rekkefølge, så et dokument rettet mot én type leser er en spørring og ikke en kopi.

Resultat. Seks formater, tre språk og fem temaer kommer ut av én database, og en rettet setning rettes én gang. Kostnaden er at systemet nå er den eneste måten å produsere et dokument på — det finnes ikke lenger en fil å åpne og redigere i en fart, og å legge til et språk betyr å legge det til overalt før noe som helst kan bygges.

Ett stykke av en lengre oversikt — og den ligger i sin helhet her.

Hver oppføring er skrevet på samme måte: situasjonen, oppgaven, hva vi gjorde, og hva som endret seg.

Se hele oversikten