chore: ran linting

This commit is contained in:
Anish Sarkar 2026-03-21 13:20:13 +05:30
parent 772150eb66
commit de8841fb86
110 changed files with 2673 additions and 1918 deletions

View file

@ -156,9 +156,7 @@ async def committed_google_data(async_engine):
session.add(user)
await session.flush()
space = SearchSpace(
name=f"Google Test {uuid.uuid4().hex[:6]}", user_id=user.id
)
space = SearchSpace(name=f"Google Test {uuid.uuid4().hex[:6]}", user_id=user.id)
session.add(space)
await session.flush()
space_id = space.id
@ -215,7 +213,9 @@ async def committed_google_data(async_engine):
def patched_session_factory(async_engine, monkeypatch):
"""Replace ``async_session_maker`` in connector_service with one bound to the test engine."""
test_maker = async_sessionmaker(async_engine, expire_on_commit=False)
monkeypatch.setattr("app.services.connector_service.async_session_maker", test_maker)
monkeypatch.setattr(
"app.services.connector_service.async_session_maker", test_maker
)
return test_maker

View file

@ -14,7 +14,12 @@ import pytest_asyncio
from app.db import SearchSourceConnectorType
from .conftest import cleanup_space, make_session_factory, mock_task_logger, seed_connector
from .conftest import (
cleanup_space,
make_session_factory,
mock_task_logger,
seed_connector,
)
pytestmark = pytest.mark.integration
@ -52,8 +57,10 @@ async def native_calendar(async_engine):
async_engine,
connector_type=SearchSourceConnectorType.GOOGLE_CALENDAR_CONNECTOR,
config={
"token": "fake", "refresh_token": "fake",
"client_id": "fake", "client_secret": "fake",
"token": "fake",
"refresh_token": "fake",
"client_id": "fake",
"client_secret": "fake",
"token_uri": "https://oauth2.googleapis.com/token",
},
name_prefix="cal-native",
@ -66,10 +73,16 @@ async def native_calendar(async_engine):
@patch(f"{_INDEXER_MODULE}.GoogleCalendarConnector")
@patch(f"{_INDEXER_MODULE}.build_composio_credentials")
async def test_composio_calendar_uses_composio_credentials(
mock_build_creds, mock_cal_cls, mock_tl_cls, async_engine, composio_calendar,
mock_build_creds,
mock_cal_cls,
mock_tl_cls,
async_engine,
composio_calendar,
):
"""Calendar indexer calls build_composio_credentials for a Composio connector."""
from app.tasks.connector_indexers.google_calendar_indexer import index_google_calendar_events
from app.tasks.connector_indexers.google_calendar_indexer import (
index_google_calendar_events,
)
data = composio_calendar
mock_creds = MagicMock(name="composio-creds")
@ -77,14 +90,18 @@ async def test_composio_calendar_uses_composio_credentials(
mock_tl_cls.return_value = mock_task_logger()
mock_cal_instance = MagicMock()
mock_cal_instance.get_all_primary_calendar_events = AsyncMock(return_value=([], None))
mock_cal_instance.get_all_primary_calendar_events = AsyncMock(
return_value=([], None)
)
mock_cal_cls.return_value = mock_cal_instance
maker = make_session_factory(async_engine)
async with maker() as session:
await index_google_calendar_events(
session=session, connector_id=data["connector_id"],
search_space_id=data["search_space_id"], user_id=data["user_id"],
session=session,
connector_id=data["connector_id"],
search_space_id=data["search_space_id"],
user_id=data["user_id"],
)
mock_build_creds.assert_called_once_with(_COMPOSIO_ACCOUNT_ID)
@ -96,10 +113,15 @@ async def test_composio_calendar_uses_composio_credentials(
@patch(f"{_INDEXER_MODULE}.TaskLoggingService")
@patch(f"{_INDEXER_MODULE}.build_composio_credentials")
async def test_composio_calendar_without_account_id_returns_error(
mock_build_creds, mock_tl_cls, async_engine, composio_calendar_no_id,
mock_build_creds,
mock_tl_cls,
async_engine,
composio_calendar_no_id,
):
"""Calendar indexer returns error when Composio connector lacks connected_account_id."""
from app.tasks.connector_indexers.google_calendar_indexer import index_google_calendar_events
from app.tasks.connector_indexers.google_calendar_indexer import (
index_google_calendar_events,
)
data = composio_calendar_no_id
mock_tl_cls.return_value = mock_task_logger()
@ -107,8 +129,10 @@ async def test_composio_calendar_without_account_id_returns_error(
maker = make_session_factory(async_engine)
async with maker() as session:
count, _skipped, error = await index_google_calendar_events(
session=session, connector_id=data["connector_id"],
search_space_id=data["search_space_id"], user_id=data["user_id"],
session=session,
connector_id=data["connector_id"],
search_space_id=data["search_space_id"],
user_id=data["user_id"],
)
assert count == 0
@ -121,23 +145,33 @@ async def test_composio_calendar_without_account_id_returns_error(
@patch(f"{_INDEXER_MODULE}.GoogleCalendarConnector")
@patch(f"{_INDEXER_MODULE}.build_composio_credentials")
async def test_native_calendar_does_not_use_composio_credentials(
mock_build_creds, mock_cal_cls, mock_tl_cls, async_engine, native_calendar,
mock_build_creds,
mock_cal_cls,
mock_tl_cls,
async_engine,
native_calendar,
):
"""Calendar indexer does NOT call build_composio_credentials for a native connector."""
from app.tasks.connector_indexers.google_calendar_indexer import index_google_calendar_events
from app.tasks.connector_indexers.google_calendar_indexer import (
index_google_calendar_events,
)
data = native_calendar
mock_tl_cls.return_value = mock_task_logger()
mock_cal_instance = MagicMock()
mock_cal_instance.get_all_primary_calendar_events = AsyncMock(return_value=([], None))
mock_cal_instance.get_all_primary_calendar_events = AsyncMock(
return_value=([], None)
)
mock_cal_cls.return_value = mock_cal_instance
maker = make_session_factory(async_engine)
async with maker() as session:
await index_google_calendar_events(
session=session, connector_id=data["connector_id"],
search_space_id=data["search_space_id"], user_id=data["user_id"],
session=session,
connector_id=data["connector_id"],
search_space_id=data["search_space_id"],
user_id=data["user_id"],
)
mock_build_creds.assert_not_called()

View file

@ -14,7 +14,12 @@ import pytest_asyncio
from app.db import SearchSourceConnectorType
from .conftest import cleanup_space, make_session_factory, mock_task_logger, seed_connector
from .conftest import (
cleanup_space,
make_session_factory,
mock_task_logger,
seed_connector,
)
pytestmark = pytest.mark.integration
@ -129,7 +134,9 @@ async def test_composio_connector_without_account_id_returns_error(
assert count == 0
assert error is not None
assert "composio_connected_account_id" in error.lower() or "composio" in error.lower()
assert (
"composio_connected_account_id" in error.lower() or "composio" in error.lower()
)
mock_build_creds.assert_not_called()

View file

@ -14,7 +14,12 @@ import pytest_asyncio
from app.db import SearchSourceConnectorType
from .conftest import cleanup_space, make_session_factory, mock_task_logger, seed_connector
from .conftest import (
cleanup_space,
make_session_factory,
mock_task_logger,
seed_connector,
)
pytestmark = pytest.mark.integration
@ -52,8 +57,10 @@ async def native_gmail(async_engine):
async_engine,
connector_type=SearchSourceConnectorType.GOOGLE_GMAIL_CONNECTOR,
config={
"token": "fake", "refresh_token": "fake",
"client_id": "fake", "client_secret": "fake",
"token": "fake",
"refresh_token": "fake",
"client_id": "fake",
"client_secret": "fake",
"token_uri": "https://oauth2.googleapis.com/token",
},
name_prefix="gmail-native",
@ -66,10 +73,16 @@ async def native_gmail(async_engine):
@patch(f"{_INDEXER_MODULE}.GoogleGmailConnector")
@patch(f"{_INDEXER_MODULE}.build_composio_credentials")
async def test_composio_gmail_uses_composio_credentials(
mock_build_creds, mock_gmail_cls, mock_tl_cls, async_engine, composio_gmail,
mock_build_creds,
mock_gmail_cls,
mock_tl_cls,
async_engine,
composio_gmail,
):
"""Gmail indexer calls build_composio_credentials for a Composio connector."""
from app.tasks.connector_indexers.google_gmail_indexer import index_google_gmail_messages
from app.tasks.connector_indexers.google_gmail_indexer import (
index_google_gmail_messages,
)
data = composio_gmail
mock_creds = MagicMock(name="composio-creds")
@ -83,8 +96,10 @@ async def test_composio_gmail_uses_composio_credentials(
maker = make_session_factory(async_engine)
async with maker() as session:
await index_google_gmail_messages(
session=session, connector_id=data["connector_id"],
search_space_id=data["search_space_id"], user_id=data["user_id"],
session=session,
connector_id=data["connector_id"],
search_space_id=data["search_space_id"],
user_id=data["user_id"],
)
mock_build_creds.assert_called_once_with(_COMPOSIO_ACCOUNT_ID)
@ -96,10 +111,15 @@ async def test_composio_gmail_uses_composio_credentials(
@patch(f"{_INDEXER_MODULE}.TaskLoggingService")
@patch(f"{_INDEXER_MODULE}.build_composio_credentials")
async def test_composio_gmail_without_account_id_returns_error(
mock_build_creds, mock_tl_cls, async_engine, composio_gmail_no_id,
mock_build_creds,
mock_tl_cls,
async_engine,
composio_gmail_no_id,
):
"""Gmail indexer returns error when Composio connector lacks connected_account_id."""
from app.tasks.connector_indexers.google_gmail_indexer import index_google_gmail_messages
from app.tasks.connector_indexers.google_gmail_indexer import (
index_google_gmail_messages,
)
data = composio_gmail_no_id
mock_tl_cls.return_value = mock_task_logger()
@ -107,8 +127,10 @@ async def test_composio_gmail_without_account_id_returns_error(
maker = make_session_factory(async_engine)
async with maker() as session:
count, _skipped, error = await index_google_gmail_messages(
session=session, connector_id=data["connector_id"],
search_space_id=data["search_space_id"], user_id=data["user_id"],
session=session,
connector_id=data["connector_id"],
search_space_id=data["search_space_id"],
user_id=data["user_id"],
)
assert count == 0
@ -121,10 +143,16 @@ async def test_composio_gmail_without_account_id_returns_error(
@patch(f"{_INDEXER_MODULE}.GoogleGmailConnector")
@patch(f"{_INDEXER_MODULE}.build_composio_credentials")
async def test_native_gmail_does_not_use_composio_credentials(
mock_build_creds, mock_gmail_cls, mock_tl_cls, async_engine, native_gmail,
mock_build_creds,
mock_gmail_cls,
mock_tl_cls,
async_engine,
native_gmail,
):
"""Gmail indexer does NOT call build_composio_credentials for a native connector."""
from app.tasks.connector_indexers.google_gmail_indexer import index_google_gmail_messages
from app.tasks.connector_indexers.google_gmail_indexer import (
index_google_gmail_messages,
)
data = native_gmail
mock_tl_cls.return_value = mock_task_logger()
@ -136,8 +164,10 @@ async def test_native_gmail_does_not_use_composio_credentials(
maker = make_session_factory(async_engine)
async with maker() as session:
await index_google_gmail_messages(
session=session, connector_id=data["connector_id"],
search_space_id=data["search_space_id"], user_id=data["user_id"],
session=session,
connector_id=data["connector_id"],
search_space_id=data["search_space_id"],
user_id=data["user_id"],
)
mock_build_creds.assert_not_called()

View file

@ -39,9 +39,7 @@ async def test_list_of_types_returns_both_matching_doc_types(
assert "FILE" not in returned_types
async def test_single_string_type_returns_only_that_type(
db_session, seed_google_docs
):
async def test_single_string_type_returns_only_that_type(db_session, seed_google_docs):
"""Searching with a single string type returns only documents of that exact type."""
space_id = seed_google_docs["search_space"].id

View file

@ -64,7 +64,9 @@ async def test_gmail_accepts_valid_composio_credentials(mock_build):
mock_build.return_value = mock_service
connector = GoogleGmailConnector(
creds, session=MagicMock(), user_id="test-user",
creds,
session=MagicMock(),
user_id="test-user",
)
profile, error = await connector.get_user_profile()
@ -76,7 +78,9 @@ async def test_gmail_accepts_valid_composio_credentials(mock_build):
@patch("app.connectors.google_gmail_connector.Request")
@patch("app.connectors.google_gmail_connector.build")
async def test_gmail_refreshes_expired_composio_credentials(mock_build, mock_request_cls):
async def test_gmail_refreshes_expired_composio_credentials(
mock_build, mock_request_cls
):
"""GoogleGmailConnector handles expired Composio credentials via refresh_handler
without attempting DB persistence."""
from app.connectors.google_gmail_connector import GoogleGmailConnector
@ -95,7 +99,9 @@ async def test_gmail_refreshes_expired_composio_credentials(mock_build, mock_req
mock_session = AsyncMock()
connector = GoogleGmailConnector(
creds, session=mock_session, user_id="test-user",
creds,
session=mock_session,
user_id="test-user",
)
profile, error = await connector.get_user_profile()
@ -128,7 +134,9 @@ async def test_calendar_accepts_valid_composio_credentials(mock_build):
mock_build.return_value = mock_service
connector = GoogleCalendarConnector(
creds, session=MagicMock(), user_id="test-user",
creds,
session=MagicMock(),
user_id="test-user",
)
calendars, error = await connector.get_calendars()
@ -141,7 +149,9 @@ async def test_calendar_accepts_valid_composio_credentials(mock_build):
@patch("app.connectors.google_calendar_connector.Request")
@patch("app.connectors.google_calendar_connector.build")
async def test_calendar_refreshes_expired_composio_credentials(mock_build, mock_request_cls):
async def test_calendar_refreshes_expired_composio_credentials(
mock_build, mock_request_cls
):
"""GoogleCalendarConnector handles expired Composio credentials via refresh_handler
without attempting DB persistence."""
from app.connectors.google_calendar_connector import GoogleCalendarConnector
@ -157,7 +167,9 @@ async def test_calendar_refreshes_expired_composio_credentials(mock_build, mock_
mock_session = AsyncMock()
connector = GoogleCalendarConnector(
creds, session=mock_session, user_id="test-user",
creds,
session=mock_session,
user_id="test-user",
)
calendars, error = await connector.get_calendars()
@ -191,7 +203,9 @@ async def test_drive_client_uses_prebuilt_composio_credentials(mock_build):
mock_build.return_value = mock_service
client = GoogleDriveClient(
session=MagicMock(), connector_id=999, credentials=creds,
session=MagicMock(),
connector_id=999,
credentials=creds,
)
files, next_token, error = await client.list_files()
@ -218,7 +232,9 @@ async def test_drive_client_prebuilt_creds_skip_db_loading(mock_build, mock_get_
mock_build.return_value = mock_service
client = GoogleDriveClient(
session=MagicMock(), connector_id=999, credentials=creds,
session=MagicMock(),
connector_id=999,
credentials=creds,
)
await client.list_files()

View file

@ -20,8 +20,14 @@ def test_drive_indexer_accepts_both_native_and_composio():
ACCEPTED_DRIVE_CONNECTOR_TYPES,
)
assert SearchSourceConnectorType.GOOGLE_DRIVE_CONNECTOR in ACCEPTED_DRIVE_CONNECTOR_TYPES
assert SearchSourceConnectorType.COMPOSIO_GOOGLE_DRIVE_CONNECTOR in ACCEPTED_DRIVE_CONNECTOR_TYPES
assert (
SearchSourceConnectorType.GOOGLE_DRIVE_CONNECTOR
in ACCEPTED_DRIVE_CONNECTOR_TYPES
)
assert (
SearchSourceConnectorType.COMPOSIO_GOOGLE_DRIVE_CONNECTOR
in ACCEPTED_DRIVE_CONNECTOR_TYPES
)
def test_gmail_indexer_accepts_both_native_and_composio():
@ -30,8 +36,14 @@ def test_gmail_indexer_accepts_both_native_and_composio():
ACCEPTED_GMAIL_CONNECTOR_TYPES,
)
assert SearchSourceConnectorType.GOOGLE_GMAIL_CONNECTOR in ACCEPTED_GMAIL_CONNECTOR_TYPES
assert SearchSourceConnectorType.COMPOSIO_GMAIL_CONNECTOR in ACCEPTED_GMAIL_CONNECTOR_TYPES
assert (
SearchSourceConnectorType.GOOGLE_GMAIL_CONNECTOR
in ACCEPTED_GMAIL_CONNECTOR_TYPES
)
assert (
SearchSourceConnectorType.COMPOSIO_GMAIL_CONNECTOR
in ACCEPTED_GMAIL_CONNECTOR_TYPES
)
def test_calendar_indexer_accepts_both_native_and_composio():
@ -40,14 +52,29 @@ def test_calendar_indexer_accepts_both_native_and_composio():
ACCEPTED_CALENDAR_CONNECTOR_TYPES,
)
assert SearchSourceConnectorType.GOOGLE_CALENDAR_CONNECTOR in ACCEPTED_CALENDAR_CONNECTOR_TYPES
assert SearchSourceConnectorType.COMPOSIO_GOOGLE_CALENDAR_CONNECTOR in ACCEPTED_CALENDAR_CONNECTOR_TYPES
assert (
SearchSourceConnectorType.GOOGLE_CALENDAR_CONNECTOR
in ACCEPTED_CALENDAR_CONNECTOR_TYPES
)
assert (
SearchSourceConnectorType.COMPOSIO_GOOGLE_CALENDAR_CONNECTOR
in ACCEPTED_CALENDAR_CONNECTOR_TYPES
)
def test_composio_connector_types_set_covers_all_google_services():
"""COMPOSIO_GOOGLE_CONNECTOR_TYPES should contain all three Composio Google types."""
from app.utils.google_credentials import COMPOSIO_GOOGLE_CONNECTOR_TYPES
assert SearchSourceConnectorType.COMPOSIO_GOOGLE_DRIVE_CONNECTOR in COMPOSIO_GOOGLE_CONNECTOR_TYPES
assert SearchSourceConnectorType.COMPOSIO_GMAIL_CONNECTOR in COMPOSIO_GOOGLE_CONNECTOR_TYPES
assert SearchSourceConnectorType.COMPOSIO_GOOGLE_CALENDAR_CONNECTOR in COMPOSIO_GOOGLE_CONNECTOR_TYPES
assert (
SearchSourceConnectorType.COMPOSIO_GOOGLE_DRIVE_CONNECTOR
in COMPOSIO_GOOGLE_CONNECTOR_TYPES
)
assert (
SearchSourceConnectorType.COMPOSIO_GMAIL_CONNECTOR
in COMPOSIO_GOOGLE_CONNECTOR_TYPES
)
assert (
SearchSourceConnectorType.COMPOSIO_GOOGLE_CALENDAR_CONNECTOR
in COMPOSIO_GOOGLE_CONNECTOR_TYPES
)