Catalogus-tool¶
De catalogus-CLI bouwt een alias-index uit manifesten en mappad, en lost invoer op naar canoniek id volgens terminologie §2.8.
Gebruikersverhalen (workflows, beoogde GUI): Catalogus — handleidingen.
Sjablonen (:::include zoek=, default, vsa resolve-catalogus): catalogus-samenstelling-zangstuk.md.
Installatie¶
Gebruik steeds python -m voor pip, pytest en catalogus — dan hoef je
Scripts niet op PATH te zetten en voorkom je mismatch tussen meerdere
Python-installaties op Windows.
cd /d C:\Git\orthodox-ronl\bron
python -m pip install -e ".[dev]"
Alleen runtime (zonder pytest):
python -m pip install -e .
Of via het testscript (installeert + pytest):
scripts\test.cmd
Commando's (fase 2)¶
| Commando | Doel |
|---|---|
catalogus zoek |
Vrije tekst + context → catalogus-pad |
catalogus resolve |
Alias → canoniek id (per niveau) |
catalogus index validate |
Manifesten en alias-conflicten controleren |
catalogus aliases validate |
Org-breed alias-blokkenregister valideren |
catalogus aliases sync |
Gegenereerde alias-blokken naar yaml schrijven |
catalogus zoek¶
Vrije tekst + default.*-context → catalogus-pad (lokaal:… / bron:…).
Normatief contract: catalogus-zoek-api.md.
zoek— strict: 0 / 1 / meerdere → fout of één pad.zoek_kandidaten— alle matches (review,--lijst).- Default
bestandsextensie:.vsa.
python -m catalogus.cli zoek "Troparion" ^
--content-root ..\VSA-demo\content-source ^
--bron-root . ^
--default-gelegenheid geboorte-moeder-gods
python -m catalogus.cli zoek "Cherubijnenhymne (Kastorski)" ^
--content-root ..\VSA-demo\content-source ^
--bron-root .
Status: geïmplementeerd (basis). Exitcode 1 = geen match of ambiguïteit (strict);
0 regels met --lijst = exit 1.
Parochie-context: --content-root = parochie content-source (lokaal/); --bron-root =
org-bron. Lokaal vóór bron; bij lokaal-winst kan ZoekResult.ook_gevonden_in_bron
gevuld zijn — toon met --verbose (waarschuwing op stderr).
catalogus resolve¶
Los alias of hoofdletter-variant op naar canoniek id.
python -m catalogus.cli resolve zangstuk "1e antifoon weekdagen" --content-root ..\VSA-demo\content-source
python -m catalogus.cli resolve uitvoeringsvorm --zangstuk antifoon-1-weekdagen --variant liturgikon-weekdagen Hemelum --content-root ..\VSA-demo\content-source
Niveaus: zangstuk, variant, uitvoeringsvorm, representatie.
Scope-flags:
| Niveau | Verplichte flags |
|---|---|
| zangstuk | — |
| variant | --zangstuk |
| uitvoeringsvorm | --zangstuk, --variant |
| representatie | --zangstuk, --variant, --uitvoeringsvorm |
Index-bronnen (minstens één verplicht):
| Flag | Inhoud |
|---|---|
--content-root |
Parochie content-source (met lokaal/) |
--bron-root |
Bron-repository (met zangstukken/) |
--fixture-root |
Extra root (tests, offline fixtures) |
catalogus index validate¶
Controleer manifesten op ongeldige ids en alias-conflicten binnen scope.
python -m catalogus.cli index validate --bron-root .
python -m catalogus.cli index validate --content-root ..\VSA-demo\content-source
catalogus aliases validate¶
Valideer org-breed aliassen-register catalogus/data/alias-blokken.yaml
(geen overlap tussen blokken, geen lege lijsten). Zie
alias-blokken-ontwerp.
python -m catalogus.cli aliases validate --bron-root .
catalogus aliases sync¶
Schrijf gegenereerde alias-blokken naar zangstuk.yaml / variant.yaml. Handmatige
aliassen blijven boven het marker-blok; gegenereerde termen tellen alleen mee voor
zoek (niet voor resolver-scope — voorkomt conflicten tussen meerdere kondak/tropaar-stukken).
Trigger: liturgische_rol: / alias_blok: in yaml, anders id-prefix of term-fallback
(bijv. kondak-zondag-toon-1 → blok kondak).
python -m catalogus.cli aliases sync --bron-root .
python -m catalogus.cli aliases sync --check --bron-root .
python -m catalogus.cli aliases sync --dry-run --bron-root .
Index-bronnen¶
De index wordt in het geheugen opgebouwd uit:
- Mappad — mapnamen onder
lokaal/<zangstuk-id>/<variant-id>/<uitvoeringsvorm-id>/ - Manifesten —
variant.yaml,uitvoeringsvorm.yaml(aliases:per entiteit) - Bron —
zangstukken/<zangstuk-id>/zangstuk.yaml(title,sources[].id) - Alias-blokken —
catalogus/data/alias-blokken.yamlbreidt zoektermen uit (runtime)
Zie parochie-lokaal zangstukken voor manifest-structuur.
Resolver-contract¶
- Normaliseer invoer:
strip()+ Unicodecasefold() - Match canoniek id of geregistreerde alias binnen scope
- Resultaat: canoniek id, of fout (
NotFoundError,AmbiguousError)
lang in alias-yaml is metadata; matching negeert taal (casefold op text).
Python-library¶
from pathlib import Path
from catalogus import (
AliasIndex,
ZoekContext,
format_catalogus_pad,
zoek,
zoek_kandidaten,
zoek_met_roots,
)
index = AliasIndex.build(
content_root=Path("content-source"),
bron_root=Path("."),
)
index.resolve_uitvoeringsvorm(
"antifoon-1-weekdagen", "liturgikon-weekdagen", "Hemelum"
)
# → "hemelum"
# Zoek-API (geïmplementeerd, basis):
ctx = ZoekContext.from_default_mapping(
{"gelegenheid": "geboorte-moeder-gods"}
)
# lijst = zoek_kandidaten("Troparion", index=index, context=ctx)
# lijst.catalogus_paden
# result = zoek("Troparion", index=index, context=ctx) # strict: 0/1/meerdere
Zie catalogus-zoek-api.md voor volledig contract.
Relatie tot VSA¶
- Fase 2:
catalogusstaat los vanvsa; build/includes gebruikten relatieve paden. - Fase 3: VSA-tooling importeert
catalogusbijid:…/lokaal:…/bron:…-includes in markdown. - Fase 4:
:::include zoek=/@include-vsa zoek=→catalogus.zoek→ catalogus-pad — catalogus-zoek-api.md (geïmplementeerd, basis).
Zie verhaal 1 en VSA — resolve-catalogus.
Tests¶
cd /d C:\Git\orthodox-ronl\bron
scripts\test.cmd
Of handmatig:
python -m pip install -e ".[dev]"
python -m pytest