diff --git a/python/tests/unit/data/conftest.py b/python/tests/unit/data/conftest.py index d29bad7f8b..b184b60e43 100644 --- a/python/tests/unit/data/conftest.py +++ b/python/tests/unit/data/conftest.py @@ -2,6 +2,7 @@ import ast +import asyncio from collections.abc import Mapping, Sequence from dataclasses import dataclass from typing import Annotated, Any @@ -23,6 +24,24 @@ from semantic_kernel.data.vector import ( from semantic_kernel.kernel_types import OptionalOneOrMany +@fixture(autouse=True) +def _ensure_event_loop(): + """Ensure a current event loop exists before each test. + + Works around a pytest-asyncio 0.26 bug on Windows Python 3.10 where + asyncio.set_event_loop(None) can be left as state after a previous test's + teardown, and _provide_clean_event_loop does not recover because it only + creates a fresh loop when old_loop is not None. By guaranteeing a non-None + loop at fixture-setup time, _temporary_event_loop_policy saves a valid + old_loop, so the teardown path restores a valid loop instead of None. + """ + try: + asyncio.get_event_loop() + except RuntimeError: + asyncio.set_event_loop(asyncio.new_event_loop()) + yield + + @fixture def DictVectorStoreRecordCollection() -> type[VectorSearch]: class DictVectorStoreRecordCollection( diff --git a/python/uv.lock b/python/uv.lock index 0cf93cde34..c6a7b77b9c 100644 --- a/python/uv.lock +++ b/python/uv.lock @@ -6746,15 +6746,15 @@ wheels = [ [[package]] name = "starlette" -version = "0.52.1" +version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, { name = "typing-extensions", marker = "(python_full_version < '3.13' and sys_platform == 'darwin') or (python_full_version < '3.13' and sys_platform == 'linux') or (python_full_version < '3.13' and sys_platform == 'win32')" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c4/68/79977123bb7be889ad680d79a40f339082c1978b5cfcf62c2d8d196873ac/starlette-0.52.1.tar.gz", hash = "sha256:834edd1b0a23167694292e94f597773bc3f89f362be6effee198165a35d62933", size = 2653702, upload-time = "2026-01-18T13:34:11.062Z" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/e3/7c1dc7381d9f8ab7d854328ebfa884e62cb3f3d8549ddfd37c7814f42afa/starlette-1.3.1.tar.gz", hash = "sha256:05d0213193f2fbaae60e2ecb593b4add4262ad4e46536b54abe36f11a71724e0", size = 2703240, upload-time = "2026-06-12T09:23:11.602Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/0d/13d1d239a25cbfb19e740db83143e95c772a1fe10202dda4b76792b114dd/starlette-0.52.1-py3-none-any.whl", hash = "sha256:0029d43eb3d273bc4f83a08720b4912ea4b071087a3b48db01b7c839f7954d74", size = 74272, upload-time = "2026-01-18T13:34:09.188Z" }, + { url = "https://files.pythonhosted.org/packages/ec/bb/2799cc2ede3ed41131f8975621e7213dfc7ef4acbbaadfa440f32500c370/starlette-1.3.1-py3-none-any.whl", hash = "sha256:c7372aae11c3c3f26a42df7bd626cec2f47d03483d261d369516a615a53714c6", size = 73632, upload-time = "2026-06-12T09:23:10.017Z" }, ] [[package]]