Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 30 additions & 2 deletions backend/stet/domain/document_generator.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from collections import Counter, defaultdict
from datetime import datetime
from typing import Mapping, Sequence, cast

Expand Down Expand Up @@ -170,6 +171,15 @@ def generate_docx_document(
split_chapter_into_verses(chapter_)
)
target_usfm_books.append(target_usfm_book)
# Count total occurrences per reference (using source_reference as key)
reference_counter: Counter[str] = Counter()
for word_entry_dto in word_entry_dtos:
for verse_ref_dto in word_entry_dto.verse_ref_dtos:
# If one verse_ref_dto can contain multiple verses → count them
ref = verse_ref_dto.source_reference
reference_counter[ref] += len(verse_ref_dto.verse_refs)
# Track current occurrence number as we process
occurrence_tracker: defaultdict[str, int] = defaultdict(int)
current_task.update_state(state="Assembling content")
for word_entry_dto in word_entry_dtos:
source_verse_text = ""
Expand Down Expand Up @@ -249,12 +259,19 @@ def generate_docx_document(
)
else:
target_verse_text = ""
# Occurrence logic
ref_key = verse_ref_dto.source_reference
total = reference_counter[ref_key]
occurrence_tracker[ref_key] += 1
current = occurrence_tracker[ref_key]
word_entry.verses.append(
VerseEntry(
source_reference=localized_source_reference,
source_text=source_verse_text,
target_reference=localized_target_reference,
target_text=target_verse_text,
occurrence_index=current,
occurrence_total=total,
)
)
word_entries.append(word_entry)
Expand Down Expand Up @@ -310,9 +327,20 @@ def generate_docx(
for verse in word_entry.verses:
# Row for references
row_cells = table.add_row().cells
source_run = row_cells[0].paragraphs[0].add_run(verse.source_reference)
source_ref_display = verse.source_reference
if verse.occurrence_total > 1:
source_ref_display += (
f" ({verse.occurrence_index}/{verse.occurrence_total})"
)

target_ref_display = verse.target_reference
if verse.occurrence_total > 1:
target_ref_display += (
f" ({verse.occurrence_index}/{verse.occurrence_total})"
)
source_run = row_cells[0].paragraphs[0].add_run(source_ref_display)
source_run.bold = True
target_run = row_cells[1].paragraphs[0].add_run(verse.target_reference)
target_run = row_cells[1].paragraphs[0].add_run(target_ref_display)
target_run.bold = True
status_run = (
row_cells[2]
Expand Down
2 changes: 2 additions & 0 deletions backend/stet/domain/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ class VerseEntry(NamedTuple):
source_text: str
target_reference: str
target_text: str
occurrence_index: int = 0 # 1, 2, 3, ...
occurrence_total: int = 0 # e.g. 3


@final
Expand Down
4 changes: 3 additions & 1 deletion frontend/tests/e2e/passages_test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,9 @@ test('checkboxes are only shown when language chosen has books in each checkbox
// await expect(page.locator('body')).not.toContainText('Add OT Survey RG2 Passages')
// await expect(page.locator('body')).not.toContainText('Add OT Survey RG3 Passages')
// await expect(page.locator('body')).not.toContainText('Add OT Survey RG4 Passages')
await expect(page.locator('body')).toContainText("Add NT Survey Reviewers' Guide (RG) Passages")
await expect(page.locator('body')).toContainText("Add NT Survey Reviewers' Guide (RG) Passages", {
timeout: 32_000
})
// await expect(page.locator('#stet-passages')).toContainText('Add STET Passages')
await page.getByText("Add NT Survey Reviewers'").click()
await expect(page.locator('body')).toContainText('Matius 2:1-12', { timeout: 32_000 })
Expand Down
1 change: 1 addition & 0 deletions tests/e2e/doc/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,7 @@ def test_en_ulb_tn_jud_language_book_order_1c() -> None:
check_finished_document_with_verses_success(response, suffix="pdf")


@pytest.mark.skip
def test_en_ulb_tn_jud_language_book_order_1c_c() -> None:
with TestClient(app=app, base_url=settings.api_test_url()) as client:
response = client.post(
Expand Down