Skip to content

Commit 3741895

Browse files
committed
edit server
Signed-off-by: RAKHI DUTTA <[email protected]>
1 parent 3ba9659 commit 3741895

File tree

4 files changed

+87
-9
lines changed

4 files changed

+87
-9
lines changed

mcpgateway/admin.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -545,7 +545,6 @@ async def admin_edit_server(
545545
>>> server_service.update_server = original_update_server
546546
"""
547547
form = await request.form()
548-
# is_inactive_checked = form.get("is_inactive_checked", "false")
549548
try:
550549
logger.debug(f"User {user} is editing server ID {server_id} with name: {form.get('name')}")
551550
server = ServerUpdate(
@@ -558,11 +557,6 @@ async def admin_edit_server(
558557
)
559558
await server_service.update_server(db, server_id, server)
560559

561-
# root_path = request.scope.get("root_path", "")
562-
563-
# if is_inactive_checked.lower() == "true":
564-
# return RedirectResponse(f"{root_path}/admin/?include_inactive=true#catalog", status_code=303)
565-
# return RedirectResponse(f"{root_path}/admin#catalog", status_code=303)
566560
return JSONResponse(
567561
content={"message": "Server update successfully!", "success": True},
568562
status_code=200,

mcpgateway/main.py

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -848,6 +848,12 @@ async def create_server(
848848
raise HTTPException(status_code=409, detail=str(e))
849849
except ServerError as e:
850850
raise HTTPException(status_code=400, detail=str(e))
851+
except ValidationError as e:
852+
logger.error(f"Validation error while creating server: {e}")
853+
raise HTTPException(status_code=422, detail=ErrorFormatter.format_validation_error(e))
854+
except IntegrityError as e:
855+
logger.error(f"Integrity error while creating server: {e}")
856+
raise HTTPException(status_code=409, detail=ErrorFormatter.format_database_error(e))
851857

852858

853859
@server_router.put("/{server_id}", response_model=ServerRead)
@@ -881,6 +887,12 @@ async def update_server(
881887
raise HTTPException(status_code=409, detail=str(e))
882888
except ServerError as e:
883889
raise HTTPException(status_code=400, detail=str(e))
890+
except ValidationError as e:
891+
logger.error(f"Validation error while updating server {server_id}: {e}")
892+
raise HTTPException(status_code=422, detail=ErrorFormatter.format_validation_error(e))
893+
except IntegrityError as e:
894+
logger.error(f"Integrity error while updating server {server_id}: {e}")
895+
raise HTTPException(status_code=409, detail=ErrorFormatter.format_database_error(e))
884896

885897

886898
@server_router.post("/{server_id}/toggle", response_model=ServerRead)
@@ -1403,7 +1415,7 @@ async def create_resource(
14031415
ResourceRead: The created resource.
14041416
14051417
Raises:
1406-
HTTPException: On conflict or validation errors.
1418+
HTTPException: On conflict or validation errors or IntegrityError.
14071419
"""
14081420
logger.debug(f"User {user} is creating a new resource")
14091421
try:
@@ -1413,8 +1425,13 @@ async def create_resource(
14131425
raise HTTPException(status_code=409, detail=str(e))
14141426
except ResourceError as e:
14151427
raise HTTPException(status_code=400, detail=str(e))
1416-
1417-
1428+
except ValidationError as e:
1429+
logger.error(f"Validation error while creating resource {uri}: {e}")
1430+
raise HTTPException(status_code=422, detail=ErrorFormatter.format_validation_error(e))
1431+
except IntegrityError as e:
1432+
logger.error(f"Integrity error while creating resource {uri}: {e}")
1433+
raise HTTPException(status_code=409, detail=ErrorFormatter.format_database_error(e))
1434+
14181435
@resource_router.get("/{uri:path}")
14191436
async def read_resource(uri: str, db: Session = Depends(get_db), user: str = Depends(require_auth)) -> ResourceContent:
14201437
"""
@@ -1470,6 +1487,12 @@ async def update_resource(
14701487
result = await resource_service.update_resource(db, uri, resource)
14711488
except ResourceNotFoundError as e:
14721489
raise HTTPException(status_code=404, detail=str(e))
1490+
except ValidationError as e:
1491+
logger.error(f"Validation error while updating resource {uri}: {e}")
1492+
raise HTTPException(status_code=422, detail=ErrorFormatter.format_validation_error(e))
1493+
except IntegrityError as e:
1494+
logger.error(f"Integrity error while updating resource {uri}: {e}")
1495+
raise HTTPException(status_code=409, detail=ErrorFormatter.format_database_error(e))
14731496
await invalidate_resource_cache(uri)
14741497
return result
14751498

mcpgateway/services/server_service.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,10 @@ async def update_server(self, db: Session, server_id: str, server_update: Server
503503
db.rollback()
504504
logger.error(f"IntegrityErrors in group: {ie}")
505505
raise ie
506+
except ServerNameConflictError as snce:
507+
db.rollback()
508+
logger.error(f"Server name conflict: {snce}")
509+
raise snce
506510
except Exception as e:
507511
db.rollback()
508512
raise ServerError(f"Failed to update server: {str(e)}")

mcpgateway/static/admin.js

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4774,6 +4774,53 @@ async function handleEditToolFormSubmit(event) {
47744774
}
47754775
}
47764776

4777+
async function handleEditServerFormSubmit(e) {
4778+
e.preventDefault();
4779+
const form = e.target;
4780+
const formData = new FormData(form);
4781+
4782+
try {
4783+
// Validate inputs
4784+
const name = formData.get("name");
4785+
const nameValidation = validateInputName(name, "server");
4786+
if (!nameValidation.valid) {
4787+
throw new Error(nameValidation.error);
4788+
}
4789+
4790+
// Save CodeMirror editors' contents if present
4791+
if (window.promptToolHeadersEditor) {
4792+
window.promptToolHeadersEditor.save();
4793+
}
4794+
if (window.promptToolSchemaEditor) {
4795+
window.promptToolSchemaEditor.save();
4796+
}
4797+
4798+
const isInactiveCheckedBool = isInactiveChecked("servers");
4799+
formData.append("is_inactive_checked", isInactiveCheckedBool);
4800+
4801+
// Submit via fetch
4802+
const response = await fetch(form.action, {
4803+
method: "POST",
4804+
body: formData,
4805+
});
4806+
4807+
const result = await response.json();
4808+
if (!result.success) {
4809+
throw new Error(result.message || "An error occurred");
4810+
}
4811+
// Only redirect on success
4812+
else {
4813+
// Redirect to the appropriate page based on inactivity checkbox
4814+
const redirectUrl = isInactiveCheckedBool
4815+
? `${window.ROOT_PATH}/admin?include_inactive=true#catalog`
4816+
: `${window.ROOT_PATH}/admin#catalog`;
4817+
window.location.href = redirectUrl;
4818+
}
4819+
} catch (error) {
4820+
console.error("Error:", error);
4821+
showErrorMessage(error.message);
4822+
}
4823+
}
47774824
// ===================================================================
47784825
// ENHANCED FORM VALIDATION for All Forms
47794826
// ===================================================================
@@ -5318,6 +5365,16 @@ function setupFormHandlers() {
53185365
serverForm.addEventListener("submit", handleServerFormSubmit);
53195366
}
53205367

5368+
const editServerForm = safeGetElement("edit-server-form");
5369+
if (editServerForm) {
5370+
editServerForm.addEventListener("submit", handleEditServerFormSubmit);
5371+
editServerForm.addEventListener("click", () => {
5372+
if (getComputedStyle(editServerForm).display !== "none") {
5373+
refreshEditors();
5374+
}
5375+
});
5376+
}
5377+
53215378
const editResourceForm = safeGetElement("edit-resource-form");
53225379
if (editResourceForm) {
53235380
editResourceForm.addEventListener("submit", () => {

0 commit comments

Comments
 (0)