33"""
44
55import logging
6- from typing import Any , Dict , List , Optional
6+ from typing import List
77
88from mcpm .utils .config import ConfigManager
9- from mcpm .utils .scope import ScopeType , extract_from_scope
109
1110logger = logging .getLogger (__name__ )
1211
1312
1413class ClientConfigManager :
15- """Manages client-specific configuration including active client and stashed servers """
14+ """Manages client-specific configuration"""
1615
1716 def __init__ (self ):
1817 """Initialize the client config manager"""
@@ -23,43 +22,6 @@ def _refresh_config(self):
2322 """Refresh the local config cache from the config manager"""
2423 self ._config = self .config_manager .get_config ()
2524
26- def get_active_client (self ) -> str | None :
27- target = self .get_active_target ()
28- if not target :
29- return
30- scope_type , scope = extract_from_scope (target )
31- if scope_type != ScopeType .CLIENT :
32- return
33- return scope
34-
35- def set_active_target (self , target_name : str | None ) -> bool :
36- """Set the active target
37-
38- Args:
39- target_name: Name of target to set as active
40-
41- Returns:
42- bool: Success or failure
43- """
44- # Set the active target
45- result = self .config_manager .set_config ("active_target" , target_name )
46- self ._refresh_config ()
47- return result
48-
49- def get_active_target (self ) -> str | None :
50- """Get the name of the currently active target or None if not set"""
51- self ._refresh_config ()
52- return self ._config .get ("active_target" )
53-
54- def get_active_profile (self ) -> str | None :
55- target = self .get_active_target ()
56- if not target :
57- return
58- scope_type , scope = extract_from_scope (target )
59- if scope_type != ScopeType .PROFILE :
60- return
61- return scope
62-
6325 def get_supported_clients (self ) -> List [str ]:
6426 """Get a list of supported client names"""
6527 # Import here to avoid circular imports
@@ -80,145 +42,3 @@ def get_client_manager(self, client_name: str):
8042 from mcpm .clients .client_registry import ClientRegistry
8143
8244 return ClientRegistry .get_client_manager (client_name )
83-
84- def stash_server (self , scope_name : str , server_name : str , server_config : Any ) -> bool :
85- """Store a disabled server configuration in the global config
86-
87- Args:
88- scope_name: Name of the scope the server belongs to
89- server_name: Name of the server to stash
90- server_config: Server configuration to stash (ServerConfig object or dict)
91-
92- Returns:
93- bool: Success or failure
94- """
95- # Refresh config to ensure we have the latest state
96- self ._refresh_config ()
97-
98- # Ensure stashed_servers section exists
99- if "stashed_servers" not in self ._config :
100- self ._config ["stashed_servers" ] = {}
101-
102- # Ensure client section exists
103- if scope_name not in self ._config ["stashed_servers" ]:
104- self ._config ["stashed_servers" ][scope_name ] = {}
105-
106- # Convert ServerConfig to dict if needed
107- try :
108- # If it's a ServerConfig object with to_dict method
109- if hasattr (server_config , "to_dict" ) and callable (server_config .to_dict ):
110- server_dict = server_config .to_dict ()
111- else :
112- # Assume it's already a dict or JSON serializable
113- server_dict = server_config
114-
115- # Add the server configuration
116- stashed_servers = self ._config .get ("stashed_servers" , {})
117- if scope_name not in stashed_servers :
118- stashed_servers [scope_name ] = {}
119- stashed_servers [scope_name ][server_name ] = server_dict
120-
121- # Use set_config to save the updated stashed_servers
122- result = self .config_manager .set_config ("stashed_servers" , stashed_servers )
123- self ._refresh_config ()
124- return result
125- except Exception as e :
126- logger .error (f"Failed to save stashed server: { e } " )
127- return False
128-
129- def pop_server (self , scope_name : str , server_name : str ) -> Optional [Dict [str , Any ]]:
130- """Retrieve a stashed server configuration from the global config
131-
132- Args:
133- scope_name: Name of the scope the server belongs to
134- server_name: Name of the server to retrieve
135-
136- Returns:
137- Dict: Server configuration or None if not found
138- """
139- # Refresh config to ensure we have the latest state
140- self ._refresh_config ()
141-
142- # Check if stashed_servers section exists
143- stashed_servers = self ._config .get ("stashed_servers" , {})
144- if not stashed_servers :
145- return None
146-
147- # Check if scope section exists
148- if scope_name not in stashed_servers :
149- return None
150-
151- # Check if server exists
152- if server_name not in stashed_servers [scope_name ]:
153- return None
154-
155- # Get the server configuration
156- server_config = stashed_servers [scope_name ][server_name ]
157-
158- # Remove the server from stashed servers
159- del stashed_servers [scope_name ][server_name ]
160-
161- # Clean up empty scope section if needed
162- if not stashed_servers [scope_name ]:
163- del stashed_servers [scope_name ]
164-
165- # Clean up empty stashed_servers section if needed
166- if not stashed_servers :
167- # Set to None to remove the key completely
168- self .config_manager .set_config ("stashed_servers" , None )
169- else :
170- # Update with modified stashed_servers
171- self .config_manager .set_config ("stashed_servers" , stashed_servers )
172-
173- # Refresh config after changes
174- self ._refresh_config ()
175-
176- return server_config
177-
178- def is_server_stashed (self , scope_name : str , server_name : str ) -> bool :
179- """Check if a server is stashed in the global config
180-
181- Args:
182- scope_name: Name of the scope the server belongs to
183- server_name: Name of the server to check
184-
185- Returns:
186- bool: True if server is stashed, False otherwise
187- """
188- # Refresh config to ensure we have the latest state
189- self ._refresh_config ()
190-
191- # Check if stashed_servers section exists
192- stashed_servers = self ._config .get ("stashed_servers" , {})
193- if not stashed_servers :
194- return False
195-
196- # Check if scope section exists
197- if scope_name not in stashed_servers :
198- return False
199-
200- # Check if server exists
201- return server_name in stashed_servers [scope_name ]
202-
203- def get_stashed_servers (self , scope_name : str ) -> Dict [str , Dict [str , Any ]]:
204- """Get all stashed servers for a client
205-
206- Args:
207- scope_name: Name of the scope to get stashed servers for
208-
209- Returns:
210- Dict: Dictionary of server configurations by name
211- """
212- # Refresh config to ensure we have the latest state
213- self ._refresh_config ()
214-
215- # Check if stashed_servers section exists
216- stashed_servers = self ._config .get ("stashed_servers" , {})
217- if not stashed_servers :
218- return {}
219-
220- # Check if scope section exists
221- if scope_name not in stashed_servers :
222- return {}
223-
224- return stashed_servers [scope_name ]
0 commit comments