Przeglądaj źródła

Merge pull request #18451 from frappe/mergify/bp/version-14-hotfix/pr-18443

fix(frappe.client): delete child doc via parent (backport #18443)
version-14
Ankush Menat 2 lat temu
committed by GitHub
rodzic
commit
b79b2d39a6
Nie znaleziono w bazie danych klucza dla tego podpisu ID klucza GPG: 4AEE18F83AFDEB23
2 zmienionych plików z 42 dodań i 5 usunięć
  1. +22
    -1
      frappe/client.py
  2. +20
    -4
      frappe/tests/test_client.py

+ 22
- 1
frappe/client.py Wyświetl plik

@@ -270,7 +270,7 @@ def delete(doctype, name):

:param doctype: DocType of the document to be deleted
:param name: name of the document to be deleted"""
frappe.delete_doc(doctype, name, ignore_missing=False)
delete_doc(doctype, name)


@frappe.whitelist(methods=["POST", "PUT"])
@@ -462,3 +462,24 @@ def insert_doc(doc) -> "Document":
return parent

return frappe.get_doc(doc).insert()


def delete_doc(doctype, name):
"""Deletes document
if doctype is a child table, then deletes the child record using the parent doc
so that the parent doc's `on_update` is called
"""

if frappe.is_table(doctype):
values = frappe.db.get_value(doctype, name, ["parenttype", "parent", "parentfield"])
if not values:
raise frappe.DoesNotExistError
parenttype, parent, parentfield = values
parent = frappe.get_doc(parenttype, parent)
for row in parent.get(parentfield):
if row.name == name:
parent.remove(row)
parent.save()
break
else:
frappe.delete_doc(doctype, name, ignore_missing=False)

+ 20
- 4
frappe/tests/test_client.py Wyświetl plik

@@ -1,5 +1,7 @@
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors

from unittest.mock import patch

import frappe
from frappe.tests.utils import FrappeTestCase

@@ -15,12 +17,26 @@ class TestClient(FrappeTestCase):

def test_delete(self):
from frappe.client import delete
from frappe.desk.doctype.note.note import Note

todo = frappe.get_doc(dict(doctype="ToDo", description="description")).insert()
delete("ToDo", todo.name)
note = frappe.get_doc(
doctype="Note",
title=frappe.generate_hash(length=8),
content="test",
seen_by=[{"user": "Administrator"}],
).insert()

child_row_name = note.seen_by[0].name

with patch.object(Note, "save") as save:
delete("Note Seen By", child_row_name)
save.assert_called()

delete("Note", note.name)

self.assertFalse(frappe.db.exists("ToDo", todo.name))
self.assertRaises(frappe.DoesNotExistError, delete, "ToDo", todo.name)
self.assertFalse(frappe.db.exists("Note", note.name))
self.assertRaises(frappe.DoesNotExistError, delete, "Note", note.name)
self.assertRaises(frappe.DoesNotExistError, delete, "Note Seen By", child_row_name)

def test_http_valid_method_access(self):
from frappe.client import delete


Ładowanie…
Anuluj
Zapisz