Ctrl K
ComunidadGuías…

conftest.py

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
"""Shared pytest plumbing for both packages' suites.

/tmp on the dev box is a 4 GB tmpfs, and a full suite run writes ~1 GB of
fixture state there. Three times on 2026-08-09, concurrent suite runs filled
it and produced ``sqlite3.OperationalError: database or disk is full``
failures that read like data corruption. So: pytest's temp roots live under
the repo on real disk (gitignored), one directory per process so concurrent
agent runs never collide, swept after a day so retention cannot creep.

An explicit ``--basetemp`` still wins, untouched.
"""

from __future__ import annotations

import os
import shutil
import tempfile
import time
from pathlib import Path

# A full-suite run leaves ~1 GB behind and agent sessions run many; a day of
# retention hit 44 GB on 2026-08-09 — twice, because the sweep window alone
# can't keep up with concurrent agents. So: a passing run deletes its own
# directory on exit (a failing one keeps it for debugging), and the sweep
# below is the backstop for crashed runs.
_SWEEP_AFTER_S = 2 * 3600


def pytest_sessionfinish(session, exitstatus) -> None:
    if exitstatus != 0:
        return
    base = getattr(session.config.option, "basetemp", None)
    if base and Path(base).name.startswith("run-"):
        shutil.rmtree(base, ignore_errors=True)


def pytest_configure(config) -> None:
    if config.option.basetemp:
        return
    root = Path(__file__).parent / ".pytest-tmp"
    root.mkdir(exist_ok=True)
    now = time.time()
    for stale in root.iterdir():
        try:
            if now - stale.stat().st_mtime > _SWEEP_AFTER_S:
                shutil.rmtree(stale, ignore_errors=True)
        except OSError:
            pass
    base = root / f"run-{os.getpid()}"
    base.mkdir(exist_ok=True)
    config.option.basetemp = base
    # NamedTemporaryFile/mkdtemp callers follow tmp_path off the tmpfs too.
    tempfile.tempdir = str(base)