import os
import pytest
REQUIRED_HTTPX_VERSION = "0.28.1"
_skipped: list[str] = []
_xfailed: list[str] = []
_collection_errors: list[str] = []
_profile = os.environ.get("EGGFETCH_COMPAT_PROFILE", "httpx/0.28.1")
def pytest_configure(config):
config.addinivalue_line("markers", "compat: HTTPX compatibility tests (required)")
def pytest_runtest_logreport(report):
if report.when == "call":
if report.skipped:
_skipped.append(report.nodeid)
if getattr(report, "wasxfail", False):
_xfailed.append(report.nodeid)
if report.when == "collect":
if report.skipped:
_collection_errors.append(report.nodeid)
@pytest.hookimpl(trylast=True)
def pytest_terminal_summary(terminalreporter, exitstatus, config):
is_required = os.environ.get("EGGFETCH_COMPAT_REQUIRED", "0") == "1"
terminalreporter.section("Skip Audit")
if _skipped:
terminalreporter.write_line(
f"Skipped tests ({len(_skipped)}):", yellow=True
)
for nodeid in _skipped:
terminalreporter.write_line(f" - {nodeid}", yellow=True)
if _xfailed:
terminalreporter.write_line(
f"XFailed tests ({len(_xfailed)}):", yellow=True
)
for nodeid in _xfailed:
terminalreporter.write_line(f" - {nodeid}", yellow=True)
if _collection_errors:
terminalreporter.write_line(
f"Collection errors ({len(_collection_errors)}):", red=True
)
for nodeid in _collection_errors:
terminalreporter.write_line(f" - {nodeid}", red=True)
terminalreporter.write_line(f"Profile: {_profile}")
if is_required:
all_issues = _skipped + _xfailed + _collection_errors
if all_issues:
terminalreporter.write_line(
f"\nFAIL: Required compatibility profile has "
f"{len(all_issues)} unapproved skip/xfail/collection issue(s)",
red=True,
)
config._compat_exit_code = 1
@pytest.hookimpl(trylast=True)
def pytest_sessionfinish(session, exitstatus):
is_required = os.environ.get("EGGFETCH_COMPAT_REQUIRED", "0") == "1"
if is_required and hasattr(session.config, "_compat_exit_code"):
session.exitstatus = session.config._compat_exit_code