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()
-
-
-