Allow signaling issues in label verification
This commit is contained in:
1 parent
3754c0c11a
commit
9925362352
21 files changed
+1347
-36
No files matched your search
@@ -0,0 +1,73 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from collections.abc import Sequence
|
||||
from pathlib import Path
|
||||
from tempfile import TemporaryDirectory
|
||||
|
||||
from copienator import (
|
||||
EvaluationWorkspace,
|
||||
ExitCode,
|
||||
evaluation_parser,
|
||||
execute,
|
||||
read_json,
|
||||
workspace_from_args,
|
||||
)
|
||||
from copienator.annotation_modifications import (
|
||||
APPLIED,
|
||||
DRAFT,
|
||||
MODES,
|
||||
baseline,
|
||||
output_removals,
|
||||
read_instructions,
|
||||
rebuild,
|
||||
validate_instructions,
|
||||
)
|
||||
from copienator.filesystem import publish_file_sets
|
||||
|
||||
|
||||
def run(workspace: EvaluationWorkspace, *, annotation_dir: str = "BGnot") -> ExitCode:
|
||||
workspace.require_files("labels", DRAFT)
|
||||
workspace.require_directories("Copies", annotation_dir)
|
||||
text = (workspace.root / DRAFT).read_text(encoding="utf-8")
|
||||
instructions = read_instructions(text, annotation_dir)
|
||||
validate_instructions(workspace.root, annotation_dir, instructions)
|
||||
directory = workspace.root / annotation_dir
|
||||
applied = directory / APPLIED
|
||||
previous = read_instructions(applied.read_text(encoding="utf-8"), annotation_dir) if applied.exists() else []
|
||||
copy_ids = sorted({item.copy_id for item in [*previous, *instructions]})
|
||||
# Prepare every copy before publishing anything, including the applied file.
|
||||
with TemporaryDirectory(prefix=".annotation-edits-", dir=directory) as temporary:
|
||||
staging_root = Path(temporary)
|
||||
file_sets = {}
|
||||
for copy_id in copy_ids:
|
||||
output = directory / f"Copie{copy_id}"
|
||||
meta = baseline(output)
|
||||
staging = staging_root / output.name
|
||||
staging.mkdir()
|
||||
selected = [item for item in instructions if item.copy_id == copy_id]
|
||||
rebuild(workspace.root, annotation_dir, output, staging, meta, selected,
|
||||
read_json(output / "score.json"))
|
||||
file_sets[output] = (staging, output_removals(output))
|
||||
manifest = staging_root / "manifest"
|
||||
manifest.mkdir()
|
||||
(manifest / APPLIED).write_text(text, encoding="utf-8")
|
||||
file_sets[directory] = (manifest, ())
|
||||
publish_file_sets(file_sets)
|
||||
print(f"Modifications appliquées à {len(copy_ids)} copie(s). Les scores sont conservés.")
|
||||
print("Relancez « Attribuer les noms et préparer A Rendre » pour actualiser tous les livrables.")
|
||||
return ExitCode.SUCCESS
|
||||
|
||||
|
||||
def build_parser():
|
||||
parser = evaluation_parser("Modify reviewed answer bodies using annotation_modifications.txt")
|
||||
parser.add_argument("--annotation-dir", choices=MODES, default="BGnot")
|
||||
return parser
|
||||
|
||||
|
||||
def main(argv: Sequence[str] | None = None) -> int:
|
||||
return execute(build_parser(), argv, lambda args: run(
|
||||
workspace_from_args(args), annotation_dir=args.annotation_dir))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
Reference in new issue
Block a user