| # Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors |
| # MIT License. See license.txt |
| |
| from __future__ import unicode_literals |
| import frappe |
| from frappe import _ |
| |
| @frappe.whitelist() |
| def get_all_nodes(parent, parent_name, method, company): |
| '''Recursively gets all data from nodes''' |
| method = frappe.get_attr(method) |
| |
| if not method in frappe.whitelisted: |
| frappe.throw(_('Not Permitted'), frappe.PermissionError) |
| |
| data = method(parent, company) |
| result = [dict(parent=parent, parent_name=parent_name, data=data)] |
| |
| nodes_to_expand = [{'id': d.get('id'), 'name': d.get('name')} for d in data if d.get('expandable')] |
| |
| while nodes_to_expand: |
| parent = nodes_to_expand.pop(0) |
| data = method(parent.get('id'), company) |
| result.append(dict(parent=parent.get('id'), parent_name=parent.get('name'), data=data)) |
| for d in data: |
| if d.get('expandable'): |
| nodes_to_expand.append({'id': d.get('id'), 'name': d.get('name')}) |
| |
| return result |