Fix small group naming bug

This commit is contained in:
sebastien committed 2026-10-11 15:03:44 +02:00
1 parent bd1964ffcd
commit 698ac4240c
2 files changed
+16 -9

No files matched your search

+15 -8
View File
@@ -234,15 +234,17 @@ def _unique_prefixes(groups: list[list[str]]) -> list[tuple[str, list[str]]]:
candidate = f"{safe_labels[0]}+"
if natural_key(candidate) > natural_key(previous):
base = candidate
prefix = base.removesuffix("i")
base = base.removesuffix("i")
# Keep related groups under the same short stem (I), I)-2, ...).
# Normalize before allocating a suffix so no later rewrite can collide.
if previous and base.startswith(previous):
base = previous
prefix = base
counter = 2
while prefix in used:
prefix = f"{base}-{counter}"
counter += 1
if counter == 2 and previous and previous in prefix:
prefix = f"{previous}-{counter}"
elif counter == 2:
previous = prefix
previous = base
used.add(prefix)
result.append((prefix, labels))
return result
@@ -250,14 +252,16 @@ def _unique_prefixes(groups: list[list[str]]) -> list[tuple[str, list[str]]]:
def _existing_group_state(
output_root: Path,
prefix: str,
prefix: str | None = None,
) -> tuple[set[tuple[str, str]], int]:
existing_items: set[tuple[str, str]] = set()
maximum_group = 0
if not output_root.is_dir():
return existing_items, maximum_group
for directory in output_root.iterdir():
if not directory.is_dir() or not directory.name.startswith(f"{prefix} G"):
if not directory.is_dir():
continue
if prefix is not None and not directory.name.startswith(f"{prefix} G"):
continue
try:
maximum_group = max(maximum_group, int(directory.name.split(" G")[-1]))
@@ -318,8 +322,11 @@ def _generate_groups(
) -> tuple[int, bool]:
generated = 0
problems = False
# Resume by answer identity across all prefixes, including legacy names.
# Changing the naming scheme must not regenerate already reviewed PDFs.
existing_items = _existing_group_state(output_root)[0] if resume else set()
for prefix, labels in _unique_prefixes(groups):
existing_items, maximum_group = (
_, maximum_group = (
_existing_group_state(output_root, prefix) if resume else (set(), 0)
)
items = [
+1 -1
View File
@@ -716,7 +716,7 @@ def process_exam(
with io.StringIO() as f, io.StringIO() as f_full:
header = "# Edit labels. Modify groups (---). Ensure label uniqueness (XX). Duplicate CONTEXT.\n\n"
header = "# Edit labels. Modify groups (---). Ensure label uniqueness (XX). Duplicate/modify CONTEXT.\n\n"
f.write(header)
f_full.write(header)