From c0933bc3a104f06a54c636f077b8e857a8f432c5 Mon Sep 17 00:00:00 2001 From: Olivier Date: Sun, 31 May 2026 07:47:07 +0200 Subject: [PATCH] Rename unspecified coverage table title --- docs/en/rapport-pdf.md | 1 + docs/fr/rapport-pdf.md | 1 + src/pve_backup_report/i18n.py | 2 ++ src/pve_backup_report/report_weasy_pdf.py | 12 ++++++++---- tests/test_report_weasy_pdf.py | 7 +++++++ 5 files changed, 19 insertions(+), 4 deletions(-) diff --git a/docs/en/rapport-pdf.md b/docs/en/rapport-pdf.md index da30561..97e679b 100644 --- a/docs/en/rapport-pdf.md +++ b/docs/en/rapport-pdf.md @@ -137,6 +137,7 @@ Backup tables are grouped under a level 1 title `VM/CT backups`. VM/CT are displayed in multiple tables, one table per namespace. The title of each table indicates the relevant namespace. +When the namespace is not specified, the table is titled `VM/CT without backup`. Expected columns: diff --git a/docs/fr/rapport-pdf.md b/docs/fr/rapport-pdf.md index 3c8eb00..b11cd35 100644 --- a/docs/fr/rapport-pdf.md +++ b/docs/fr/rapport-pdf.md @@ -137,6 +137,7 @@ Les tableaux de sauvegarde sont regroupes sous un titre de niveau 1 `Sauvegarde Les VM/CT sont affichees dans plusieurs tableaux, un tableau par namespace. Le titre de chaque tableau indique la namespace concernee. +Lorsque la namespace n'est pas renseignee, le tableau est titre `VM/CT non sauvegardée`. Colonnes attendues : diff --git a/src/pve_backup_report/i18n.py b/src/pve_backup_report/i18n.py index 72e0f44..aa3e7c8 100644 --- a/src/pve_backup_report/i18n.py +++ b/src/pve_backup_report/i18n.py @@ -82,6 +82,7 @@ TRANSLATIONS = { "missing_guests": "VM/CT non sauvegardees", "coverage_group": "Sauvegarde des VM/CT", "coverage_title": "Sauvegarde des VM/CT - {namespace}", + "coverage_unspecified_title": "VM/CT non sauvegardée", "retention_group": "Retention des sauvegardes VM/CT", "retention_title": "Retention des sauvegardes VM/CT {server_name} - {namespace}", "issues": "Anomalies", @@ -116,6 +117,7 @@ TRANSLATIONS = { "missing_guests": "VM/CT without backup", "coverage_group": "VM/CT backups", "coverage_title": "VM/CT backups - {namespace}", + "coverage_unspecified_title": "VM/CT without backup", "retention_group": "VM/CT backup retention", "retention_title": "VM/CT backup retention {server_name} - {namespace}", "issues": "Anomalies", diff --git a/src/pve_backup_report/report_weasy_pdf.py b/src/pve_backup_report/report_weasy_pdf.py index 05e2d42..8e86712 100644 --- a/src/pve_backup_report/report_weasy_pdf.py +++ b/src/pve_backup_report/report_weasy_pdf.py @@ -345,9 +345,7 @@ def build_coverage_sections( return [ ReportSection( section_id="sauvegarde-vmct", - title=translator.text("coverage_title").format( - namespace=translator.cell("non renseigne") - ), + title=coverage_section_title("non renseigne", translator), headers=coverage_headers_without_namespace(translator), rows=[], empty_message=translator.text("no_guest"), @@ -374,7 +372,7 @@ def build_coverage_sections( sections.append( ReportSection( section_id=f"sauvegarde-vmct-{section_id_fragment(namespace)}", - title=translator.text("coverage_title").format(namespace=translator.cell(namespace)), + title=coverage_section_title(namespace, translator), headers=coverage_headers_without_namespace(translator), rows=rows, empty_message=translator.text("no_guest"), @@ -384,6 +382,12 @@ def build_coverage_sections( return sections +def coverage_section_title(namespace: str, translator: Translator) -> str: + if namespace == "non renseigne": + return translator.text("coverage_unspecified_title") + return translator.text("coverage_title").format(namespace=translator.cell(namespace)) + + def coverage_headers_without_namespace(translator: Translator) -> list[str]: return translator.row([ "VMID", diff --git a/tests/test_report_weasy_pdf.py b/tests/test_report_weasy_pdf.py index 0c72b34..d009704 100644 --- a/tests/test_report_weasy_pdf.py +++ b/tests/test_report_weasy_pdf.py @@ -13,7 +13,9 @@ from pve_backup_report.models import ( ReportData, ReportSummary, ) +from pve_backup_report.i18n import Translator from pve_backup_report.report_weasy_pdf import build_template_context +from pve_backup_report.report_weasy_pdf import coverage_section_title from pve_backup_report.report_weasy_pdf import render_html @@ -235,6 +237,11 @@ def test_render_html_keeps_css_unescaped() -> None: assert '

Retention des sauvegardes VM/CT

' not in html +def test_coverage_section_title_renames_unspecified_namespace() -> None: + assert coverage_section_title("non renseigne", Translator("fr")) == "VM/CT non sauvegardée" + assert coverage_section_title("serveurs", Translator("fr")) == "Sauvegarde des VM/CT - serveurs" + + def test_render_html_supports_english_labels() -> None: report_data = ReportData( coverage=[