Spaces:
Running
Running
| #!/usr/bin/env python3 | |
| from __future__ import annotations | |
| import os | |
| import re | |
| from pathlib import Path | |
| QUESTIONS_FORM_PATCHES = { | |
| 'discard:"Discard"': 'discard:"بیخیال"', | |
| 'submit:"Submit"': 'submit:"ثبت"', | |
| 'draft:"Save as draft"': 'draft:"ذخیره پیشنویس"', | |
| } | |
| EXTENSIONS = {".js", ".mjs", ".cjs"} | |
| ROOTS = [ | |
| "/opt", | |
| "/usr/local/lib", | |
| "/usr/local/share", | |
| "/app", | |
| "/home/argilla", | |
| ] | |
| def should_scan(path: Path) -> bool: | |
| if path.suffix not in EXTENSIONS: | |
| return False | |
| return "_nuxt" in str(path) or "argilla" in str(path).lower() | |
| def patch_file(path: Path) -> int: | |
| try: | |
| data = path.read_text(encoding="utf-8") | |
| except UnicodeDecodeError: | |
| return 0 | |
| except OSError: | |
| return 0 | |
| if "questions_form:" not in data: | |
| return 0 | |
| patched = data | |
| hits = 0 | |
| # Argilla v2.8 ships the review toolbar labels in the compiled locale | |
| # object. Keep this intentionally narrow: only patch that object, avoiding | |
| # broad bundle rewrites that can alter unrelated code/highlighting strings. | |
| pattern = re.compile(r"questions_form:\{[^{}]*\}") | |
| def repl(match: re.Match[str]) -> str: | |
| nonlocal hits | |
| chunk = match.group(0) | |
| new_chunk = chunk | |
| for src, dst in QUESTIONS_FORM_PATCHES.items(): | |
| count = new_chunk.count(src) | |
| if count: | |
| hits += count | |
| new_chunk = new_chunk.replace(src, dst) | |
| return new_chunk | |
| patched = pattern.sub(repl, patched) | |
| if patched != data: | |
| path.write_text(patched, encoding="utf-8") | |
| return hits | |
| def main() -> None: | |
| total_hits = 0 | |
| touched: list[str] = [] | |
| for root in ROOTS: | |
| base = Path(root) | |
| if not base.exists(): | |
| continue | |
| for dirpath, dirnames, filenames in os.walk(base): | |
| dirnames[:] = [ | |
| d | |
| for d in dirnames | |
| if d not in {".git", "__pycache__", "node_modules", ".cache"} | |
| ] | |
| for filename in filenames: | |
| path = Path(dirpath) / filename | |
| if not should_scan(path): | |
| continue | |
| hits = patch_file(path) | |
| if hits: | |
| total_hits += hits | |
| touched.append(str(path)) | |
| print({"argilla_questions_form_label_patch_hits": total_hits, "files": touched[:20]}, flush=True) | |
| if __name__ == "__main__": | |
| main() | |