seitime-frappe/frappe/desk/treeview.py
Ankush Menat 81b37cb7d2
refactor: clean up code to py310 supported features (#17367)
refactor: clean up code to py39+ supported syntax

- f-strings instead of format
- latest typing support instead of pre 3.9 TitleCase
- remove UTF-8 declarations.
- many more changes

Powered by https://github.com/asottile/pyupgrade/ + manual cleanups
2022-07-01 11:51:05 +05:30

84 lines
2 KiB
Python

# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# License: MIT. See LICENSE
import frappe
from frappe import _
@frappe.whitelist()
def get_all_nodes(doctype, label, parent, tree_method, **filters):
"""Recursively gets all data from tree nodes"""
if "cmd" in filters:
del filters["cmd"]
filters.pop("data", None)
tree_method = frappe.get_attr(tree_method)
if tree_method not in frappe.whitelisted:
frappe.throw(_("Not Permitted"), frappe.PermissionError)
data = tree_method(doctype, parent, **filters)
out = [dict(parent=label, data=data)]
if "is_root" in filters:
del filters["is_root"]
to_check = [d.get("value") for d in data if d.get("expandable")]
while to_check:
parent = to_check.pop()
data = tree_method(doctype, parent, is_root=False, **filters)
out.append(dict(parent=parent, data=data))
for d in data:
if d.get("expandable"):
to_check.append(d.get("value"))
return out
@frappe.whitelist()
def get_children(doctype, parent="", **filters):
return _get_children(doctype, parent)
def _get_children(doctype, parent="", ignore_permissions=False):
parent_field = "parent_" + doctype.lower().replace(" ", "_")
filters = [[f"ifnull(`{parent_field}`,'')", "=", parent], ["docstatus", "<", 2]]
meta = frappe.get_meta(doctype)
return frappe.get_list(
doctype,
fields=[
"name as value",
"{} as title".format(meta.get("title_field") or "name"),
"is_group as expandable",
],
filters=filters,
order_by="name",
ignore_permissions=ignore_permissions,
)
@frappe.whitelist()
def add_node():
args = make_tree_args(**frappe.form_dict)
doc = frappe.get_doc(args)
doc.save()
def make_tree_args(**kwarg):
kwarg.pop("cmd", None)
doctype = kwarg["doctype"]
parent_field = "parent_" + doctype.lower().replace(" ", "_")
if kwarg["is_root"] == "false":
kwarg["is_root"] = False
if kwarg["is_root"] == "true":
kwarg["is_root"] = True
kwarg.update({parent_field: kwarg.get("parent") or kwarg.get(parent_field)})
return frappe._dict(kwarg)