Something went wrong. Try again.
lol
Something went wrong. Try again.
2.5 kB · 63 lines
Python
at master
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364# This is a pytest hook that skips tests that tries to access the network.# These tests will immediately fail, then get marked as "Expected fail" (xfail).
from _pytest.runner import pytest_runtest_makereport as orig_pytest_runtest_makereport
# We use BaseException to minimize the chance it gets caught and 'pass'edclass NixNetworkAccessDeniedError(BaseException): pass
def pytest_runtest_makereport(item, call): """ Modifies test results after-the-fact. The function name is magic, see: https://docs.pytest.org/en/7.1.x/reference/reference.html?highlight=pytest_runtest_makereport#std-hook-pytest_runtest_makereport """
def iterate_exc_chain(exc: Exception): """ Recurses through exception chain, yielding all exceptions """ yield exc if getattr(exc, "__context__", None) is not None: yield from iterate_exc_chain(exc.__context__) if getattr(exc, "__cause__", None) is not None: yield from iterate_exc_chain(exc.__cause__)
tr = orig_pytest_runtest_makereport(item, call) if call.excinfo is not None: for exc in iterate_exc_chain(call.excinfo.value): if isinstance(exc, NixNetworkAccessDeniedError): tr.outcome, tr.wasxfail = 'skipped', "reason: Requires network access." if isinstance(exc, socket.gaierror): tr.outcome, tr.wasxfail = 'skipped', "reason: Requires network access." if isinstance(exc, httpx.ConnectError): tr.outcome, tr.wasxfail = 'skipped', "reason: Requires network access." if isinstance(exc, FileNotFoundError): # gradio specific tr.outcome, tr.wasxfail = 'skipped', "reason: Pypi dist bad." return tr
# replace network access with exception
def deny_network_access(*a, **kw): raise NixNetworkAccessDeniedError
import httpximport requestsimport safehttpximport socketimport urllibimport urllib3import websockets
httpx.AsyncClient.get = deny_network_accesshttpx.AsyncClient.head = deny_network_accesshttpx.Request = deny_network_accessrequests.get = deny_network_accessrequests.head = deny_network_accessrequests.post = deny_network_accesssafehttpx.get = deny_network_accesssocket.socket.connect = deny_network_accessurllib.request.Request = deny_network_accessurllib.request.urlopen = deny_network_accessurllib3.connection.HTTPSConnection._new_conn = deny_network_accesswebsockets.connect = deny_network_access