diff --git a/frappe/core/doctype/doctype/test_doctype.py b/frappe/core/doctype/doctype/test_doctype.py index dc6d14b451..bc9a411ebd 100644 --- a/frappe/core/doctype/doctype/test_doctype.py +++ b/frappe/core/doctype/doctype/test_doctype.py @@ -1,6 +1,9 @@ # -*- coding: utf-8 -*- # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors # License: MIT. See LICENSE +from typing import Dict, List, Optional +import unittest + import frappe import unittest from frappe.core.doctype.doctype.doctype import (UniqueFieldnameError, @@ -507,7 +510,7 @@ class TestDocType(unittest.TestCase): def test_autoincremented_doctype_transition(self): frappe.delete_doc("testy_autoinc_dt") - dt = new_doctype("testy_autoinc_dt", autoincremented=True).insert(ignore_permissions=True) + dt = new_doctype("testy_autoinc_dt", autoname="autoincrement").insert(ignore_permissions=True) dt.autoname = "hash" try: @@ -521,25 +524,31 @@ class TestDocType(unittest.TestCase): dt.delete(ignore_permissions=True) -def new_doctype(name, unique=0, depends_on='', fields=None, autoincremented=False): - doc = frappe.get_doc({ - "doctype": "DocType", - "module": "Core", - "custom": 1, - "fields": [{ - "label": "Some Field", - "fieldname": "some_fieldname", - "fieldtype": "Data", - "unique": unique, - "depends_on": depends_on, - }], - "permissions": [{ - "role": "System Manager", - "read": 1, - }], - "name": name, - "autoname": "autoincrement" if autoincremented else "" - }) +def new_doctype(name, unique: bool = False, depends_on: str = "", fields: Optional[List[Dict]] = None, **kwargs): + doc = frappe.get_doc( + { + "doctype": "DocType", + "module": "Core", + "custom": 1, + "fields": [ + { + "label": "Some Field", + "fieldname": "some_fieldname", + "fieldtype": "Data", + "unique": unique, + "depends_on": depends_on, + } + ], + "permissions": [ + { + "role": "System Manager", + "read": 1, + } + ], + "name": name, + **kwargs, + } + ) if fields: for f in fields: diff --git a/frappe/model/document.py b/frappe/model/document.py index 15e9c28d83..1d47957f67 100644 --- a/frappe/model/document.py +++ b/frappe/model/document.py @@ -3,6 +3,8 @@ import hashlib import json import time +from typing import List + from werkzeug.exceptions import NotFound import frappe @@ -21,8 +23,6 @@ from frappe.core.doctype.server_script.server_script_utils import run_server_scr from frappe.utils.data import get_absolute_url -# once_only validation -# methods def get_doc(*args, **kwargs): """returns a frappe.model.Document object. @@ -179,7 +179,7 @@ class Document(BaseDocument): if not self.has_permission(permtype): self.raise_no_permission_to(permlevel or permtype) - def has_permission(self, permtype="read", verbose=False): + def has_permission(self, permtype="read", verbose=False) -> bool: """Call `frappe.has_permission` if `self.flags.ignore_permissions` is not set. @@ -195,8 +195,15 @@ class Document(BaseDocument): frappe.flags.error_message = _('Insufficient Permission for {0}').format(self.doctype) raise frappe.PermissionError - def insert(self, ignore_permissions=None, ignore_links=None, ignore_if_duplicate=False, - ignore_mandatory=None, set_name=None, set_child_names=True): + def insert( + self, + ignore_permissions=None, + ignore_links=None, + ignore_if_duplicate=False, + ignore_mandatory=None, + set_name=None, + set_child_names=True, + ) -> "Document": """Insert the document in the database (as a new document). This will check for user permissions and execute `before_insert`, `validate`, `on_update`, `after_insert` methods if they are written. @@ -276,7 +283,7 @@ class Document(BaseDocument): """Wrapper for _save""" return self._save(*args, **kwargs) - def _save(self, ignore_permissions=None, ignore_version=None): + def _save(self, ignore_permissions=None, ignore_version=None) -> "Document": """Save the current document in the database in the **DocType**'s table or `tabSingles` (for single types). @@ -498,8 +505,7 @@ class Document(BaseDocument): self._save_passwords() self.validate_workflow() - children = self.get_all_children() - for d in children: + for d in self.get_all_children(): d._validate_data_fields() d._validate_selects() d._validate_non_negative() @@ -840,7 +846,7 @@ class Document(BaseDocument): frappe.throw(_("Cannot link cancelled document: {0}").format(msg), frappe.CancelledLinkError) - def get_all_children(self, parenttype=None): + def get_all_children(self, parenttype=None) -> List["Document"]: """Returns all children documents from **Table** type fields in a list.""" children = [] @@ -1399,6 +1405,3 @@ def execute_action(doctype, name, action, **kwargs): doc.add_comment('Comment', _('Action Failed') + '

' + msg) doc.notify_update() - - -