mirror of https://github.com/jumpserver/jumpserver
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.7 KiB
56 lines
1.7 KiB
from django.utils.translation import ugettext as _
|
|
|
|
from common.tree import TreeNode
|
|
from orgs.models import Organization
|
|
from ..models import Application
|
|
|
|
__all__ = ['SerializeApplicationToTreeNodeMixin']
|
|
|
|
|
|
class SerializeApplicationToTreeNodeMixin:
|
|
@staticmethod
|
|
def filter_organizations(applications):
|
|
organization_ids = set(applications.values_list('org_id', flat=True))
|
|
organizations = [Organization.get_instance(org_id) for org_id in organization_ids]
|
|
organizations.sort(key=lambda x: x.name)
|
|
return organizations
|
|
|
|
@staticmethod
|
|
def create_root_node():
|
|
name = _('My applications')
|
|
node = TreeNode(**{
|
|
'id': 'applications',
|
|
'name': name,
|
|
'title': name,
|
|
'pId': '',
|
|
'open': True,
|
|
'isParent': True,
|
|
'meta': {
|
|
'type': 'root'
|
|
}
|
|
})
|
|
return node
|
|
|
|
def serialize_applications_with_org(self, applications):
|
|
if not applications:
|
|
return []
|
|
root_node = self.create_root_node()
|
|
tree_nodes = [root_node]
|
|
organizations = self.filter_organizations(applications)
|
|
|
|
for i, org in enumerate(organizations):
|
|
# 组织节点
|
|
org_node = org.as_tree_node(pid=root_node.id)
|
|
tree_nodes.append(org_node)
|
|
org_applications = applications.filter(org_id=org.id)
|
|
count = org_applications.count()
|
|
org_node.name += '({})'.format(count)
|
|
|
|
# 各应用节点
|
|
apps_nodes = Application.create_tree_nodes(
|
|
queryset=org_applications, root_node=org_node,
|
|
show_empty=False
|
|
)
|
|
tree_nodes += apps_nodes
|
|
return tree_nodes
|