# conftest.py import importlib import os import pytest import litellm import asyncio from litellm.litellm_core_utils.logging_worker import GLOBAL_LOGGING_WORKER @pytest.fixture(scope="session") def event_loop(): try: loop = asyncio.get_running_loop() except RuntimeError: loop = asyncio.new_event_loop() yield loop loop.close() @pytest.fixture(scope="function", autouse=True) def setup_and_teardown(): """ This fixture reloads litellm before every function. To speed up testing by removing callbacks being chained. """ curr_dir = os.getcwd() # Get the current working directory from litellm import Router importlib.reload(litellm) import asyncio loop = asyncio.get_event_loop_policy().new_event_loop() asyncio.set_event_loop(loop) print(litellm) # from litellm import Router, completion, aembedding, acompletion, embedding yield # Teardown code (executes after the yield point) # LoggingWorker carries still-queued coroutines onto the next test's loop, where they'd log into that test's callbacks asyncio.run(GLOBAL_LOGGING_WORKER.clear_queue()) loop.close() # Close the loop created earlier asyncio.set_event_loop(None) # Remove the reference to the loop @pytest.fixture(scope="function", autouse=True) async def drain_logging_worker(): """ The logging queue is bound to the running loop, so anything left queued when a test's loop goes away is carried onto the next test's loop and fires against its callbacks. """ from litellm.litellm_core_utils.logging_worker import GLOBAL_LOGGING_WORKER yield try: await asyncio.wait_for(GLOBAL_LOGGING_WORKER.clear_queue(), timeout=10) except asyncio.TimeoutError: pass def pytest_collection_modifyitems(config, items): # Separate tests in 'test_amazing_proxy_custom_logger.py' and other tests custom_logger_tests = [ item for item in items if "custom_logger" in item.parent.name ] other_tests = [item for item in items if "custom_logger" not in item.parent.name] # Sort tests based on their names custom_logger_tests.sort(key=lambda x: x.name) other_tests.sort(key=lambda x: x.name) # Reorder the items list items[:] = custom_logger_tests + other_tests