"""Record installed public source, route branches and exact copy-ready snippets. No network calls. All writes stay in this lab directory. """ import hashlib import importlib import importlib.metadata import inspect import json import os import platform import runpy import shutil import subprocess import sys import tempfile import time from datetime import datetime from pathlib import Path from unittest.mock import patch import pdfplumber LAB = Path(__file__).resolve().parent SOURCES = LAB / "sources" SOURCES.mkdir(exist_ok=True) converter = importlib.import_module("markitdown.converters._pdf_converter") source_files = { "markitdown-pdf-converter.py": Path(inspect.getsourcefile(converter)), "pdfplumber-table.py": Path(inspect.getsourcefile(pdfplumber.table.Table)), "lab-score.py": LAB.parents[2] / "tools/lab_score.py", "lab-run.py": LAB.parents[2] / "tools/lab_run.py", } manifest = {"date": datetime.now().astimezone().isoformat(), "python": platform.python_version(), "versions": {p: importlib.metadata.version(p) for p in ["pdfplumber", "pdfminer.six", "markitdown", "pymupdf4llm", "PyMuPDF", "pymupdf-layout"]}, "source_files": [], "markitdown_branches": [], "snippet_checks": []} for name, source in source_files.items(): shutil.copyfile(source, SOURCES / name) manifest["source_files"].append({"saved": "sources/" + name, "sha256": hashlib.sha256(source.read_bytes()).hexdigest()}) for source in sorted((LAB / "corpus").glob("*.pdf")): with pdfplumber.open(source) as pdf: pages = [converter._extract_form_content_from_words(page) for page in pdf.pages] manifest["markitdown_branches"].append({"sample": source.stem, "page_form_branch": [p is not None for p in pages], "document_pdfminer_fallback": all(p is None for p in pages)}) EXAMPLE_FILES = {"pdfplumber": "extract-text-and-cells.py", "markitdown": "convert-with-markitdown.py", "pymupdf4llm": "convert-with-pymupdf4llm.py", "markovo": "convert-with-markovo.py"} # Run as standalone files in fresh interpreters, matching a downloaded example. for tool in ["pdfplumber", "markitdown", "pymupdf4llm"]: with tempfile.TemporaryDirectory(prefix="snippet-", dir=LAB) as work: shutil.copyfile(LAB / "sample.pdf", Path(work) / "input.pdf") started = time.perf_counter() command = [sys.executable, str(LAB / "examples" / EXAMPLE_FILES[tool])] result = subprocess.run(command, cwd=work, capture_output=True, text=True, check=True, env={**os.environ, "PYTHONDONTWRITEBYTECODE": "1"}) (LAB / "examples" / (tool + "-sample-stdout.txt")).write_text(result.stdout + result.stderr) content = (Path(work) / "output.md").read_text() assert len(content.strip()) > 0, tool saved_output = LAB / "examples" / (tool + "-sample-output.md") saved_output.write_text(content) manifest["snippet_checks"].append({"tool": tool, "input": "sample.pdf", "result": "PASS", "output": "examples/" + saved_output.name, "execution": "fresh interpreter, standalone example file", "command": command, "elapsed_s": round(time.perf_counter() - started, 4), "output_sha256": hashlib.sha256(content.encode()).hexdigest()}) # The API example is validated against a local transport stub, never a live API. class Response: def __init__(self, value): self.value = value if isinstance(value, bytes) else json.dumps(value).encode() def __enter__(self): return self def __exit__(self, *args): return False def read(self, *args): return self.value calls = [] def stub(request, timeout): calls.append({"method": request.get_method(), "url": request.full_url}) assert request.get_header("Authorization") == "Bearer offline-placeholder" if len(calls) == 1: assert request.get_method() == "POST" assert b'name="max_credit_units"' in request.data assert b'name="capability_id"' in request.data assert b"%PDF" in request.data return Response({"jobs": [{"job_id": "job_offline"}]}) if len(calls) == 2: return Response({"job": {"status": "succeeded"}}) return Response(b"# Offline transport fixture\n") with tempfile.TemporaryDirectory(prefix="snippet-", dir=LAB) as work: shutil.copyfile(LAB / "corpus/table-simple.pdf", Path(work) / "input.pdf") old_cwd = os.getcwd() try: os.chdir(work) with patch.dict(os.environ, {"MARKOVO_API_KEY": "offline-placeholder", "MARKOVO_MAX_CREDIT_UNITS": "1"}), patch("urllib.request.urlopen", stub): runpy.run_path(str(LAB / "examples" / EXAMPLE_FILES["markovo"]), run_name="__main__") finally: os.chdir(old_cwd) assert (Path(work) / "output.md").read_text() == "# Offline transport fixture\n" manifest["snippet_checks"].append({"tool": "markovo", "result": "PASS (local HTTP stub only)", "calls": calls}) (LAB / "source-diagnostics.json").write_text(json.dumps(manifest, indent=2) + "\n") print(json.dumps(manifest, indent=2))