Repository navigation
Development.nl
🌐 English · Deutsch · Español · Français · 简体中文
Deze pagina beschrijft hoe u een lokale ontwikkelomgeving opzet voor
app/ zelf — in tegenstelling tot Installeren (de
verpakte desktopversie draaien) of Implementeren (de
gecontaineriseerde productievorm draaien). Lees eerst
Architectuur voor hoe de onderdelen in elkaar passen.
npm install # installeert de workspace (app/ + packages/gramps-date)
cp app/.env.example app/.env.local # wijst naar een draaiende gramps-web-api-instantie
npm run dev -w app # start de Vite-ontwikkelserverapp/ heeft een echte gramps-web-api-backend nodig om mee te praten —
het is een pure client, er is geen modus met nepgegevens. De lichtste
optie is dev-fixtures/layer2-local-cache/api-fixture-example/setup.sh
(zie Dev-fixtures hieronder).
Elke fixture draait gramps-web-api vanuit een broncode-checkout in
dezelfde Python-omgeving als het fixturescript, dus die omgeving heeft
het volgende nodig:
pip install -e ~/gramps/gramps --no-deps # gramps zelf
pip install -e ~/gramps/gramps-web-api --no-deps # + de afhankelijkheden, zie hieronder
python3 deploy/webapi-requirements.py ~/gramps/gramps-web-api/pyproject.toml \
| pip install -r /dev/stdinconst.py van gramps-web-api voert bij het importeren
gi.require_version("Gtk", "3.0") uit, dus echte PyGObject en de
GTK3-typelibs moeten aanwezig zijn (apt install python3-gi gir1.2-gtk-3.0,
of conda install -c conda-forge pygobject gtk3); PyICU is optioneel
maar onderdrukt een lokalisatiewaarschuwing en repareert het sorteren van
namen.
Merk op dat de /api/<type>/query/-endpoints waarop app/ is gebouwd in
de master van gramps-project/gramps-web-api zijn opgenomen — een oudere
fork of branch geeft op elk daarvan een 404.
dev-fixtures/ bevat echte gramps-web-api-backends om app/ lokaal
tegen te draaien. Ze maken geen deel uit van het uitgeleverde product —
ze maken alleen lokale ontwikkeling mogelijk zonder zelf met de hand een
server te configureren. Lees een script voordat u het uitvoert —
geen ervan is idempotent ten opzichte van een al gevulde stamboom. Elke
fixture logt in als gramps/gramps.
-
layer2-local-cache/api-fixture-example/— de lichtste optie: een instantie met gewone SQLite op:5002, geladen met de officiële voorbeelddatabaseexample.grampsvan Gramps zelf, handig voor echte variatie in datums (modificatoren, kwaliteit, bereiken/perioden). ZetVITE_API_BASE=http://localhost:5002inapp/.env.localom ernaar te verwijzen. Live synchronisatie werkt er ook mee, omdat het gewoon een poll op/api/transactions/history/is, niet gebonden aan Postgres. -
layer2-local-cache/api-fixture/— nog een instantie met gewone SQLite, in plaats daarvan geladen met synthetische gegevens die doorgramps-benchzijn gegenereerd, om op schaal te testen tegen een grote stamboom. -
layer3-sync/api-fixture/— een instantie met een echte Postgres (SharedPostgreSQL) als basis, handig om echt gelijktijdige bewerkingen door meerdere schrijvers op dezelfde stamboom te oefenen. Hiernaar wijst de standaard-VITE_API_BASEvanapp/.env.example, en het vereist een draaiende Postgres plus de add-onSharedPostgreSQL, naast alles wat de SQLite-fixtures nodig hebben.
Gramplets draaien Python in de browser onder Pyodide, met
lokaal gebouwde wheels die de postinstall-stap van npm install
overslaat (met een logregel) als ze er nog niet zijn — waardoor
Gramplets tijdens het draaien mislukken met
No known package with name 'gramps-gen-lib'. Bouw ze één keer:
python3 scripts/build-stub-wheels.py # vervangers voor gi + orjson voor Pyodide
python3 scripts/build-gramps-wheel.py # gramps.gen.lib als Pyodide-wheel
node app/scripts/copy-wasm.mjs # registreert ze in public/pyodide/npm run test -w app # Vitest: pure store-/synclogica, geen weergave van de hele app
npm run typecheck -w app # tsc --noEmit
npm run test -w packages/gramps-date
pytest tests/ # ingebouwde GOQL-filtervoorinstellingen vs. echte regels van gramps-coreDe pytest-suite (tests/gql_presets/, zie de eigen README) controleert
elke ingebouwde Filters-voorinstelling (app/src/data/gqlFilterPresets.ts)
tegen de echte klasse Rule van gramps-core die ze moet nabootsen,
uitgevoerd op de eigen meegeleverde voorbeeldstamboom van gramps-core —
zodat niet alleen "compileert dit" wordt gecontroleerd, maar ook
"selecteert het dezelfde rijen als de desktopregel zou doen". Vereist dat
gramps/gramps-object-query-language importeerbaar zijn (wat overal
waar gramps-web-api zelf draait al zo is); er is geen aparte stap nodig
om de eigen JSON-momentopname van de voorinstellingen synchroon te
houden, dat gebeurt automatisch.
De UI-teksten van app/ gaan via t() (app/src/i18n/i18n.ts), dat de
eigen aanpak van gramps-web
volgt — een eenvoudige opzoeking {english: translated}, geen
i18n-bibliotheek — samengevoegd uit twee bronnen per taal, gekozen op het
moment van setLanguage() en in het geheugen bewaard tot de volgende
taalwissel:
-
De woordenschat van Gramps Desktop — live vertaald, per verzoek,
door de teksten die daadwerkelijk worden gebruikt te POSTen naar het
bestaande endpoint
GET/POST /api/translations/<lang>vangramps-web-api, dat ze door de eigen gettext-catalogus van het geïnstalleerdegramps-pakket haalt. Geen statische kopie om synchroon te houden; altijd zo vers als degramps-versie die de server heeft geïnstalleerd. De vaste lijst met op te vragen teksten uit de woordenschat van Desktop staat in de arraydesktopStringsvani18n.ts— met de hand uitgebreid, één item per tekst, telkens wanneer een nieuw ingepaktet()-aanroep echte Gramps-woordenschat blijkt te zijn in plaats van iets specifieks voor gramps-connect. -
De eigen UI-teksten van gramps-web, en teksten van Gramps-add-ons —
als statische bestanden
app/public/lang/{locale}.jsonopgezet (in git bijgehouden, zodat de app werkt zonder dat iemand een Weblate-verbinding nodig heeft) doorscripts/bootstrap-translations.py, dat../gramps-web/lang/en../addons-source/*/po/*-local.poleest — checkouts naast deze repository, geen netwerkaanroep. Voer het uit (python3 scripts/bootstrap-translations.py, vereistpip install polib) telkens wanneer die naastgelegen checkouts worden bijgewerkt en u de statische verzameling wilt vernieuwen; het is in geen enkele buildstap opgenomen, dus niets voert het automatisch uit. Veilig om opnieuw uit te voeren: zonder--forceslaat het elke.jsonvan een locale die al bestaat over, en zelfs met--forceoverschrijft het alleen bestanden onderapp/public/lang/— geen netwerkaanroepen, geen git-bewerkingen, en elk slecht resultaat is met eengit checkoutongedaan te maken.
Meer van de eigen teksten van de app in t() inpakken is doorlopend,
stapsgewijs werk — app/scripts/wrap-translations.mjs is een eenmalige
codemod (bewaard als herbruikbaar hulpmiddel) die gewone JSX-tekst en
een veilige toegestane lijst van attributen
(label/title/placeholder) mechanisch inpakt; alles wat uit een
variabele of een eigenschap van een object-literal komt
(weergave-/kolomconfiguraties in app/src/store/views.ts, dynamische
API-gegevens, aanroepen van notifications.show()) heeft in plaats
daarvan een handmatige t(...) nodig in het component dat het weergeeft.
De discussie vindt plaats op het Gramps Discourse-forum; issues en pull requests voor de gramps-connect-repository zijn welkom.
AGPL-3.0-or-later, in lijn met gramps-web-api en gramps-web.
packages/gramps-date vertaalt GPL-2.0-or-later-code uit de kern van
Gramps naar de AGPL-3.0-or-later-codebase van dit project — zie de eigen
README ervan (en Architectuur) voor hoe die
twee licenties samengaan.
Gramps Connect is part of the family of Gramps-based software.
Using the app
- Overview
- Installing
- Deploying
- Messaging
- GOQL (advanced search)
- Gramplets & Add-on Store
- Data Model & Editing
- FAQ
Building & contributing