diff --git a/dev-tools/mcp-mock-server/server.py b/dev-tools/mcp-mock-server/server.py index 7f087622c..267866f3b 100644 --- a/dev-tools/mcp-mock-server/server.py +++ b/dev-tools/mcp-mock-server/server.py @@ -23,8 +23,8 @@ import subprocess import sys import threading -from http.server import HTTPServer, BaseHTTPRequestHandler -from datetime import datetime, UTC +from datetime import UTC, datetime +from http.server import BaseHTTPRequestHandler, HTTPServer from pathlib import Path from typing import Any diff --git a/dev-tools/mcp-mock-server/test_mock_mcp_server.py b/dev-tools/mcp-mock-server/test_mock_mcp_server.py index f9e0f8537..4b476bbc1 100755 --- a/dev-tools/mcp-mock-server/test_mock_mcp_server.py +++ b/dev-tools/mcp-mock-server/test_mock_mcp_server.py @@ -12,8 +12,8 @@ import subprocess import sys import time -import urllib.request import urllib.error +import urllib.request from typing import Any, Optional import pytest diff --git a/pyproject.toml b/pyproject.toml index 0114590be..eb294787a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -226,7 +226,7 @@ disable = ["R0801"] extend-exclude = ["tests/profiles/syntax_error.py"] [tool.ruff.lint] -extend-select = ["TID251", "UP006", "UP007", "UP010", "UP017", "UP035", "RUF100", "B009", "B010", "DTZ005", "D202"] +extend-select = ["TID251", "UP006", "UP007", "UP010", "UP017", "UP035", "RUF100", "B009", "B010", "DTZ005", "D202", "I001"] [tool.ruff.lint.flake8-tidy-imports.banned-api] unittest = { msg = "use pytest instead of unittest" } diff --git a/scripts/gen_doc.py b/scripts/gen_doc.py index e23bf6244..0749590d5 100755 --- a/scripts/gen_doc.py +++ b/scripts/gen_doc.py @@ -2,9 +2,8 @@ """Generate documentation for all modules from Lightspeed Core Stack service.""" -import os - import ast +import os from pathlib import Path DIRECTORIES = ["src", "tests/unit", "tests/integration", "tests/e2e"] diff --git a/scripts/generate_openapi_schema.py b/scripts/generate_openapi_schema.py index d80af9ace..f471e3604 100644 --- a/scripts/generate_openapi_schema.py +++ b/scripts/generate_openapi_schema.py @@ -7,11 +7,11 @@ from fastapi.openapi.utils import get_openapi +from client import AsyncLlamaStackClientHolder + # it is needed to read proper configuration in order to start the app to generate schema from configuration import configuration -from client import AsyncLlamaStackClientHolder - cfg_file = "lightspeed-stack.yaml" configuration.load_configuration(cfg_file) diff --git a/tests/benchmarks/conftest.py b/tests/benchmarks/conftest.py index 267062c97..c466ba347 100644 --- a/tests/benchmarks/conftest.py +++ b/tests/benchmarks/conftest.py @@ -1,12 +1,12 @@ """Fixtures used by benchmarks.""" from pathlib import Path -import pytest import psycopg2 +import pytest from app import database -from configuration import configuration, AppConfig +from configuration import AppConfig, configuration @pytest.fixture(name="configuration_filename_sqlite") diff --git a/tests/benchmarks/db_benchmarks.py b/tests/benchmarks/db_benchmarks.py index 2c3e83dba..b9e3ee56d 100644 --- a/tests/benchmarks/db_benchmarks.py +++ b/tests/benchmarks/db_benchmarks.py @@ -1,18 +1,18 @@ """Database benchmarks implementations.""" -from typing import Optional -from sqlalchemy.orm import Session from datetime import UTC, datetime +from typing import Optional + from pytest_benchmark.fixture import BenchmarkFixture +from sqlalchemy.orm import Session from app.database import get_session -from utils.suid import get_suid - from models.database.conversations import UserConversation +from utils.suid import get_suid from .data_generators import ( - generate_provider, generate_model_for_provider, + generate_provider, generate_topic_summary, ) diff --git a/tests/benchmarks/test_app_database.py b/tests/benchmarks/test_app_database.py index 4bb932ac2..3802fcb33 100644 --- a/tests/benchmarks/test_app_database.py +++ b/tests/benchmarks/test_app_database.py @@ -3,12 +3,12 @@ from pytest_benchmark.fixture import BenchmarkFixture from .db_benchmarks import ( - benchmark_store_new_user_conversations, - benchmark_update_user_conversation, benchmark_list_conversations_for_all_users, benchmark_list_conversations_for_one_user, benchmark_retrieve_conversation, benchmark_retrieve_conversation_for_one_user, + benchmark_store_new_user_conversations, + benchmark_update_user_conversation, ) # number of records to be stored in database before benchmarks diff --git a/tests/benchmarks/test_app_database_comparison.py b/tests/benchmarks/test_app_database_comparison.py index 3c927ad84..54c6da9ed 100644 --- a/tests/benchmarks/test_app_database_comparison.py +++ b/tests/benchmarks/test_app_database_comparison.py @@ -4,12 +4,12 @@ from pytest_benchmark.fixture import BenchmarkFixture from .db_benchmarks import ( - benchmark_store_new_user_conversations, - benchmark_update_user_conversation, benchmark_list_conversations_for_all_users, benchmark_list_conversations_for_one_user, benchmark_retrieve_conversation, benchmark_retrieve_conversation_for_one_user, + benchmark_store_new_user_conversations, + benchmark_update_user_conversation, ) # number of records to be stored in database before benchmarks diff --git a/tests/e2e/features/environment.py b/tests/e2e/features/environment.py index 1fba35084..70f294f26 100644 --- a/tests/e2e/features/environment.py +++ b/tests/e2e/features/environment.py @@ -14,7 +14,6 @@ import requests from behave.model import Feature, Scenario -from tests.e2e.utils.prow_utils import restore_llama_stack_pod from behave.runner import Context from tests.e2e.utils.llama_stack_utils import ( @@ -22,6 +21,7 @@ unregister_mcp_toolgroups, unregister_shield, ) +from tests.e2e.utils.prow_utils import restore_llama_stack_pod from tests.e2e.utils.utils import ( clear_llama_stack_storage, create_config_backup, diff --git a/tests/e2e/features/steps/auth.py b/tests/e2e/features/steps/auth.py index fcd543957..8aa05845c 100644 --- a/tests/e2e/features/steps/auth.py +++ b/tests/e2e/features/steps/auth.py @@ -6,6 +6,7 @@ import requests from behave import given, when # pyright: ignore[reportAttributeAccessIssue] from behave.runner import Context + from tests.e2e.utils.utils import normalize_endpoint diff --git a/tests/e2e/features/steps/common.py b/tests/e2e/features/steps/common.py index 163cb290f..b20f292e6 100644 --- a/tests/e2e/features/steps/common.py +++ b/tests/e2e/features/steps/common.py @@ -1,8 +1,9 @@ """Implementation of common test steps.""" +import os + from behave import given # pyright: ignore[reportAttributeAccessIssue] from behave.runner import Context -import os @given("The service is started locally") diff --git a/tests/e2e/features/steps/common_http.py b/tests/e2e/features/steps/common_http.py index 284acfeb0..07cb61940 100644 --- a/tests/e2e/features/steps/common_http.py +++ b/tests/e2e/features/steps/common_http.py @@ -4,12 +4,13 @@ import requests from behave import ( + given, + step, then, when, - step, - given, ) # pyright: ignore[reportAttributeAccessIssue] from behave.runner import Context + from tests.e2e.utils.utils import ( normalize_endpoint, replace_placeholders, diff --git a/tests/e2e/features/steps/conversation.py b/tests/e2e/features/steps/conversation.py index fbe1af6b6..d161a8b74 100644 --- a/tests/e2e/features/steps/conversation.py +++ b/tests/e2e/features/steps/conversation.py @@ -1,14 +1,16 @@ """Implementation of common test steps.""" import json + +import requests from behave import ( + given, step, - when, then, - given, + when, ) # pyright: ignore[reportAttributeAccessIssue] from behave.runner import Context -import requests + from tests.e2e.utils.utils import replace_placeholders, restart_container, switch_config # default timeout for HTTP operations diff --git a/tests/e2e/features/steps/health.py b/tests/e2e/features/steps/health.py index eefbeef04..73cd16ccf 100644 --- a/tests/e2e/features/steps/health.py +++ b/tests/e2e/features/steps/health.py @@ -2,6 +2,7 @@ import subprocess import time + from behave import given # pyright: ignore[reportAttributeAccessIssue] from behave.runner import Context diff --git a/tests/e2e/features/steps/info.py b/tests/e2e/features/steps/info.py index df94b8ace..52fed7eb8 100644 --- a/tests/e2e/features/steps/info.py +++ b/tests/e2e/features/steps/info.py @@ -2,6 +2,7 @@ import json import re + from behave import then # pyright: ignore[reportAttributeAccessIssue] from behave.runner import Context diff --git a/tests/e2e/features/steps/llm_query_response.py b/tests/e2e/features/steps/llm_query_response.py index b6e309d0e..4d5dcc487 100644 --- a/tests/e2e/features/steps/llm_query_response.py +++ b/tests/e2e/features/steps/llm_query_response.py @@ -2,9 +2,11 @@ import json import os + import requests -from behave import then, step # pyright: ignore[reportAttributeAccessIssue] +from behave import step, then # pyright: ignore[reportAttributeAccessIssue] from behave.runner import Context + from tests.e2e.utils.utils import replace_placeholders # Longer timeout for Prow/OpenShift with CPU-based vLLM diff --git a/tests/e2e/features/steps/models.py b/tests/e2e/features/steps/models.py index dbcaa0227..cb18afca8 100644 --- a/tests/e2e/features/steps/models.py +++ b/tests/e2e/features/steps/models.py @@ -1,8 +1,7 @@ """Steps for /models endpoint.""" import requests - -from behave import when, then # pyright: ignore[reportAttributeAccessIssue] +from behave import then, when # pyright: ignore[reportAttributeAccessIssue] from behave.runner import Context diff --git a/tests/e2e/features/steps/rbac.py b/tests/e2e/features/steps/rbac.py index 4a8cb3e6d..82224f21d 100644 --- a/tests/e2e/features/steps/rbac.py +++ b/tests/e2e/features/steps/rbac.py @@ -1,6 +1,7 @@ """Step definitions for RBAC E2E tests.""" import os + import requests from behave import given # pyright: ignore[reportAttributeAccessIssue] from behave.runner import Context diff --git a/tests/e2e/features/steps/rlsapi_v1.py b/tests/e2e/features/steps/rlsapi_v1.py index 3444acb37..7c1844a14 100644 --- a/tests/e2e/features/steps/rlsapi_v1.py +++ b/tests/e2e/features/steps/rlsapi_v1.py @@ -1,6 +1,6 @@ """rlsapi v1 endpoint test steps.""" -from behave import then, step # pyright: ignore[reportAttributeAccessIssue] +from behave import step, then # pyright: ignore[reportAttributeAccessIssue] from behave.runner import Context diff --git a/tests/e2e/features/steps/token_counters.py b/tests/e2e/features/steps/token_counters.py index 54bed5411..15569a278 100644 --- a/tests/e2e/features/steps/token_counters.py +++ b/tests/e2e/features/steps/token_counters.py @@ -1,7 +1,6 @@ """Step definitions for token counter validation.""" import json - from typing import Optional import requests diff --git a/tests/e2e/mock_jwks_server/generate_tokens.py b/tests/e2e/mock_jwks_server/generate_tokens.py index f373cad91..6f7f8ef65 100644 --- a/tests/e2e/mock_jwks_server/generate_tokens.py +++ b/tests/e2e/mock_jwks_server/generate_tokens.py @@ -9,10 +9,10 @@ import json import time +import jwt +from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.asymmetric import rsa -from cryptography.hazmat.backends import default_backend -import jwt # Generate RSA key pair private_key = rsa.generate_private_key( diff --git a/tests/e2e/mock_jwks_server/server.py b/tests/e2e/mock_jwks_server/server.py index 2b0ff0952..8af50712a 100644 --- a/tests/e2e/mock_jwks_server/server.py +++ b/tests/e2e/mock_jwks_server/server.py @@ -6,7 +6,7 @@ """ import json -from http.server import HTTPServer, BaseHTTPRequestHandler +from http.server import BaseHTTPRequestHandler, HTTPServer from typing import Any # Static JWKS - pre-generated RSA public key diff --git a/tests/e2e/mock_mcp_server/server.py b/tests/e2e/mock_mcp_server/server.py index de1198953..89e3f654c 100644 --- a/tests/e2e/mock_mcp_server/server.py +++ b/tests/e2e/mock_mcp_server/server.py @@ -7,7 +7,7 @@ """ import json -from http.server import HTTPServer, BaseHTTPRequestHandler +from http.server import BaseHTTPRequestHandler, HTTPServer from typing import Any, Optional # Standard OAuth-style challenge so the client can drive an OAuth flow diff --git a/tests/e2e/utils/llama_stack_utils.py b/tests/e2e/utils/llama_stack_utils.py index 2a8c66670..83b8c79f0 100644 --- a/tests/e2e/utils/llama_stack_utils.py +++ b/tests/e2e/utils/llama_stack_utils.py @@ -15,8 +15,8 @@ from llama_stack_client import ( APIConnectionError, - AsyncLlamaStackClient, APIStatusError, + AsyncLlamaStackClient, ) diff --git a/tests/e2e/utils/prow_utils.py b/tests/e2e/utils/prow_utils.py index a8afe1566..ee82f9855 100644 --- a/tests/e2e/utils/prow_utils.py +++ b/tests/e2e/utils/prow_utils.py @@ -7,7 +7,6 @@ import os import subprocess import tempfile - from typing import Optional diff --git a/tests/integration/conftest.py b/tests/integration/conftest.py index 109ed54ec..0cb8f170c 100644 --- a/tests/integration/conftest.py +++ b/tests/integration/conftest.py @@ -1,29 +1,26 @@ """Shared fixtures for integration tests.""" import os -from pathlib import Path from collections.abc import Generator +from pathlib import Path from typing import Any import pytest from fastapi import Request, Response from fastapi.testclient import TestClient from pytest_mock import MockerFixture - from sqlalchemy import create_engine -from sqlalchemy.orm import sessionmaker, Session from sqlalchemy.engine import Engine +from sqlalchemy.orm import Session, sessionmaker from sqlalchemy.pool import StaticPool -from authentication.noop import NoopAuthDependency +import app.database from authentication.interface import AuthTuple - +from authentication.noop import NoopAuthDependency from configuration import configuration from models.config import Action from models.database.base import Base -import app.database - # ========================================== # Common Test Constants # ========================================== diff --git a/tests/integration/endpoints/test_authorized_endpoint.py b/tests/integration/endpoints/test_authorized_endpoint.py index 3045fa943..8aea11493 100644 --- a/tests/integration/endpoints/test_authorized_endpoint.py +++ b/tests/integration/endpoints/test_authorized_endpoint.py @@ -2,11 +2,10 @@ import pytest +from app.endpoints.authorized import authorized_endpoint_handler from authentication.interface import AuthTuple - from configuration import AppConfig -from app.endpoints.authorized import authorized_endpoint_handler -from constants import DEFAULT_USER_UID, DEFAULT_USER_NAME, DEFAULT_SKIP_USER_ID_CHECK +from constants import DEFAULT_SKIP_USER_ID_CHECK, DEFAULT_USER_NAME, DEFAULT_USER_UID @pytest.mark.asyncio diff --git a/tests/integration/endpoints/test_config_integration.py b/tests/integration/endpoints/test_config_integration.py index 51fb56aff..821cdb0b8 100644 --- a/tests/integration/endpoints/test_config_integration.py +++ b/tests/integration/endpoints/test_config_integration.py @@ -1,8 +1,8 @@ """Integration tests for the /config endpoint.""" from typing import cast -import pytest +import pytest from fastapi import HTTPException, Request, status from app.endpoints.config import config_endpoint_handler diff --git a/tests/integration/endpoints/test_health_integration.py b/tests/integration/endpoints/test_health_integration.py index a4f7052be..4df16fd16 100644 --- a/tests/integration/endpoints/test_health_integration.py +++ b/tests/integration/endpoints/test_health_integration.py @@ -1,7 +1,7 @@ """Integration tests for the /health endpoint.""" -from typing import Any from collections.abc import Generator +from typing import Any import pytest from fastapi import Response diff --git a/tests/integration/endpoints/test_info_integration.py b/tests/integration/endpoints/test_info_integration.py index 8f59fe1c8..8302d1d6a 100644 --- a/tests/integration/endpoints/test_info_integration.py +++ b/tests/integration/endpoints/test_info_integration.py @@ -1,17 +1,17 @@ """Integration tests for the /info endpoint.""" -from typing import Any from collections.abc import Generator -import pytest -from pytest_mock import MockerFixture, AsyncMockType +from typing import Any +import pytest from fastapi import HTTPException, Request, status from llama_stack_client import APIConnectionError from llama_stack_client.types import VersionInfo -from authentication.interface import AuthTuple +from pytest_mock import AsyncMockType, MockerFixture -from configuration import AppConfig from app.endpoints.info import info_endpoint_handler +from authentication.interface import AuthTuple +from configuration import AppConfig from version import __version__ diff --git a/tests/integration/endpoints/test_model_list.py b/tests/integration/endpoints/test_model_list.py index 78dcb3bd9..c195eee10 100644 --- a/tests/integration/endpoints/test_model_list.py +++ b/tests/integration/endpoints/test_model_list.py @@ -1,18 +1,18 @@ """Integration tests for the /models endpoint (using Responses API).""" -from typing import Any from collections.abc import Generator +from typing import Any import pytest from fastapi import Request from fastapi.exceptions import HTTPException -from pytest_mock import AsyncMockType, MockerFixture from llama_stack_client import APIConnectionError +from pytest_mock import AsyncMockType, MockerFixture -from models.requests import ModelFilter from app.endpoints.models import models_endpoint_handler from authentication.interface import AuthTuple from configuration import AppConfig +from models.requests import ModelFilter @pytest.fixture(name="mock_llama_stack_client") diff --git a/tests/integration/endpoints/test_query_integration.py b/tests/integration/endpoints/test_query_integration.py index 2f7dfb2ec..18529f957 100644 --- a/tests/integration/endpoints/test_query_integration.py +++ b/tests/integration/endpoints/test_query_integration.py @@ -14,6 +14,7 @@ import app.database import app.endpoints.query +import utils.query from app.endpoints.query import query_endpoint_handler from authentication.interface import AuthTuple from configuration import AppConfig @@ -25,7 +26,6 @@ TEST_NON_EXISTENT_ID, create_mock_llm_response, ) -import utils.query # File-specific test constants SPECIFIC_CONV_ID = "c9d40813-d64d-41eb-8060-3b2446929a02" diff --git a/tests/integration/endpoints/test_root_endpoint.py b/tests/integration/endpoints/test_root_endpoint.py index f98ef686f..6e1fd67d4 100644 --- a/tests/integration/endpoints/test_root_endpoint.py +++ b/tests/integration/endpoints/test_root_endpoint.py @@ -1,16 +1,16 @@ """Integration tests for the /root endpoint.""" -from typing import Any from collections.abc import Generator -import pytest -from pytest_mock import MockerFixture +from typing import Any +import pytest from fastapi import Request, status from llama_stack_client.types import VersionInfo -from authentication.interface import AuthTuple +from pytest_mock import MockerFixture -from configuration import AppConfig from app.endpoints.root import root_endpoint_handler +from authentication.interface import AuthTuple +from configuration import AppConfig @pytest.fixture(name="mock_llama_stack_client") diff --git a/tests/integration/endpoints/test_tools_integration.py b/tests/integration/endpoints/test_tools_integration.py index fd44a060d..890a29810 100644 --- a/tests/integration/endpoints/test_tools_integration.py +++ b/tests/integration/endpoints/test_tools_integration.py @@ -1,7 +1,7 @@ """Integration tests for the /tools endpoint.""" -from typing import Any from collections.abc import Generator +from typing import Any import pytest from fastapi import HTTPException, Request, status diff --git a/tests/integration/test_configuration.py b/tests/integration/test_configuration.py index 93d53f289..c7ee0cc56 100644 --- a/tests/integration/test_configuration.py +++ b/tests/integration/test_configuration.py @@ -1,8 +1,8 @@ """Integration tests for configuration loading and handling.""" import pytest -from configuration import configuration +from configuration import configuration from models.config import ModelContextProtocolServer diff --git a/tests/unit/__init__.py b/tests/unit/__init__.py index 2beff7dd2..0801a7c25 100644 --- a/tests/unit/__init__.py +++ b/tests/unit/__init__.py @@ -1,6 +1,7 @@ """Unit tests.""" from typing import Any + from configuration import configuration config_dict: dict[str, Any] = { diff --git a/tests/unit/a2a_storage/test_storage_factory.py b/tests/unit/a2a_storage/test_storage_factory.py index d02a7a06d..8ffca146e 100644 --- a/tests/unit/a2a_storage/test_storage_factory.py +++ b/tests/unit/a2a_storage/test_storage_factory.py @@ -2,15 +2,14 @@ # pylint: disable=protected-access +from collections.abc import Generator from pathlib import Path from typing import Any -from collections.abc import Generator import pytest +from a2a.server.tasks import DatabaseTaskStore, InMemoryTaskStore from pytest_mock import MockerFixture -from a2a.server.tasks import InMemoryTaskStore, DatabaseTaskStore - from a2a_storage import A2AStorageFactory from a2a_storage.in_memory_context_store import InMemoryA2AContextStore from a2a_storage.sqlite_context_store import SQLiteA2AContextStore diff --git a/tests/unit/app/endpoints/test_a2a.py b/tests/unit/app/endpoints/test_a2a.py index 7e0b3eb9f..337eb1ea0 100644 --- a/tests/unit/app/endpoints/test_a2a.py +++ b/tests/unit/app/endpoints/test_a2a.py @@ -7,10 +7,8 @@ import httpx import pytest -from fastapi import HTTPException, Request -from llama_stack_client import APIConnectionError -from pytest_mock import MockerFixture - +from a2a.server.agent_execution import RequestContext +from a2a.server.events import EventQueue from a2a.types import ( AgentCard, Artifact, @@ -21,19 +19,20 @@ TaskStatusUpdateEvent, TextPart, ) -from a2a.server.agent_execution import RequestContext -from a2a.server.events import EventQueue from a2a.utils import new_agent_text_message +from fastapi import HTTPException, Request +from llama_stack_client import APIConnectionError +from pytest_mock import MockerFixture from app.endpoints.a2a import ( - _convert_responses_content_to_a2a_parts, - get_lightspeed_agent_card, A2AAgentExecutor, TaskResultAggregator, - _get_task_store, + _convert_responses_content_to_a2a_parts, _get_context_store, + _get_task_store, a2a_health_check, get_agent_card, + get_lightspeed_agent_card, ) from configuration import AppConfig from models.config import Action diff --git a/tests/unit/app/endpoints/test_conversations.py b/tests/unit/app/endpoints/test_conversations.py index 9c75f0d2f..c629b44e2 100644 --- a/tests/unit/app/endpoints/test_conversations.py +++ b/tests/unit/app/endpoints/test_conversations.py @@ -18,7 +18,6 @@ get_conversations_list_endpoint_handler, update_conversation_endpoint_handler, ) -from utils.conversations import build_conversation_turns_from_items from configuration import AppConfig from models.config import Action from models.database.conversations import UserConversation, UserTurn @@ -32,6 +31,7 @@ InternalServerErrorResponse, ) from tests.unit.utils.auth_helpers import mock_authorization_resolvers +from utils.conversations import build_conversation_turns_from_items MOCK_AUTH = ("mock_user_id", "mock_username", False, "mock_token") VALID_CONVERSATION_ID = "123e4567-e89b-12d3-a456-426614174000" diff --git a/tests/unit/app/endpoints/test_conversations_v2.py b/tests/unit/app/endpoints/test_conversations_v2.py index 6a76f948f..423257279 100644 --- a/tests/unit/app/endpoints/test_conversations_v2.py +++ b/tests/unit/app/endpoints/test_conversations_v2.py @@ -2,7 +2,7 @@ """Unit tests for the /conversations REST API endpoints.""" -from datetime import datetime, UTC +from datetime import UTC, datetime from typing import Any, cast import pytest diff --git a/tests/unit/app/endpoints/test_health.py b/tests/unit/app/endpoints/test_health.py index 70bfc88c5..01c92c9d8 100644 --- a/tests/unit/app/endpoints/test_health.py +++ b/tests/unit/app/endpoints/test_health.py @@ -1,7 +1,7 @@ """Unit tests for the /health REST API endpoint.""" -from llama_stack_client import APIConnectionError import pytest +from llama_stack_client import APIConnectionError from pytest_mock import MockerFixture from app.endpoints.health import ( diff --git a/tests/unit/app/endpoints/test_mcp_servers.py b/tests/unit/app/endpoints/test_mcp_servers.py index a4f586298..76cbcb600 100644 --- a/tests/unit/app/endpoints/test_mcp_servers.py +++ b/tests/unit/app/endpoints/test_mcp_servers.py @@ -6,9 +6,9 @@ from typing import Any import pytest -from pydantic import SecretStr, AnyHttpUrl from fastapi import HTTPException from llama_stack_client import APIConnectionError +from pydantic import AnyHttpUrl, SecretStr from pytest_mock import MockerFixture from app.endpoints import mcp_servers @@ -16,18 +16,18 @@ from configuration import AppConfig from models.config import ( Configuration, + CORSConfiguration, LlamaStackConfiguration, ModelContextProtocolServer, ServiceConfiguration, - UserDataCollection, TLSConfiguration, - CORSConfiguration, + UserDataCollection, ) from models.requests import MCPServerRegistrationRequest from models.responses import ( - MCPServerRegistrationResponse, - MCPServerListResponse, MCPServerDeleteResponse, + MCPServerListResponse, + MCPServerRegistrationResponse, ) MOCK_AUTH: AuthTuple = ("mock_user_id", "mock_username", False, "mock_token") diff --git a/tests/unit/app/endpoints/test_models.py b/tests/unit/app/endpoints/test_models.py index 39bd61672..2c9d37c45 100644 --- a/tests/unit/app/endpoints/test_models.py +++ b/tests/unit/app/endpoints/test_models.py @@ -8,10 +8,10 @@ from pytest_mock import MockerFixture from pytest_subtests import SubTests -from models.requests import ModelFilter from app.endpoints.models import models_endpoint_handler from authentication.interface import AuthTuple from configuration import AppConfig +from models.requests import ModelFilter from tests.unit.utils.auth_helpers import mock_authorization_resolvers diff --git a/tests/unit/app/endpoints/test_rlsapi_v1.py b/tests/unit/app/endpoints/test_rlsapi_v1.py index 26bb0da56..e5bf218fd 100644 --- a/tests/unit/app/endpoints/test_rlsapi_v1.py +++ b/tests/unit/app/endpoints/test_rlsapi_v1.py @@ -30,6 +30,7 @@ from authentication.interface import AuthTuple from authentication.rh_identity import RHIdentityData from configuration import AppConfig +from models.responses import ServiceUnavailableResponse from models.rlsapi.requests import ( RlsapiV1Attachment, RlsapiV1Context, @@ -37,7 +38,6 @@ RlsapiV1SystemInfo, RlsapiV1Terminal, ) -from models.responses import ServiceUnavailableResponse from models.rlsapi.responses import RlsapiV1InferResponse from tests.unit.utils.auth_helpers import mock_authorization_resolvers from utils.suid import check_suid diff --git a/tests/unit/app/endpoints/test_streaming_query.py b/tests/unit/app/endpoints/test_streaming_query.py index 99dee264e..e4e982bd5 100644 --- a/tests/unit/app/endpoints/test_streaming_query.py +++ b/tests/unit/app/endpoints/test_streaming_query.py @@ -13,14 +13,32 @@ from llama_stack_api.openai_responses import ( OpenAIResponseObject, OpenAIResponseObjectStream, +) +from llama_stack_api.openai_responses import ( OpenAIResponseObjectStreamResponseCompleted as CompletedChunk, +) +from llama_stack_api.openai_responses import ( OpenAIResponseObjectStreamResponseFailed as FailedChunk, +) +from llama_stack_api.openai_responses import ( OpenAIResponseObjectStreamResponseIncomplete as IncompleteChunk, +) +from llama_stack_api.openai_responses import ( OpenAIResponseObjectStreamResponseMcpCallArgumentsDone as MCPArgsDoneChunk, +) +from llama_stack_api.openai_responses import ( OpenAIResponseObjectStreamResponseOutputItemAdded as OutputItemAddedChunk, +) +from llama_stack_api.openai_responses import ( OpenAIResponseObjectStreamResponseOutputItemDone as OutputItemDoneChunk, +) +from llama_stack_api.openai_responses import ( OpenAIResponseObjectStreamResponseOutputTextDelta as TextDeltaChunk, +) +from llama_stack_api.openai_responses import ( OpenAIResponseObjectStreamResponseOutputTextDone as TextDoneChunk, +) +from llama_stack_api.openai_responses import ( OpenAIResponseOutputMessageMCPCall as MCPCall, ) from llama_stack_client import APIConnectionError, APIStatusError, AsyncLlamaStackClient @@ -29,8 +47,8 @@ from app.endpoints.streaming_query import ( generate_response, - retrieve_response_generator, response_generator, + retrieve_response_generator, shield_violation_generator, stream_end_event, stream_event, @@ -50,8 +68,8 @@ from models.context import ResponseGeneratorContext from models.requests import Attachment, QueryRequest from models.responses import InternalServerErrorResponse -from utils.token_counter import TokenCounter from utils.stream_interrupts import StreamInterruptRegistry +from utils.token_counter import TokenCounter from utils.types import ( RAGChunk, RAGContext, diff --git a/tests/unit/app/endpoints/test_tools.py b/tests/unit/app/endpoints/test_tools.py index 704296575..f6c0fa754 100644 --- a/tests/unit/app/endpoints/test_tools.py +++ b/tests/unit/app/endpoints/test_tools.py @@ -6,9 +6,9 @@ from typing import Any import pytest -from pydantic import SecretStr, AnyHttpUrl from fastapi import HTTPException from llama_stack_client import APIConnectionError, BadRequestError +from pydantic import AnyHttpUrl, SecretStr from pytest_mock import MockerFixture, MockType # Import the function directly to bypass decorators @@ -18,12 +18,12 @@ from configuration import AppConfig from models.config import ( Configuration, + CORSConfiguration, LlamaStackConfiguration, ModelContextProtocolServer, ServiceConfiguration, - UserDataCollection, TLSConfiguration, - CORSConfiguration, + UserDataCollection, ) from models.responses import ToolsResponse diff --git a/tests/unit/app/test_database.py b/tests/unit/app/test_database.py index 280a64192..87f096a80 100644 --- a/tests/unit/app/test_database.py +++ b/tests/unit/app/test_database.py @@ -2,16 +2,17 @@ # pylint: disable=protected-access +import tempfile from collections.abc import Generator from pathlib import Path -import tempfile + import pytest from pytest_mock import MockerFixture, MockType from sqlalchemy.engine.base import Engine from sqlalchemy.orm import Session from app import database -from models.config import SQLiteDatabaseConfiguration, PostgreSQLDatabaseConfiguration +from models.config import PostgreSQLDatabaseConfiguration, SQLiteDatabaseConfiguration @pytest.fixture(name="reset_database_state") diff --git a/tests/unit/app/test_main_middleware.py b/tests/unit/app/test_main_middleware.py index 2940799d5..08bb9959b 100644 --- a/tests/unit/app/test_main_middleware.py +++ b/tests/unit/app/test_main_middleware.py @@ -4,8 +4,8 @@ from typing import cast import pytest -from pytest_mock import MockerFixture from fastapi import HTTPException, status +from pytest_mock import MockerFixture from starlette.types import Message, Receive, Scope, Send from app.main import GlobalExceptionMiddleware, RestApiMetricsMiddleware diff --git a/tests/unit/app/test_routers.py b/tests/unit/app/test_routers.py index 218d9a6de..7ac178881 100644 --- a/tests/unit/app/test_routers.py +++ b/tests/unit/app/test_routers.py @@ -1,36 +1,35 @@ """Unit tests for routers.py.""" +from collections.abc import Callable, Sequence from typing import Any, Optional -from collections.abc import Sequence, Callable from fastapi import FastAPI -from app.routers import include_routers - from app.endpoints import ( - conversations_v2, + a2a, + authorized, + config, conversations_v1, - root, + conversations_v2, + feedback, + health, info, + mcp_auth, + mcp_servers, + metrics, models, - shields, - rags, providers, - health, - config, - feedback, + query, + rags, + responses, + rlsapi_v1, + root, + shields, stream_interrupt, streaming_query, - authorized, - metrics, tools, - mcp_auth, - mcp_servers, - rlsapi_v1, - a2a, - query, - responses, ) +from app.routers import include_routers class MockFastAPI(FastAPI): diff --git a/tests/unit/authentication/test_auth.py b/tests/unit/authentication/test_auth.py index 52eae2389..7dc07afca 100644 --- a/tests/unit/authentication/test_auth.py +++ b/tests/unit/authentication/test_auth.py @@ -1,9 +1,8 @@ """Unit tests for functions defined in authentication/__init__.py""" -from authentication import get_auth_dependency -from authentication import noop, noop_with_token, k8s -from constants import AUTH_MOD_NOOP, AUTH_MOD_NOOP_WITH_TOKEN, AUTH_MOD_K8S +from authentication import get_auth_dependency, k8s, noop, noop_with_token from configuration import configuration +from constants import AUTH_MOD_K8S, AUTH_MOD_NOOP, AUTH_MOD_NOOP_WITH_TOKEN def test_get_auth_dependency_noop() -> None: diff --git a/tests/unit/authentication/test_jwk_token.py b/tests/unit/authentication/test_jwk_token.py index 840d01f63..d4f503746 100644 --- a/tests/unit/authentication/test_jwk_token.py +++ b/tests/unit/authentication/test_jwk_token.py @@ -3,14 +3,14 @@ """Unit tests for functions defined in authentication/jwk_token.py""" import time -from typing import Any, cast from collections.abc import Generator +from typing import Any, cast import pytest +from authlib.jose import JsonWebKey, JsonWebToken from fastapi import HTTPException, Request from pydantic import AnyHttpUrl from pytest_mock import MockerFixture -from authlib.jose import JsonWebKey, JsonWebToken from authentication.jwk_token import JwkTokenAuthDependency, _jwk_cache from models.config import JwkConfiguration, JwtConfiguration diff --git a/tests/unit/authentication/test_k8s.py b/tests/unit/authentication/test_k8s.py index fe02dbf92..76ab7073c 100644 --- a/tests/unit/authentication/test_k8s.py +++ b/tests/unit/authentication/test_k8s.py @@ -18,12 +18,11 @@ ClusterVersionPermissionError, InvalidClusterVersionError, K8sAPIConnectionError, - K8sConfigurationError, K8SAuthDependency, K8sClientSingleton, + K8sConfigurationError, get_user_info, ) - from configuration import AppConfig diff --git a/tests/unit/authentication/test_noop.py b/tests/unit/authentication/test_noop.py index d179f33e7..6a4a29c24 100644 --- a/tests/unit/authentication/test_noop.py +++ b/tests/unit/authentication/test_noop.py @@ -1,7 +1,7 @@ """Unit tests for functions defined in authentication/noop.py""" -from fastapi import Request, HTTPException import pytest +from fastapi import HTTPException, Request from authentication.noop import NoopAuthDependency from constants import DEFAULT_USER_NAME, DEFAULT_USER_UID, NO_USER_TOKEN diff --git a/tests/unit/authentication/test_noop_with_token.py b/tests/unit/authentication/test_noop_with_token.py index d120f072b..a50ac7296 100644 --- a/tests/unit/authentication/test_noop_with_token.py +++ b/tests/unit/authentication/test_noop_with_token.py @@ -1,8 +1,9 @@ """Unit tests for functions defined in authentication/noop_with_token.py""" from typing import cast -from fastapi import Request, HTTPException + import pytest +from fastapi import HTTPException, Request from authentication.noop_with_token import NoopWithTokenAuthDependency from constants import DEFAULT_USER_NAME, DEFAULT_USER_UID diff --git a/tests/unit/authentication/test_utils.py b/tests/unit/authentication/test_utils.py index 33a58adc8..36490d2bb 100644 --- a/tests/unit/authentication/test_utils.py +++ b/tests/unit/authentication/test_utils.py @@ -1,6 +1,7 @@ """Unit tests for functions defined in authentication/utils.py""" from typing import cast + from fastapi import HTTPException from starlette.datastructures import Headers diff --git a/tests/unit/authorization/test_azure_token_manager.py b/tests/unit/authorization/test_azure_token_manager.py index 6db81389e..f5b7d1fe6 100644 --- a/tests/unit/authorization/test_azure_token_manager.py +++ b/tests/unit/authorization/test_azure_token_manager.py @@ -4,8 +4,8 @@ import logging import time -from typing import Any from collections.abc import Generator +from typing import Any import pytest from azure.core.credentials import AccessToken @@ -15,8 +15,8 @@ from authorization import azure_token_manager from authorization.azure_token_manager import ( - AzureEntraIDManager, TOKEN_EXPIRATION_LEEWAY, + AzureEntraIDManager, ) from configuration import AzureEntraIdConfiguration diff --git a/tests/unit/authorization/test_resolvers.py b/tests/unit/authorization/test_resolvers.py index 6ec55ed29..4386426bf 100644 --- a/tests/unit/authorization/test_resolvers.py +++ b/tests/unit/authorization/test_resolvers.py @@ -1,17 +1,17 @@ """Unit tests for the authorization resolvers.""" -import json import base64 +import json import re from contextlib import nullcontext as does_not_raise - from typing import Any + import pytest -from authentication.interface import AuthTuple -from authorization.resolvers import JwtRolesResolver, GenericAccessResolver -from models.config import JwtRoleRule, AccessRule, JsonPathOperator, Action import constants +from authentication.interface import AuthTuple +from authorization.resolvers import GenericAccessResolver, JwtRolesResolver +from models.config import AccessRule, Action, JsonPathOperator, JwtRoleRule def claims_to_token(claims: dict) -> str: diff --git a/tests/unit/cache/test_cache_factory.py b/tests/unit/cache/test_cache_factory.py index 64f8293ba..108f8fa8a 100644 --- a/tests/unit/cache/test_cache_factory.py +++ b/tests/unit/cache/test_cache_factory.py @@ -3,29 +3,27 @@ from pathlib import Path import pytest -from pytest_mock import MockerFixture from pydantic import SecretStr +from pytest_mock import MockerFixture +from cache.cache_factory import CacheFactory +from cache.in_memory_cache import InMemoryCache +from cache.noop_cache import NoopCache +from cache.postgres_cache import PostgresCache +from cache.sqlite_cache import SQLiteCache from constants import ( - CACHE_TYPE_NOOP, CACHE_TYPE_MEMORY, - CACHE_TYPE_SQLITE, + CACHE_TYPE_NOOP, CACHE_TYPE_POSTGRES, + CACHE_TYPE_SQLITE, ) - from models.config import ( ConversationHistoryConfiguration, InMemoryCacheConfig, - SQLiteDatabaseConfiguration, PostgreSQLDatabaseConfiguration, + SQLiteDatabaseConfiguration, ) -from cache.cache_factory import CacheFactory -from cache.noop_cache import NoopCache -from cache.in_memory_cache import InMemoryCache -from cache.sqlite_cache import SQLiteCache -from cache.postgres_cache import PostgresCache - @pytest.fixture(scope="module", name="noop_cache_config_fixture") def noop_cache_config() -> ConversationHistoryConfiguration: diff --git a/tests/unit/cache/test_noop_cache.py b/tests/unit/cache/test_noop_cache.py index 2d702f3eb..42aeb692f 100644 --- a/tests/unit/cache/test_noop_cache.py +++ b/tests/unit/cache/test_noop_cache.py @@ -4,9 +4,9 @@ import pytest +from cache.noop_cache import NoopCache from models.cache_entry import CacheEntry from utils import suid -from cache.noop_cache import NoopCache USER_ID = suid.get_suid() CONVERSATION_ID = suid.get_suid() diff --git a/tests/unit/cache/test_sqlite_cache.py b/tests/unit/cache/test_sqlite_cache.py index 748835af6..a7ca619b1 100644 --- a/tests/unit/cache/test_sqlite_cache.py +++ b/tests/unit/cache/test_sqlite_cache.py @@ -1,23 +1,20 @@ """Unit tests for SQLite cache implementation.""" +import sqlite3 from pathlib import Path - from typing import Any -import sqlite3 - -from pydantic import AnyUrl import pytest +from pydantic import AnyUrl -from models.config import SQLiteDatabaseConfiguration +from cache.cache_error import CacheError +from cache.sqlite_cache import SQLiteCache from models.cache_entry import CacheEntry +from models.config import SQLiteDatabaseConfiguration from models.responses import ConversationData from utils import suid from utils.types import ReferencedDocument, ToolCallSummary, ToolResultSummary -from cache.cache_error import CacheError -from cache.sqlite_cache import SQLiteCache - USER_ID_1 = suid.get_suid() USER_ID_2 = suid.get_suid() CONVERSATION_ID_1 = suid.get_suid() diff --git a/tests/unit/models/config/test_a2a_state_configuration.py b/tests/unit/models/config/test_a2a_state_configuration.py index 52681f099..90f948748 100644 --- a/tests/unit/models/config/test_a2a_state_configuration.py +++ b/tests/unit/models/config/test_a2a_state_configuration.py @@ -6,11 +6,10 @@ from pydantic import SecretStr, ValidationError import constants - from models.config import ( A2AStateConfiguration, - SQLiteDatabaseConfiguration, PostgreSQLDatabaseConfiguration, + SQLiteDatabaseConfiguration, ) diff --git a/tests/unit/models/config/test_authentication_configuration.py b/tests/unit/models/config/test_authentication_configuration.py index 33f2dce7a..df410827c 100644 --- a/tests/unit/models/config/test_authentication_configuration.py +++ b/tests/unit/models/config/test_authentication_configuration.py @@ -4,27 +4,25 @@ from pathlib import Path import pytest +from pydantic import AnyHttpUrl, SecretStr, ValidationError -from pydantic import ValidationError, SecretStr, AnyHttpUrl - +from constants import ( + AUTH_MOD_APIKEY_TOKEN, + AUTH_MOD_JWK_TOKEN, + AUTH_MOD_K8S, + AUTH_MOD_NOOP, + AUTH_MOD_RH_IDENTITY, + DEFAULT_RH_IDENTITY_MAX_HEADER_SIZE, +) from models.config import ( + APIKeyTokenConfiguration, AuthenticationConfiguration, Configuration, JwkConfiguration, - RHIdentityConfiguration, LlamaStackConfiguration, + RHIdentityConfiguration, ServiceConfiguration, UserDataCollection, - APIKeyTokenConfiguration, -) - -from constants import ( - AUTH_MOD_NOOP, - AUTH_MOD_K8S, - AUTH_MOD_JWK_TOKEN, - AUTH_MOD_RH_IDENTITY, - AUTH_MOD_APIKEY_TOKEN, - DEFAULT_RH_IDENTITY_MAX_HEADER_SIZE, ) diff --git a/tests/unit/models/config/test_conversation_history.py b/tests/unit/models/config/test_conversation_history.py index b21c083cd..a6c8f2d12 100644 --- a/tests/unit/models/config/test_conversation_history.py +++ b/tests/unit/models/config/test_conversation_history.py @@ -3,16 +3,15 @@ from pathlib import Path import pytest -from pytest_subtests import SubTests - from pydantic import ValidationError +from pytest_subtests import SubTests import constants from models.config import ( ConversationHistoryConfiguration, InMemoryCacheConfig, - SQLiteDatabaseConfiguration, PostgreSQLDatabaseConfiguration, + SQLiteDatabaseConfiguration, ) diff --git a/tests/unit/models/config/test_customization.py b/tests/unit/models/config/test_customization.py index f5c00585c..fdaec08ff 100644 --- a/tests/unit/models/config/test_customization.py +++ b/tests/unit/models/config/test_customization.py @@ -1,10 +1,10 @@ """Unit tests for Customization model.""" from pathlib import Path -import pytest -from pytest_subtests import SubTests +import pytest from pydantic import ValidationError +from pytest_subtests import SubTests from models.config import Customization diff --git a/tests/unit/models/config/test_database_configuration.py b/tests/unit/models/config/test_database_configuration.py index e73983de6..9cd8b7fc0 100644 --- a/tests/unit/models/config/test_database_configuration.py +++ b/tests/unit/models/config/test_database_configuration.py @@ -3,14 +3,13 @@ from pathlib import Path import pytest -from pytest_subtests import SubTests - from pydantic import ValidationError +from pytest_subtests import SubTests from models.config import ( + DatabaseConfiguration, PostgreSQLDatabaseConfiguration, SQLiteDatabaseConfiguration, - DatabaseConfiguration, ) diff --git a/tests/unit/models/config/test_dump_configuration.py b/tests/unit/models/config/test_dump_configuration.py index 3dabf723d..cd63e2bb3 100644 --- a/tests/unit/models/config/test_dump_configuration.py +++ b/tests/unit/models/config/test_dump_configuration.py @@ -4,26 +4,25 @@ # pyright: reportCallIssue=false import json - from pathlib import Path from pydantic import SecretStr from models.config import ( - ModelContextProtocolServer, - LlamaStackConfiguration, - UserDataCollection, + ByokRag, + Configuration, + CORSConfiguration, DatabaseConfiguration, + InferenceConfiguration, + LlamaStackConfiguration, + ModelContextProtocolServer, PostgreSQLDatabaseConfiguration, - CORSConfiguration, - Configuration, - ByokRag, QuotaHandlersConfiguration, QuotaLimiterConfiguration, QuotaSchedulerConfiguration, ServiceConfiguration, - InferenceConfiguration, TLSConfiguration, + UserDataCollection, ) diff --git a/tests/unit/models/config/test_jwt_role_rule.py b/tests/unit/models/config/test_jwt_role_rule.py index 9489bf776..2580143e4 100644 --- a/tests/unit/models/config/test_jwt_role_rule.py +++ b/tests/unit/models/config/test_jwt_role_rule.py @@ -1,10 +1,9 @@ """Unit tests for JwtRoleRule model.""" import pytest - from pydantic import ValidationError -from models.config import JwtRoleRule, JsonPathOperator +from models.config import JsonPathOperator, JwtRoleRule def test_jwt_role_rule_missing_attributes() -> None: diff --git a/tests/unit/models/config/test_llama_stack_configuration.py b/tests/unit/models/config/test_llama_stack_configuration.py index 89cedf55a..93ba7df30 100644 --- a/tests/unit/models/config/test_llama_stack_configuration.py +++ b/tests/unit/models/config/test_llama_stack_configuration.py @@ -1,11 +1,10 @@ """Unit tests for LlamaStackConfiguration model.""" import pytest -from pydantic import ValidationError, AnyHttpUrl - -from utils.checks import InvalidConfigurationError +from pydantic import AnyHttpUrl, ValidationError from models.config import LlamaStackConfiguration +from utils.checks import InvalidConfigurationError def test_llama_stack_configuration_constructor() -> None: diff --git a/tests/unit/models/config/test_model_context_protocol_server.py b/tests/unit/models/config/test_model_context_protocol_server.py index de9d35ca0..efea32e06 100644 --- a/tests/unit/models/config/test_model_context_protocol_server.py +++ b/tests/unit/models/config/test_model_context_protocol_server.py @@ -5,7 +5,6 @@ from pathlib import Path import pytest - from pydantic import ValidationError from models.config import ( # type: ignore[import-not-found] diff --git a/tests/unit/models/config/test_postgresql_database_configuration.py b/tests/unit/models/config/test_postgresql_database_configuration.py index b9206b6fb..57b8dd0bf 100644 --- a/tests/unit/models/config/test_postgresql_database_configuration.py +++ b/tests/unit/models/config/test_postgresql_database_configuration.py @@ -3,15 +3,13 @@ from pathlib import Path import pytest -from pytest_subtests import SubTests - from pydantic import ValidationError +from pytest_subtests import SubTests from constants import ( - POSTGRES_DEFAULT_SSL_MODE, POSTGRES_DEFAULT_GSS_ENCMODE, + POSTGRES_DEFAULT_SSL_MODE, ) - from models.config import PostgreSQLDatabaseConfiguration diff --git a/tests/unit/models/config/test_quota_scheduler_config.py b/tests/unit/models/config/test_quota_scheduler_config.py index 0b925b9da..098b7140f 100644 --- a/tests/unit/models/config/test_quota_scheduler_config.py +++ b/tests/unit/models/config/test_quota_scheduler_config.py @@ -1,7 +1,6 @@ """Unit tests for QuotaSchedulerConfig model.""" import pytest - from pydantic import ValidationError from models.config import QuotaSchedulerConfiguration diff --git a/tests/unit/models/config/test_service_configuration.py b/tests/unit/models/config/test_service_configuration.py index a3ce865db..97feba24b 100644 --- a/tests/unit/models/config/test_service_configuration.py +++ b/tests/unit/models/config/test_service_configuration.py @@ -1,7 +1,6 @@ """Unit tests for ServiceConfiguration model.""" import pytest - from pydantic import ValidationError from models.config import ServiceConfiguration, TLSConfiguration diff --git a/tests/unit/models/config/test_splunk_configuration.py b/tests/unit/models/config/test_splunk_configuration.py index 6a8c11353..9292e9586 100644 --- a/tests/unit/models/config/test_splunk_configuration.py +++ b/tests/unit/models/config/test_splunk_configuration.py @@ -1,7 +1,6 @@ """Unit tests for SplunkConfiguration model.""" from pathlib import Path - from typing import Optional import pytest diff --git a/tests/unit/models/requests/test_feedback_request.py b/tests/unit/models/requests/test_feedback_request.py index c5ad2dd98..30a65e32b 100644 --- a/tests/unit/models/requests/test_feedback_request.py +++ b/tests/unit/models/requests/test_feedback_request.py @@ -3,7 +3,7 @@ import pytest from pydantic import ValidationError -from models.requests import FeedbackRequest, FeedbackCategory +from models.requests import FeedbackCategory, FeedbackRequest class TestFeedbackRequest: diff --git a/tests/unit/models/responses/test_error_responses.py b/tests/unit/models/responses/test_error_responses.py index 5f5e0d194..306daeb6d 100644 --- a/tests/unit/models/responses/test_error_responses.py +++ b/tests/unit/models/responses/test_error_responses.py @@ -2,9 +2,9 @@ """Unit tests for all error response models.""" -from pydantic_core import SchemaError import pytest from fastapi import status +from pydantic_core import SchemaError from models.responses import ( BAD_REQUEST_DESCRIPTION, diff --git a/tests/unit/models/responses/test_rag_chunk.py b/tests/unit/models/responses/test_rag_chunk.py index 621e9a4ac..1f48cc396 100644 --- a/tests/unit/models/responses/test_rag_chunk.py +++ b/tests/unit/models/responses/test_rag_chunk.py @@ -1,7 +1,7 @@ """Unit tests for RAGChunk and RAGContext models.""" -from utils.types import RAGChunk, RAGContext from models.responses import ReferencedDocument +from utils.types import RAGChunk, RAGContext class TestRAGChunk: diff --git a/tests/unit/models/responses/test_successful_responses.py b/tests/unit/models/responses/test_successful_responses.py index 83eb00e83..e4e535bf0 100644 --- a/tests/unit/models/responses/test_successful_responses.py +++ b/tests/unit/models/responses/test_successful_responses.py @@ -3,7 +3,7 @@ """Unit tests for all successful response models.""" import pytest -from pydantic import AnyUrl, AnyHttpUrl, ValidationError, ConfigDict +from pydantic import AnyHttpUrl, AnyUrl, ConfigDict, ValidationError from pydantic_core import SchemaError from models.config import ( @@ -16,7 +16,9 @@ AbstractSuccessfulResponse, AuthorizedResponse, ConfigurationResponse, + ConversationData, ConversationDeleteResponse, + ConversationDetails, ConversationResponse, ConversationsListResponse, ConversationsListResponseV2, @@ -28,6 +30,7 @@ MCPClientAuthOptionsResponse, MCPServerAuthInfo, ModelsResponse, + ProviderHealthStatus, ProviderResponse, ProvidersListResponse, QueryResponse, @@ -39,7 +42,6 @@ StreamingQueryResponse, ToolsResponse, ) -from models.responses import ConversationData, ConversationDetails, ProviderHealthStatus from utils.types import ReferencedDocument, ToolCallSummary, ToolResultSummary diff --git a/tests/unit/models/rlsapi/test_requests.py b/tests/unit/models/rlsapi/test_requests.py index fbdd64f61..63e400926 100644 --- a/tests/unit/models/rlsapi/test_requests.py +++ b/tests/unit/models/rlsapi/test_requests.py @@ -1,8 +1,8 @@ # pylint: disable=no-member """Unit tests for rlsapi v1 request models.""" -from typing import Any, Optional from collections.abc import Callable +from typing import Any, Optional import pytest from pydantic import BaseModel, ValidationError diff --git a/tests/unit/models/rlsapi/test_responses.py b/tests/unit/models/rlsapi/test_responses.py index 450fee781..0d80016c1 100644 --- a/tests/unit/models/rlsapi/test_responses.py +++ b/tests/unit/models/rlsapi/test_responses.py @@ -6,11 +6,11 @@ import pytest from pydantic import BaseModel, ValidationError +from models.responses import AbstractSuccessfulResponse from models.rlsapi.responses import ( RlsapiV1InferData, RlsapiV1InferResponse, ) -from models.responses import AbstractSuccessfulResponse # --------------------------------------------------------------------------- # Fixtures diff --git a/tests/unit/observability/test_splunk.py b/tests/unit/observability/test_splunk.py index 71b2f45d1..25f5af409 100644 --- a/tests/unit/observability/test_splunk.py +++ b/tests/unit/observability/test_splunk.py @@ -7,7 +7,7 @@ import pytest from pytest_mock import MockerFixture -from observability.splunk import send_splunk_event, _read_token_from_file +from observability.splunk import _read_token_from_file, send_splunk_event @pytest.fixture(name="mock_splunk_config") diff --git a/tests/unit/quota/test_cluster_quota_limiter.py b/tests/unit/quota/test_cluster_quota_limiter.py index a0b75d462..f27151edf 100644 --- a/tests/unit/quota/test_cluster_quota_limiter.py +++ b/tests/unit/quota/test_cluster_quota_limiter.py @@ -3,9 +3,9 @@ import pytest from models.config import ( + QuotaHandlersConfiguration, QuotaLimiterConfiguration, SQLiteDatabaseConfiguration, - QuotaHandlersConfiguration, ) from quota.cluster_quota_limiter import ClusterQuotaLimiter from quota.quota_exceed_error import QuotaExceedError diff --git a/tests/unit/quota/test_connect_pg.py b/tests/unit/quota/test_connect_pg.py index 4a98e04c4..17660931d 100644 --- a/tests/unit/quota/test_connect_pg.py +++ b/tests/unit/quota/test_connect_pg.py @@ -1,14 +1,13 @@ """Unit tests for PostgreSQL connection handler.""" import pytest -from pytest_mock import MockerFixture - -from pydantic import SecretStr from psycopg2 import OperationalError +from pydantic import SecretStr +from pytest_mock import MockerFixture import constants -from quota.connect_pg import connect_pg from models.config import PostgreSQLDatabaseConfiguration +from quota.connect_pg import connect_pg def test_connect_pg_when_connection_established(mocker: MockerFixture) -> None: diff --git a/tests/unit/quota/test_connect_sqlite.py b/tests/unit/quota/test_connect_sqlite.py index 4cfe040b7..d4da6752f 100644 --- a/tests/unit/quota/test_connect_sqlite.py +++ b/tests/unit/quota/test_connect_sqlite.py @@ -4,8 +4,8 @@ import pytest -from quota.connect_sqlite import connect_sqlite from models.config import SQLiteDatabaseConfiguration +from quota.connect_sqlite import connect_sqlite def test_connect_sqlite_when_connection_established() -> None: diff --git a/tests/unit/quota/test_quota_limiter_factory.py b/tests/unit/quota/test_quota_limiter_factory.py index 130c39ddc..401bb9011 100644 --- a/tests/unit/quota/test_quota_limiter_factory.py +++ b/tests/unit/quota/test_quota_limiter_factory.py @@ -1,17 +1,15 @@ """Unit tests for quota limiter factory class.""" import pytest -from pytest_mock import MockerFixture - from pydantic import SecretStr +from pytest_mock import MockerFixture import constants - from models.config import ( - QuotaLimiterConfiguration, PostgreSQLDatabaseConfiguration, - SQLiteDatabaseConfiguration, QuotaHandlersConfiguration, + QuotaLimiterConfiguration, + SQLiteDatabaseConfiguration, ) from quota.cluster_quota_limiter import ClusterQuotaLimiter from quota.quota_limiter_factory import QuotaLimiterFactory diff --git a/tests/unit/quota/test_user_quota_limiter.py b/tests/unit/quota/test_user_quota_limiter.py index 069b7f45b..df26caa72 100644 --- a/tests/unit/quota/test_user_quota_limiter.py +++ b/tests/unit/quota/test_user_quota_limiter.py @@ -3,12 +3,12 @@ import pytest from models.config import ( + QuotaHandlersConfiguration, QuotaLimiterConfiguration, SQLiteDatabaseConfiguration, - QuotaHandlersConfiguration, ) -from quota.user_quota_limiter import UserQuotaLimiter from quota.quota_exceed_error import QuotaExceedError +from quota.user_quota_limiter import UserQuotaLimiter # pylint: disable=protected-access diff --git a/tests/unit/telemetry/conftest.py b/tests/unit/telemetry/conftest.py index 6b901c979..affeecd75 100644 --- a/tests/unit/telemetry/conftest.py +++ b/tests/unit/telemetry/conftest.py @@ -17,8 +17,8 @@ Customization, DatabaseConfiguration, InferenceConfiguration, - JwkConfiguration, JsonPathOperator, + JwkConfiguration, JwtConfiguration, JwtRoleRule, LlamaStackConfiguration, diff --git a/tests/unit/test_client.py b/tests/unit/test_client.py index fb5dab2f2..f87a92f2f 100644 --- a/tests/unit/test_client.py +++ b/tests/unit/test_client.py @@ -4,9 +4,9 @@ import json +import pytest from pydantic import AnyHttpUrl -import pytest from client import AsyncLlamaStackClientHolder from models.config import LlamaStackConfiguration from utils.types import Singleton diff --git a/tests/unit/test_llama_stack_configuration.py b/tests/unit/test_llama_stack_configuration.py index e402ebd88..56dc11a17 100644 --- a/tests/unit/test_llama_stack_configuration.py +++ b/tests/unit/test_llama_stack_configuration.py @@ -7,19 +7,19 @@ import yaml from llama_stack_configuration import ( - generate_configuration, - construct_vector_stores_section, - construct_vector_io_providers_section, - construct_storage_backends_section, construct_models_section, + construct_storage_backends_section, + construct_vector_io_providers_section, + construct_vector_stores_section, enrich_solr, + generate_configuration, ) from models.config import ( Configuration, - ServiceConfiguration, + InferenceConfiguration, LlamaStackConfiguration, + ServiceConfiguration, UserDataCollection, - InferenceConfiguration, ) # ============================================================================= diff --git a/tests/unit/utils/test_checks.py b/tests/unit/utils/test_checks.py index 1c5dd20ed..0990c66e1 100644 --- a/tests/unit/utils/test_checks.py +++ b/tests/unit/utils/test_checks.py @@ -5,9 +5,8 @@ from types import ModuleType from typing import Any -from pytest_mock import MockerFixture - import pytest +from pytest_mock import MockerFixture from utils import checks diff --git a/tests/unit/utils/test_common.py b/tests/unit/utils/test_common.py index 197048664..f902b541f 100644 --- a/tests/unit/utils/test_common.py +++ b/tests/unit/utils/test_common.py @@ -2,20 +2,19 @@ from logging import Logger +import pytest from pydantic import AnyHttpUrl from pytest_mock import MockerFixture -import pytest - -from utils.common import ( - register_mcp_servers_async, -) from models.config import ( Configuration, - ServiceConfiguration, LlamaStackConfiguration, - UserDataCollection, ModelContextProtocolServer, + ServiceConfiguration, + UserDataCollection, +) +from utils.common import ( + register_mcp_servers_async, ) diff --git a/tests/unit/utils/test_conversations.py b/tests/unit/utils/test_conversations.py index 389793055..2ddc65373 100644 --- a/tests/unit/utils/test_conversations.py +++ b/tests/unit/utils/test_conversations.py @@ -1,12 +1,12 @@ """Unit tests for conversation utility functions.""" -from datetime import datetime, UTC +from datetime import UTC, datetime from typing import Any +import pytest from fastapi import HTTPException from llama_stack_api import OpenAIResponseMessage from llama_stack_client import APIConnectionError, APIStatusError -import pytest from pytest_mock import MockerFixture from constants import DEFAULT_RAG_TOOL diff --git a/tests/unit/utils/test_llama_stack_version.py b/tests/unit/utils/test_llama_stack_version.py index 71650c6a6..d36a5f7f9 100644 --- a/tests/unit/utils/test_llama_stack_version.py +++ b/tests/unit/utils/test_llama_stack_version.py @@ -3,21 +3,18 @@ from typing import Any import pytest - -from semver import Version +from llama_stack_client.types import VersionInfo from pytest_mock import MockerFixture from pytest_subtests import SubTests - -from llama_stack_client.types import VersionInfo - -from utils.llama_stack_version import ( - check_llama_stack_version, - InvalidLlamaStackVersionException, -) +from semver import Version from constants import ( - MINIMAL_SUPPORTED_LLAMA_STACK_VERSION, MAXIMAL_SUPPORTED_LLAMA_STACK_VERSION, + MINIMAL_SUPPORTED_LLAMA_STACK_VERSION, +) +from utils.llama_stack_version import ( + InvalidLlamaStackVersionException, + check_llama_stack_version, ) diff --git a/tests/unit/utils/test_mcp_auth_headers.py b/tests/unit/utils/test_mcp_auth_headers.py index 307288689..2404d282f 100644 --- a/tests/unit/utils/test_mcp_auth_headers.py +++ b/tests/unit/utils/test_mcp_auth_headers.py @@ -2,7 +2,6 @@ from pathlib import Path - from utils.mcp_auth_headers import resolve_authorization_headers diff --git a/tests/unit/utils/test_mcp_headers.py b/tests/unit/utils/test_mcp_headers.py index 3424655cf..1812e7fa9 100644 --- a/tests/unit/utils/test_mcp_headers.py +++ b/tests/unit/utils/test_mcp_headers.py @@ -1,9 +1,8 @@ """Unit tests for MCP headers utility functions.""" -from pytest_mock import MockerFixture import pytest - from fastapi import Request +from pytest_mock import MockerFixture import constants from models.config import ModelContextProtocolServer diff --git a/tests/unit/utils/test_query.py b/tests/unit/utils/test_query.py index 5c13a3a2d..c6fa684dd 100644 --- a/tests/unit/utils/test_query.py +++ b/tests/unit/utils/test_query.py @@ -24,7 +24,6 @@ PromptTooLongResponse, QuotaExceededResponse, ) - from tests.unit import config_dict from utils.query import ( consume_query_tokens, diff --git a/tests/unit/utils/test_responses.py b/tests/unit/utils/test_responses.py index 14dad79e9..4e6f790ab 100644 --- a/tests/unit/utils/test_responses.py +++ b/tests/unit/utils/test_responses.py @@ -10,13 +10,29 @@ from fastapi import HTTPException from llama_stack_api.openai_responses import ( OpenAIResponseInputToolFileSearch as InputToolFileSearch, +) +from llama_stack_api.openai_responses import ( OpenAIResponseInputToolMCP as InputToolMCP, +) +from llama_stack_api.openai_responses import ( OpenAIResponseMCPApprovalRequest as MCPApprovalRequest, +) +from llama_stack_api.openai_responses import ( OpenAIResponseMCPApprovalResponse as MCPApprovalResponse, +) +from llama_stack_api.openai_responses import ( OpenAIResponseOutputMessageFileSearchToolCall as FileSearchCall, +) +from llama_stack_api.openai_responses import ( OpenAIResponseOutputMessageFunctionToolCall as FunctionCall, +) +from llama_stack_api.openai_responses import ( OpenAIResponseOutputMessageMCPCall as MCPCall, +) +from llama_stack_api.openai_responses import ( OpenAIResponseOutputMessageMCPListTools as MCPListTools, +) +from llama_stack_api.openai_responses import ( OpenAIResponseOutputMessageWebSearchToolCall as WebSearchCall, ) from llama_stack_client import APIConnectionError, APIStatusError, AsyncLlamaStackClient diff --git a/tests/unit/utils/test_shields.py b/tests/unit/utils/test_shields.py index 5d68a73a2..333c96df0 100644 --- a/tests/unit/utils/test_shields.py +++ b/tests/unit/utils/test_shields.py @@ -1,8 +1,8 @@ """Unit tests for utils/shields.py functions.""" -from llama_stack_client import APIConnectionError, APIStatusError import pytest from fastapi import HTTPException, status +from llama_stack_client import APIConnectionError, APIStatusError from pytest_mock import MockerFixture from utils.shields import ( diff --git a/tests/unit/utils/test_transcripts.py b/tests/unit/utils/test_transcripts.py index d6fada723..3535b6294 100644 --- a/tests/unit/utils/test_transcripts.py +++ b/tests/unit/utils/test_transcripts.py @@ -1,11 +1,11 @@ """Unit tests for functions defined in utils.transcripts module.""" import hashlib + from pytest_mock import MockerFixture from configuration import AppConfig from models.requests import QueryRequest - from utils.transcripts import ( construct_transcripts_path, create_transcript, diff --git a/tests/unit/utils/test_types.py b/tests/unit/utils/test_types.py index 480254ea3..e05219d81 100644 --- a/tests/unit/utils/test_types.py +++ b/tests/unit/utils/test_types.py @@ -1,12 +1,13 @@ """Unit tests for functions and types defined in utils/types.py.""" import pytest -from llama_stack_api import ImageContentItem, TextContentItem, URL, _URLOrData +from llama_stack_api import URL, ImageContentItem, TextContentItem, _URLOrData from llama_stack_api.openai_responses import ( OpenAIResponseInputToolFileSearch as InputToolFileSearch, +) +from llama_stack_api.openai_responses import ( OpenAIResponseInputToolMCP as InputToolMCP, ) - from pydantic import AnyUrl, ValidationError from utils.types import (