-
Notifications
You must be signed in to change notification settings - Fork 2.8k
Expand file tree
/
Copy pathknowledge_version.py
More file actions
108 lines (89 loc) · 5.25 KB
/
knowledge_version.py
File metadata and controls
108 lines (89 loc) · 5.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# coding=utf-8
"""
@project: MaxKB
@Author:虎虎
@file: KnowledgeVersionSerializer.py
@date:2025/11/28 18:00
@desc:
"""
from typing import Dict
from django.db.models import QuerySet
from rest_framework import serializers
from django.utils.translation import gettext_lazy as _
from common.db.search import page_search
from common.exception.app_exception import AppApiException
from knowledge.models import KnowledgeWorkflowVersion, Knowledge
class KnowledgeWorkflowVersionEditSerializer(serializers.Serializer):
name = serializers.CharField(required=False, max_length=128, allow_null=True, allow_blank=True,
label=_("Version Name"))
class KnowledgeVersionModelSerializer(serializers.ModelSerializer):
class Meta:
model = KnowledgeWorkflowVersion
fields = ['id', 'name', 'workspace_id', 'knowledge_id', 'work_flow', 'publish_user_id', 'publish_user_name',
'create_time',
'update_time']
class KnowledgeWorkflowVersionQuerySerializer(serializers.Serializer):
knowledge_id = serializers.UUIDField(required=True, label=_("Knowledge ID"))
name = serializers.CharField(required=False, allow_null=True, allow_blank=True,
label=_("summary"))
class KnowledgeWorkflowVersionSerializer(serializers.Serializer):
workspace_id = serializers.CharField(required=False, label=_("Workspace ID"))
class Query(serializers.Serializer):
workspace_id = serializers.CharField(required=False, allow_null=True, allow_blank=True, label=_("Workspace ID"))
def get_query_set(self, query):
query_set = QuerySet(KnowledgeWorkflowVersion).filter(knowledge_id=query.get('knowledge_id'))
if 'name' in query and query.get('name') is not None:
query_set = query_set.filter(name__contains=query.get('name'))
if 'workspace_id' in self.data and self.data.get('workspace_id') is not None:
query_set = query_set.filter(workspace_id=self.data.get('workspace_id'))
return query_set.order_by("-create_time")
def list(self, query, with_valid=True):
if with_valid:
self.is_valid(raise_exception=True)
KnowledgeWorkflowVersionQuerySerializer(data=query).is_valid(raise_exception=True)
query_set = self.get_query_set(query)
return [KnowledgeVersionModelSerializer(v).data for v in query_set]
def page(self, query, current_page, page_size, with_valid=True):
if with_valid:
self.is_valid(raise_exception=True)
return page_search(current_page, page_size,
self.get_query_set(query),
post_records_handler=lambda v: KnowledgeVersionModelSerializer(v).data)
class Operate(serializers.Serializer):
workspace_id = serializers.CharField(required=False, allow_null=True, allow_blank=True, label=_("Workspace ID"))
knowledge_id = serializers.UUIDField(required=True, label=_("Knowledge ID"))
knowledge_version_id = serializers.UUIDField(required=True,
label=_("Knowledge version ID"))
def is_valid(self, *, raise_exception=False):
super().is_valid(raise_exception=True)
workspace_id = self.data.get('workspace_id')
query_set = QuerySet(Knowledge).filter(id=self.data.get('knowledge_id'))
if workspace_id:
query_set = query_set.filter(workspace_id=workspace_id)
if not query_set.exists():
raise AppApiException(500, _('Knowledge id does not exist'))
def one(self, with_valid=True):
if with_valid:
self.is_valid(raise_exception=True)
knowledge_version = QuerySet(KnowledgeWorkflowVersion).filter(knowledge_id=self.data.get('knowledge_id'),
id=self.data.get(
'knowledge_version_id')).first()
if knowledge_version is not None:
return KnowledgeVersionModelSerializer(knowledge_version).data
else:
raise AppApiException(500, _('Workflow version does not exist'))
def edit(self, instance: Dict, with_valid=True):
if with_valid:
self.is_valid(raise_exception=True)
KnowledgeWorkflowVersionEditSerializer(data=instance).is_valid(raise_exception=True)
knowledge_version = QuerySet(KnowledgeWorkflowVersion).filter(knowledge_id=self.data.get('knowledge_id'),
id=self.data.get(
'knowledge_version_id')).first()
if knowledge_version is not None:
name = instance.get('name', None)
if name is not None and len(name) > 0:
knowledge_version.name = name
knowledge_version.save()
return KnowledgeVersionModelSerializer(knowledge_version).data
else:
raise AppApiException(500, _('Workflow version does not exist'))