@@ -221,8 +221,10 @@ async def set_default_project(project_name: str, ctx: Context | None = None) ->
221221 if ctx : # pragma: no cover
222222 await ctx .info (f"Setting default project to: { project_name } " )
223223
224- # Call API to set default project
225- response = await call_put (client , f"/projects/{ project_name } /default" )
224+ # Call API to set default project using URL encoding for special characters
225+ from urllib .parse import quote
226+ encoded_name = quote (project_name , safe = '' )
227+ response = await call_put (client , f"/projects/{ encoded_name } /default" )
226228 status_response = ProjectStatusResponse .model_validate (response .json ())
227229
228230 result = f"✓ { status_response .message } \n \n "
@@ -323,16 +325,29 @@ async def delete_project(project_name: str, ctx: Context | None = None) -> str:
323325 response = await call_get (client , "/projects/projects" )
324326 project_list = ProjectList .model_validate (response .json ())
325327
326- # Check if project exists
327- project_exists = any (p .name == project_name for p in project_list .projects )
328- if not project_exists :
328+ # Find the project by name (case-insensitive) or permalink - same logic as switch_project
329+ project_permalink = generate_permalink (project_name )
330+ target_project = None
331+ for p in project_list .projects :
332+ # Match by permalink (handles case-insensitive input)
333+ if p .permalink == project_permalink :
334+ target_project = p
335+ break
336+ # Also match by name comparison (case-insensitive)
337+ if p .name .lower () == project_name .lower ():
338+ target_project = p
339+ break
340+
341+ if not target_project :
329342 available_projects = [p .name for p in project_list .projects ]
330343 raise ValueError (
331344 f"Project '{ project_name } ' not found. Available projects: { ', ' .join (available_projects )} "
332345 )
333346
334- # Call API to delete project
335- response = await call_delete (client , f"/projects/{ project_name } " )
347+ # Call API to delete project using URL encoding for special characters
348+ from urllib .parse import quote
349+ encoded_name = quote (target_project .name , safe = '' )
350+ response = await call_delete (client , f"/projects/{ encoded_name } " )
336351 status_response = ProjectStatusResponse .model_validate (response .json ())
337352
338353 result = f"✓ { status_response .message } \n \n "
0 commit comments