blob: fb58a5d586798a6cd56c1d198b1c8a2b85480f1e [file] [log] [blame]
Rucha Mahabal6f799d172021-07-21 23:19:47 +05301# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors
2# MIT License. See license.txt
3
4from __future__ import unicode_literals
5import frappe
6from frappe import _
7
8@frappe.whitelist()
9def get_all_nodes(parent, parent_name, method, company):
10 '''Recursively gets all data from nodes'''
11 method = frappe.get_attr(method)
12
Rucha Mahabal78f50a92021-07-25 20:28:01 +053013 if method not in frappe.whitelisted:
Rucha Mahabal6f799d172021-07-21 23:19:47 +053014 frappe.throw(_('Not Permitted'), frappe.PermissionError)
15
16 data = method(parent, company)
17 result = [dict(parent=parent, parent_name=parent_name, data=data)]
18
19 nodes_to_expand = [{'id': d.get('id'), 'name': d.get('name')} for d in data if d.get('expandable')]
20
21 while nodes_to_expand:
22 parent = nodes_to_expand.pop(0)
23 data = method(parent.get('id'), company)
24 result.append(dict(parent=parent.get('id'), parent_name=parent.get('name'), data=data))
25 for d in data:
26 if d.get('expandable'):
27 nodes_to_expand.append({'id': d.get('id'), 'name': d.get('name')})
28
29 return result