diff --git a/frappe/api/__init__.py b/frappe/api/__init__.py index b0e08bb255..9dc4ba63ac 100644 --- a/frappe/api/__init__.py +++ b/frappe/api/__init__.py @@ -60,4 +60,5 @@ API_URL_MAP = Map( Submount("/api/v2", v2_rules), ], strict_slashes=False, # Allows skipping trailing slashes + merge_slashes=False, ) diff --git a/frappe/api/utils.py b/frappe/api/utils.py index 38680dcdf7..fcca8d43d7 100644 --- a/frappe/api/utils.py +++ b/frappe/api/utils.py @@ -48,6 +48,7 @@ def update_doc(doctype: str, name: str): def delete_doc(doctype: str, name: str): + # TODO: child doc handling frappe.delete_doc(doctype, name, ignore_missing=False) frappe.response.http_status_code = 202 return "ok" diff --git a/frappe/api/v1.py b/frappe/api/v1.py index fcf8b80b8e..8aefd0f6f4 100644 --- a/frappe/api/v1.py +++ b/frappe/api/v1.py @@ -54,11 +54,11 @@ def get_request_form_data(): url_rules = [ - Rule("/method/", endpoint=handle_rpc_call), - Rule("/resource/", methods=["GET"], endpoint=document_list), - Rule("/resource/", methods=["POST"], endpoint=create_doc), - Rule("/resource//", methods=["GET"], endpoint=read_doc), - Rule("/resource//", methods=["PUT"], endpoint=update_doc), - Rule("/resource//", methods=["DELETE"], endpoint=delete_doc), - Rule("/resource//", methods=["POST"], endpoint=execute_doc_method), + Rule("/method/", endpoint=handle_rpc_call), + Rule("/resource/", methods=["GET"], endpoint=document_list), + Rule("/resource/", methods=["POST"], endpoint=create_doc), + Rule("/resource///", methods=["GET"], endpoint=read_doc), + Rule("/resource///", methods=["PUT"], endpoint=update_doc), + Rule("/resource///", methods=["DELETE"], endpoint=delete_doc), + Rule("/resource///", methods=["POST"], endpoint=execute_doc_method), ] diff --git a/frappe/api/v2.py b/frappe/api/v2.py index 513d7b8d6a..b8dc192308 100644 --- a/frappe/api/v2.py +++ b/frappe/api/v2.py @@ -42,15 +42,17 @@ def execute_doc_method(doctype: str, name: str, method: str | None = None): url_rules = [ - Rule("/method/", endpoint=handle_rpc_call), - Rule("/method//", endpoint=handle_rpc_call), - Rule("/resource/", methods=["GET"], endpoint=document_list), - Rule("/resource/", methods=["POST"], endpoint=create_doc), - Rule("/resource//", methods=["GET"], endpoint=read_doc), - Rule("/resource//", methods=["PUT"], endpoint=update_doc), - Rule("/resource//", methods=["DELETE"], endpoint=delete_doc), + Rule("/method/", endpoint=handle_rpc_call), + Rule("/method//", endpoint=handle_rpc_call), + Rule("/resource/", methods=["GET"], endpoint=document_list), + # TODO: bulk insert with array + Rule("/resource/", methods=["POST"], endpoint=create_doc), + # TODO: get_value + Rule("/resource///", methods=["GET"], endpoint=read_doc), + Rule("/resource///", methods=["PUT"], endpoint=update_doc), + Rule("/resource///", methods=["DELETE"], endpoint=delete_doc), Rule( - "/resource///", + "/resource///method//", methods=["GET", "POST"], endpoint=execute_doc_method, ), diff --git a/frappe/integrations/doctype/connected_app/test_connected_app.py b/frappe/integrations/doctype/connected_app/test_connected_app.py index 88441db6b2..49ed6236ff 100644 --- a/frappe/integrations/doctype/connected_app/test_connected_app.py +++ b/frappe/integrations/doctype/connected_app/test_connected_app.py @@ -126,7 +126,7 @@ class TestConnectedApp(FrappeTestCase): def delete_if_exists(attribute): doc = getattr(self, attribute, None) if doc: - doc.delete() + doc.delete(force=True) delete_if_exists("token_cache") delete_if_exists("connected_app")