Spaces:
Build error
Build error
Commit ·
a7d88c4
1
Parent(s): d6c29df
Add global httpx.ReadTimeout handler for all tests
Browse filesMove the network timeout skip handler to the main tests/conftest.py
so it applies to all tests, not just tests/test_memory/*.
Fixes flaky CI failures when HuggingFace model downloads timeout.
- tests/conftest.py +35 -0
tests/conftest.py
CHANGED
|
@@ -14,6 +14,41 @@ from unittest.mock import Mock
|
|
| 14 |
|
| 15 |
import pytest
|
| 16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 17 |
|
| 18 |
# Sample messages fixtures
|
| 19 |
@pytest.fixture
|
|
|
|
| 14 |
|
| 15 |
import pytest
|
| 16 |
|
| 17 |
+
# Import httpx for timeout handling (will be available since it's a dependency)
|
| 18 |
+
try:
|
| 19 |
+
import httpx
|
| 20 |
+
|
| 21 |
+
HTTPX_AVAILABLE = True
|
| 22 |
+
except ImportError:
|
| 23 |
+
HTTPX_AVAILABLE = False
|
| 24 |
+
|
| 25 |
+
|
| 26 |
+
# =============================================================================
|
| 27 |
+
# Global test hooks
|
| 28 |
+
# =============================================================================
|
| 29 |
+
|
| 30 |
+
|
| 31 |
+
@pytest.hookimpl(hookwrapper=True)
|
| 32 |
+
def pytest_runtest_call(item):
|
| 33 |
+
"""Wrap test execution to catch httpx.ReadTimeout and skip instead of fail.
|
| 34 |
+
|
| 35 |
+
This handles flaky network timeouts that occur when:
|
| 36 |
+
- HuggingFace Hub is slow during model downloads (sentence-transformers)
|
| 37 |
+
- External embedding APIs timeout
|
| 38 |
+
- Network connectivity issues in CI
|
| 39 |
+
"""
|
| 40 |
+
outcome = yield
|
| 41 |
+
|
| 42 |
+
if HTTPX_AVAILABLE and outcome.excinfo is not None:
|
| 43 |
+
exc_type, exc_value, exc_tb = outcome.excinfo
|
| 44 |
+
if isinstance(exc_value, httpx.ReadTimeout):
|
| 45 |
+
pytest.skip("Skipped due to network timeout (flaky CI)")
|
| 46 |
+
|
| 47 |
+
|
| 48 |
+
# =============================================================================
|
| 49 |
+
# Sample messages fixtures
|
| 50 |
+
# =============================================================================
|
| 51 |
+
|
| 52 |
|
| 53 |
# Sample messages fixtures
|
| 54 |
@pytest.fixture
|