"""Проверка параллельной переиндексации: те же метки, страницы и meta, что и в одном процессе. Отдельный скрипт, потому что multiprocessing на Windows заново импортирует главный модуль: tests/run_tests.py без `if __name__ == "__main__"` запустился бы в каждом процессе. Печатает одну строку JSON. """ import json import sys import tempfile from pathlib import Path ROOT = Path(__file__).resolve().parents[1] sys.path[:0] = [str(ROOT), str(ROOT / "tools"), str(ROOT / "tools" / "harvest")] import collect as col # noqa: E402 POST = ("Год выпуска: 2020\nАудио 1: Opus, 6 ch, 221 Kbps | Русский AVO (Дмитрий Пучков)\n" "Аудио 2: AC3, 6 ch, 448 Kbps | Русский MVO (LostFilm)\n") def run(base: Path, name: str, workers: int) -> dict: d = base / name (d / "raw" / "nnm").mkdir(parents=True) (d / "labels.csv").write_text("", encoding="utf-8") for i in range(50): (d / "raw" / "nnm" / f"{9000 + i}.json").write_text(json.dumps( {"id": str(9000 + i), "source": "nnm", "ok": True, "title": f"Фильм {i} (2020) BDRip", "post": POST}, ensure_ascii=False), encoding="utf-8") (d / "raw" / "nnm" / f"{9000 + i}.html").write_text( f"

Фильм {i}

{POST.replace(chr(10), '
')}
", encoding="utf-8") col.RAW, col.PAGES, col.LABELS = d / "raw", d / "pages", d / "labels.csv" col.POSTONLY, col.META, col.MANUAL = d / "po.txt", d / "meta.csv", d / "m.txt" return col.cmd_build(rewrite=True, runner=col.Runner(workers=workers)) if __name__ == "__main__": base = Path(tempfile.mkdtemp()) a, b = run(base, "serial", 1), run(base, "par", 2) same = ( (base / "serial" / "labels.csv").read_bytes() == (base / "par" / "labels.csv").read_bytes() and (base / "serial" / "meta.csv").read_bytes() == (base / "par" / "meta.csv").read_bytes() and sorted(p.name for p in (base / "serial" / "pages").glob("*.txt")) == sorted(p.name for p in (base / "par" / "pages").glob("*.txt"))) print("RESULT " + json.dumps({"same": same, "pages": b["pages"], "labeled": [a["labeled"], b["labeled"]]}))