fix(mcp): Move all imports to the top of modules
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
"""Integration tests for document processing with progress notifications."""
|
||||
|
||||
import io
|
||||
import os
|
||||
|
||||
import pytest
|
||||
from PIL import Image
|
||||
@@ -13,7 +14,6 @@ class TestDocumentProcessingProgress:
|
||||
|
||||
async def test_unstructured_processor_with_progress_callback(self, nc_client):
|
||||
"""Test that UnstructuredProcessor calls progress callback during processing."""
|
||||
import os
|
||||
|
||||
# Skip if unstructured is not enabled
|
||||
if os.getenv("ENABLE_UNSTRUCTURED", "false").lower() != "true":
|
||||
@@ -71,7 +71,6 @@ class TestDocumentProcessingProgress:
|
||||
self, nc_mcp_client, nc_client
|
||||
):
|
||||
"""Test that reading a document via WebDAV MCP tool sends progress notifications."""
|
||||
import os
|
||||
|
||||
# Skip if document processing is not enabled
|
||||
if os.getenv("ENABLE_DOCUMENT_PROCESSING", "false").lower() != "true":
|
||||
@@ -110,7 +109,6 @@ class TestDocumentProcessingProgress:
|
||||
|
||||
async def test_progress_callback_not_required(self, nc_client):
|
||||
"""Test that processing works without progress callback (backward compatibility)."""
|
||||
import os
|
||||
|
||||
if os.getenv("ENABLE_UNSTRUCTURED", "false").lower() != "true":
|
||||
pytest.skip("Unstructured processor not enabled")
|
||||
|
||||
@@ -13,6 +13,8 @@ app password entry → background sync activation → database verification.
|
||||
"""
|
||||
|
||||
import logging
|
||||
import re
|
||||
import subprocess
|
||||
|
||||
import anyio
|
||||
import pytest
|
||||
@@ -151,7 +153,6 @@ async def generate_app_password(
|
||||
)
|
||||
|
||||
# Validate password format before returning
|
||||
import re
|
||||
|
||||
if not re.match(
|
||||
r"^[a-zA-Z0-9]{5}-[a-zA-Z0-9]{5}-[a-zA-Z0-9]{5}-[a-zA-Z0-9]{5}-[a-zA-Z0-9]{5}$",
|
||||
@@ -350,7 +351,6 @@ async def verify_app_password_created(username: str) -> bool:
|
||||
|
||||
# Query the database to check for background sync credentials
|
||||
# Astrolabe stores app passwords in oc_preferences, not oc_authtoken
|
||||
import subprocess
|
||||
|
||||
query = f"""
|
||||
SELECT userid, configkey, configvalue
|
||||
|
||||
@@ -16,6 +16,7 @@ vector database with indexed test data.
|
||||
import json
|
||||
from unittest.mock import MagicMock
|
||||
|
||||
import anyio
|
||||
import pytest
|
||||
from mcp.types import CreateMessageResult, TextContent
|
||||
|
||||
@@ -67,7 +68,6 @@ async def test_semantic_search_answer_successful_sampling(
|
||||
await require_vector_sync_tools(nc_mcp_client)
|
||||
|
||||
# Get initial indexed count before creating note
|
||||
import asyncio
|
||||
|
||||
initial_sync = await nc_mcp_client.call_tool(
|
||||
"nc_get_vector_sync_status", arguments={}
|
||||
@@ -118,7 +118,7 @@ Avoid blocking operations in async code.""",
|
||||
)
|
||||
break
|
||||
|
||||
await asyncio.sleep(wait_interval)
|
||||
await anyio.sleep(wait_interval)
|
||||
waited += wait_interval
|
||||
|
||||
# Verify sync completed
|
||||
@@ -247,7 +247,6 @@ async def test_semantic_search_answer_with_limit(nc_mcp_client, temporary_note_f
|
||||
)
|
||||
|
||||
# Wait for vector indexing to complete
|
||||
import asyncio
|
||||
|
||||
max_wait = 30
|
||||
wait_interval = 1
|
||||
@@ -262,7 +261,7 @@ async def test_semantic_search_answer_with_limit(nc_mcp_client, temporary_note_f
|
||||
if status_data["status"] == "idle" and status_data["pending_count"] == 0:
|
||||
break
|
||||
|
||||
await asyncio.sleep(wait_interval)
|
||||
await anyio.sleep(wait_interval)
|
||||
waited += wait_interval
|
||||
|
||||
assert waited < max_wait, f"Vector sync did not complete within {max_wait} seconds"
|
||||
@@ -306,7 +305,6 @@ async def test_semantic_search_answer_score_threshold(
|
||||
)
|
||||
|
||||
# Wait for vector indexing to complete
|
||||
import asyncio
|
||||
|
||||
max_wait = 30
|
||||
wait_interval = 1
|
||||
@@ -321,7 +319,7 @@ async def test_semantic_search_answer_score_threshold(
|
||||
if status_data["status"] == "idle" and status_data["pending_count"] == 0:
|
||||
break
|
||||
|
||||
await asyncio.sleep(wait_interval)
|
||||
await anyio.sleep(wait_interval)
|
||||
waited += wait_interval
|
||||
|
||||
assert waited < max_wait, f"Vector sync did not complete within {max_wait} seconds"
|
||||
@@ -371,7 +369,6 @@ async def test_semantic_search_answer_max_tokens(nc_mcp_client, temporary_note_f
|
||||
)
|
||||
|
||||
# Wait for vector indexing to complete
|
||||
import asyncio
|
||||
|
||||
max_wait = 30
|
||||
wait_interval = 1
|
||||
@@ -386,7 +383,7 @@ async def test_semantic_search_answer_max_tokens(nc_mcp_client, temporary_note_f
|
||||
if status_data["status"] == "idle" and status_data["pending_count"] == 0:
|
||||
break
|
||||
|
||||
await asyncio.sleep(wait_interval)
|
||||
await anyio.sleep(wait_interval)
|
||||
waited += wait_interval
|
||||
|
||||
assert waited < max_wait, f"Vector sync did not complete within {max_wait} seconds"
|
||||
|
||||
@@ -10,6 +10,7 @@ Uses SimpleEmbeddingProvider for deterministic, in-process embeddings
|
||||
without requiring external services like Ollama.
|
||||
"""
|
||||
|
||||
import math
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
|
||||
@@ -147,7 +148,6 @@ async def test_simple_embedding_provider_deterministic(simple_embedding_provider
|
||||
assert len(embedding1) == 384
|
||||
|
||||
# Should be normalized (unit length)
|
||||
import math
|
||||
|
||||
norm = math.sqrt(sum(x * x for x in embedding1))
|
||||
assert abs(norm - 1.0) < 1e-6
|
||||
@@ -340,7 +340,6 @@ async def test_batch_embedding(simple_embedding_provider: SimpleEmbeddingProvide
|
||||
assert all(len(emb) == 384 for emb in embeddings)
|
||||
|
||||
# Each should be normalized
|
||||
import math
|
||||
|
||||
for emb in embeddings:
|
||||
norm = math.sqrt(sum(x * x for x in emb))
|
||||
|
||||
Reference in New Issue
Block a user