Skip to content
Merged
Show file tree
Hide file tree
Changes from 12 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/mcpm/profile/profile_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@


class ProfileConfigManager:
def __init__(self, profile_path: str = DEFAULT_PROFILE_PATH):
def __init__(self, profile_path: str | None = DEFAULT_PROFILE_PATH):
if profile_path is None:
profile_path = DEFAULT_PROFILE_PATH
self.profile_path = os.path.expanduser(profile_path)
self._profiles = self._load_profiles()

Expand Down
267 changes: 182 additions & 85 deletions src/mcpm/router/router.py

Large diffs are not rendered by default.

12 changes: 7 additions & 5 deletions src/mcpm/router/transport.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,11 +99,13 @@ async def connect_sse(self, scope: Scope, receive: Receive, send: Send):
# maintain session_id to identifier mapping
profile = get_key_from_scope(scope, key_name="profile")
client_id = get_key_from_scope(scope, key_name="client")
if profile is not None:
self._session_id_to_identifier[session_id] = ClientIdentifier(
client_id=client_id or "anonymous", profile=profile, api_key=api_key
)
logger.debug(f"Session {session_id} mapped to identifier {self._session_id_to_identifier[session_id]}")
logger.debug(f"Profile: {profile}, Client ID: {client_id}")
client_id = client_id or "anonymous"
profile = profile or "default"
self._session_id_to_identifier[session_id] = ClientIdentifier(
client_id=client_id, profile=profile, api_key=api_key
)
logger.debug(f"Session {session_id} mapped to identifier {self._session_id_to_identifier[session_id]}")

sse_stream_writer, sse_stream_reader = anyio.create_memory_object_stream[dict[str, Any]](0)

Expand Down
5 changes: 3 additions & 2 deletions tests/test_add.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@

def test_add_server(windsurf_manager, monkeypatch):
"""Test add server"""
monkeypatch.setattr(ClientRegistry, "get_active_client", Mock(return_value="windsurf"))
monkeypatch.setattr(ClientRegistry, "get_active_client_manager", Mock(return_value=windsurf_manager))
monkeypatch.setattr(ClientRegistry, "get_client_manager", Mock(return_value=windsurf_manager))
monkeypatch.setattr(ClientRegistry, "determine_active_scope", Mock(return_value="@windsurf"))
monkeypatch.setattr(
RepositoryManager,
"_fetch_servers",
Expand Down Expand Up @@ -51,9 +51,9 @@ def test_add_server(windsurf_manager, monkeypatch):

def test_add_server_with_missing_arg(windsurf_manager, monkeypatch):
"""Test add server with a missing argument that should be replaced with empty string"""
monkeypatch.setattr(ClientRegistry, "get_active_client", Mock(return_value="windsurf"))
monkeypatch.setattr(ClientRegistry, "get_active_client_manager", Mock(return_value=windsurf_manager))
monkeypatch.setattr(ClientRegistry, "get_client_manager", Mock(return_value=windsurf_manager))
monkeypatch.setattr(ClientRegistry, "determine_active_scope", Mock(return_value="@windsurf"))
monkeypatch.setattr(
RepositoryManager,
"_fetch_servers",
Expand Down Expand Up @@ -118,6 +118,7 @@ def test_add_server_with_empty_args(windsurf_manager, monkeypatch):
monkeypatch.setattr(ClientRegistry, "get_active_client", Mock(return_value="windsurf"))
monkeypatch.setattr(ClientRegistry, "get_active_client_manager", Mock(return_value=windsurf_manager))
monkeypatch.setattr(ClientRegistry, "get_client_manager", Mock(return_value=windsurf_manager))
monkeypatch.setattr(ClientRegistry, "determine_active_scope", Mock(return_value="@windsurf"))
monkeypatch.setattr(
RepositoryManager,
"_fetch_servers",
Expand Down
10 changes: 5 additions & 5 deletions tests/test_remove.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@
def test_remove_server_success(windsurf_manager, monkeypatch):
"""Test successful server removal"""
# Setup mocks
monkeypatch.setattr(ClientRegistry, "get_active_client", Mock(return_value="windsurf"))
monkeypatch.setattr(ClientRegistry, "get_active_client_manager", Mock(return_value=windsurf_manager))
monkeypatch.setattr(ClientRegistry, "get_client_manager", Mock(return_value=windsurf_manager))
monkeypatch.setattr(ClientRegistry, "get_client_info", Mock(return_value={"name": "windsurf"}))
monkeypatch.setattr(ClientRegistry, "determine_active_scope", Mock(return_value="@windsurf"))

# Mock server info
mock_server = Mock()
Expand All @@ -33,10 +33,10 @@ def test_remove_server_success(windsurf_manager, monkeypatch):

def test_remove_server_not_found(windsurf_manager, monkeypatch):
"""Test removal of non-existent server"""
monkeypatch.setattr(ClientRegistry, "get_active_client", Mock(return_value="windsurf"))
monkeypatch.setattr(ClientRegistry, "get_active_client_manager", Mock(return_value=windsurf_manager))
monkeypatch.setattr(ClientRegistry, "get_client_manager", Mock(return_value=windsurf_manager))
monkeypatch.setattr(ClientRegistry, "get_client_info", Mock(return_value={"name": "windsurf"}))
monkeypatch.setattr(ClientRegistry, "determine_active_scope", Mock(return_value="@windsurf"))

# Mock server not found
windsurf_manager.get_server = Mock(return_value=None)
Expand All @@ -51,7 +51,7 @@ def test_remove_server_not_found(windsurf_manager, monkeypatch):
def test_remove_server_unsupported_client(monkeypatch):
"""Test removal with unsupported client"""
monkeypatch.setattr(ClientRegistry, "get_active_client_manager", Mock(return_value=None))
monkeypatch.setattr(ClientRegistry, "get_active_client", Mock(return_value="unsupported"))
monkeypatch.setattr(ClientRegistry, "determine_active_scope", Mock(return_value="@unsupported"))

runner = CliRunner()
result = runner.invoke(remove, ["server-test"])
Expand All @@ -62,10 +62,10 @@ def test_remove_server_unsupported_client(monkeypatch):

def test_remove_server_cancelled(windsurf_manager, monkeypatch):
"""Test removal when user cancels the confirmation"""
monkeypatch.setattr(ClientRegistry, "get_active_client", Mock(return_value="windsurf"))
monkeypatch.setattr(ClientRegistry, "get_active_client_manager", Mock(return_value=windsurf_manager))
monkeypatch.setattr(ClientRegistry, "get_client_manager", Mock(return_value=windsurf_manager))
monkeypatch.setattr(ClientRegistry, "get_client_info", Mock(return_value={"name": "windsurf"}))
monkeypatch.setattr(ClientRegistry, "determine_active_scope", Mock(return_value="@windsurf"))

# Mock server info
mock_server = Mock()
Expand All @@ -87,10 +87,10 @@ def test_remove_server_cancelled(windsurf_manager, monkeypatch):

def test_remove_server_failure(windsurf_manager, monkeypatch):
"""Test removal when the removal operation fails"""
monkeypatch.setattr(ClientRegistry, "get_active_client", Mock(return_value="windsurf"))
monkeypatch.setattr(ClientRegistry, "get_active_client_manager", Mock(return_value=windsurf_manager))
monkeypatch.setattr(ClientRegistry, "get_client_manager", Mock(return_value=windsurf_manager))
monkeypatch.setattr(ClientRegistry, "get_client_info", Mock(return_value={"name": "windsurf"}))
monkeypatch.setattr(ClientRegistry, "determine_active_scope", Mock(return_value="@windsurf"))

# Mock server info
mock_server = Mock()
Expand Down
18 changes: 9 additions & 9 deletions tests/test_stash_pop.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
def test_stash_server_success(windsurf_manager, monkeypatch):
"""Test successful server stashing"""
# Setup mocks
monkeypatch.setattr(ClientRegistry, "get_active_client", Mock(return_value="windsurf"))
monkeypatch.setattr(ClientRegistry, "determine_active_scope", Mock(return_value="@windsurf"))
monkeypatch.setattr(ClientRegistry, "get_active_client_manager", Mock(return_value=windsurf_manager))
monkeypatch.setattr(ClientRegistry, "get_client_manager", Mock(return_value=windsurf_manager))
monkeypatch.setattr(ClientRegistry, "get_client_info", Mock(return_value={"name": "windsurf"}))
Expand Down Expand Up @@ -49,7 +49,7 @@ def test_stash_server_success(windsurf_manager, monkeypatch):

def test_stash_server_already_stashed(windsurf_manager, monkeypatch):
"""Test stashing an already stashed server"""
monkeypatch.setattr(ClientRegistry, "get_active_client", Mock(return_value="windsurf"))
monkeypatch.setattr(ClientRegistry, "determine_active_scope", Mock(return_value="@windsurf"))
monkeypatch.setattr(ClientRegistry, "get_active_client_manager", Mock(return_value=windsurf_manager))
monkeypatch.setattr(ClientRegistry, "get_client_info", Mock(return_value={"name": "windsurf"}))
monkeypatch.setattr(ClientRegistry, "get_client_manager", Mock(return_value=windsurf_manager))
Expand All @@ -74,7 +74,7 @@ def test_stash_server_already_stashed(windsurf_manager, monkeypatch):

def test_stash_server_remove_failure(windsurf_manager, monkeypatch):
"""Test stashing when server removal fails"""
monkeypatch.setattr(ClientRegistry, "get_active_client", Mock(return_value="windsurf"))
monkeypatch.setattr(ClientRegistry, "determine_active_scope", Mock(return_value="@windsurf"))
monkeypatch.setattr(ClientRegistry, "get_active_client_manager", Mock(return_value=windsurf_manager))
monkeypatch.setattr(ClientRegistry, "get_client_info", Mock(return_value={"name": "windsurf"}))
monkeypatch.setattr(ClientRegistry, "get_client_manager", Mock(return_value=windsurf_manager))
Expand Down Expand Up @@ -103,7 +103,7 @@ def test_stash_server_remove_failure(windsurf_manager, monkeypatch):

def test_stash_server_not_found(windsurf_manager, monkeypatch):
"""Test stashing a non-existent server"""
monkeypatch.setattr(ClientRegistry, "get_active_client", Mock(return_value="windsurf"))
monkeypatch.setattr(ClientRegistry, "determine_active_scope", Mock(return_value="@windsurf"))
monkeypatch.setattr(ClientRegistry, "get_active_client_manager", Mock(return_value=windsurf_manager))
monkeypatch.setattr(ClientRegistry, "get_client_info", Mock(return_value={"name": "windsurf"}))
monkeypatch.setattr(ClientRegistry, "get_client_manager", Mock(return_value=windsurf_manager))
Expand All @@ -126,8 +126,8 @@ def test_stash_server_not_found(windsurf_manager, monkeypatch):

def test_stash_server_unsupported_client(monkeypatch):
"""Test stashing with unsupported client"""
monkeypatch.setattr(ClientRegistry, "determine_active_scope", Mock(return_value="@unsupported"))
monkeypatch.setattr(ClientRegistry, "get_active_client_manager", Mock(return_value=None))
monkeypatch.setattr(ClientRegistry, "get_active_client", Mock(return_value="unsupported"))

# Mock client config manager
mock_config_manager = Mock()
Expand All @@ -143,7 +143,7 @@ def test_stash_server_unsupported_client(monkeypatch):

def test_pop_server_success(windsurf_manager, monkeypatch):
"""Test successful server restoration"""
monkeypatch.setattr(ClientRegistry, "get_active_client", Mock(return_value="windsurf"))
monkeypatch.setattr(ClientRegistry, "determine_active_scope", Mock(return_value="@windsurf"))
monkeypatch.setattr(ClientRegistry, "get_active_client_manager", Mock(return_value=windsurf_manager))
monkeypatch.setattr(ClientRegistry, "get_client_info", Mock(return_value={"name": "windsurf"}))
monkeypatch.setattr(ClientRegistry, "get_client_manager", Mock(return_value=windsurf_manager))
Expand Down Expand Up @@ -178,7 +178,7 @@ def test_pop_server_success(windsurf_manager, monkeypatch):

def test_pop_server_not_stashed(windsurf_manager, monkeypatch):
"""Test popping a non-stashed server"""
monkeypatch.setattr(ClientRegistry, "get_active_client", Mock(return_value="windsurf"))
monkeypatch.setattr(ClientRegistry, "determine_active_scope", Mock(return_value="@windsurf"))
monkeypatch.setattr(ClientRegistry, "get_active_client_manager", Mock(return_value=windsurf_manager))
monkeypatch.setattr(ClientRegistry, "get_client_info", Mock(return_value={"name": "windsurf"}))
monkeypatch.setattr(ClientRegistry, "get_client_manager", Mock(return_value=windsurf_manager))
Expand All @@ -198,7 +198,7 @@ def test_pop_server_not_stashed(windsurf_manager, monkeypatch):

def test_pop_server_add_failure(windsurf_manager, monkeypatch):
"""Test popping when server addition fails"""
monkeypatch.setattr(ClientRegistry, "get_active_client", Mock(return_value="windsurf"))
monkeypatch.setattr(ClientRegistry, "determine_active_scope", Mock(return_value="@windsurf"))
monkeypatch.setattr(ClientRegistry, "get_active_client_manager", Mock(return_value=windsurf_manager))
monkeypatch.setattr(ClientRegistry, "get_client_info", Mock(return_value={"name": "windsurf"}))
monkeypatch.setattr(ClientRegistry, "get_client_manager", Mock(return_value=windsurf_manager))
Expand Down Expand Up @@ -233,7 +233,7 @@ def test_pop_server_add_failure(windsurf_manager, monkeypatch):
def test_pop_server_unsupported_client(monkeypatch):
"""Test popping with unsupported client"""
monkeypatch.setattr(ClientRegistry, "get_active_client_manager", Mock(return_value=None))
monkeypatch.setattr(ClientRegistry, "get_active_client", Mock(return_value="unsupported"))
monkeypatch.setattr(ClientRegistry, "determine_active_scope", Mock(return_value="@unsupported"))

# Mock client config manager
mock_config_manager = Mock()
Expand Down
Loading