Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Add a fixture for <note> inside <example>, subsense-nested example/note/reversal, and etymology traits

Aperta Adatta ai principianti
#15 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
84/100
Tipo di issue
Funzionalità
Chiarezza
Specificata chiaramente
Stato di attività
Tranquilla
Stack tecnologico
python
Ambito
testing-qa

Direzione di ricerca

Inizia dai file esistenti in tests/corpus/ e dai test parametrizzati sul corpus, quindi esamina _reader.py:434, _writer.py:352-353 e tests/test_property_roundtrip.py. Aggiungi una fixture con version="0.13" che copra le forme example, subsense ed etymology elencate, con asserzioni semantiche di read-back e una validazione del round-trip identica a livello di byte; anche i percorsi esistenti di fidelity, canonical e RNG-validity dovrebbero passare.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

enhancement

Problem

Example.notes is modeled, parsed (_reader.py:434) and written
(_writer.py:352-353), but no corpus fixture contains a <note> inside an
<example>. The writer's loop body is dead code as far as the suite is concerned,
and the property-based round-trip strategies don't help — _senses() in
tests/test_property_roundtrip.py generates no examples at all.

This was measured by diffing branch coverage of the full 458-test suite against a
run that loads, re-saves and validates 10 real FLEx exports (~29,000 entries, from
sillsdev/TheCombine Backend.Tests/Assets/*.zip). Those exports reach exactly
four arcs the suite does not, all one feature:

_reader.py:434   handlers["note"] = lambda c: example.notes.append(_parse_note(c))   (lambda body)
_writer.py:352   for note in example.notes:
_writer.py:353       el.append(_note_el(note))

FLEx emits these heavily — 2,454 example-notes in one export, 744 in another,
typically <note type="reference"> carrying a scripture citation alongside the
example's translation.

Two further structures in those exports have no corpus instance either (counted
across every tests/corpus/ file: 0 each):

  • <subsense> carrying example (with its own translation and note), note,
    or reversal. spec-examples/0.13/subsenses.lift has subsenses, but only with
    gloss/definition.
  • <etymology> carrying a trait (FLEx writes trait name="languages").

Proposed fixture

One hand-authored version="0.13" file. These shapes are legal per the RNG, so it
belongs in the regular corpus rather than negative/:

  • a sense with an <example> carrying <translation>, <note type="reference">,
    and a <trait>
  • a <subsense> carrying its own <example> (with nested translation and
    note), a <note>, and two <reversal> elements
  • an <etymology> with a <trait>

Shapes drawn from real SIL.FLEx 9.0.7 output, e.g.:

<example source="Luke 1:4">
<form lang="qaa-x-stc"><text>…</text></form>
<translation type="Free translation">
<form lang="en"><text>…</text></form>
</translation>
<note type="reference">
<form lang="en"><text>Luke 1:4</text></form>
</note>
</example>

Assertions: semantic read-back (example.notes, subsense.examples,
etymology.traits — proving the content is modeled rather than carried as
Extras residue) plus byte-identical round-trip. The file also picks up the
existing corpus-parametrized fidelity, canonical, and RNG-validity paths for free.

Why hand-authored rather than importing an export

The exports that surface this are 1.4-12.3 MB of real community lexical data
(Natqgu, Sena) with no per-file provenance recorded in their source repo — the same
permission question as the pending "Enggano export" line in
tests/corpus/PROVENANCE.md. A short fixture closes the coverage gap without
taking that on, or adding megabytes to the repo.

Not included, deliberately

<span lang=...> inside a <definition> looked novel at first — the corpus has 72
spans in definitions, none with @lang. But large/sango/sango.lift already has 45
span[@lang] elsewhere, so the attribute is exercised; only the combination is
absent, and that's not a distinct code path.

Lingua principale
Python
Stelle
1
Fork
0
Merge medio
11g 8h
PR unite (30g)
3

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di sillsdev/python-sil-lift

Tutte le issue di sillsdev/python-sil-lift

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.