|
17 | 17 | from sql.engines import ReviewSet, get_engine
|
18 | 18 | from sql.engines.models import ReviewResult
|
19 | 19 | from sql.models import Instance, SqlWorkflow
|
| 20 | +from sql_api.serializers import BaseModelSerializer |
20 | 21 |
|
21 | 22 | logger = logging.getLogger("default")
|
22 | 23 |
|
@@ -69,57 +70,18 @@ class ExecuteCheckResultSerializer(serializers.Serializer):
|
69 | 70 | affected_rows = serializers.IntegerField(read_only=True)
|
70 | 71 |
|
71 | 72 |
|
72 |
| -class SqlWorkflowSerializer(serializers.ModelSerializer): |
| 73 | +class SqlWorkflowSerializer(BaseModelSerializer): |
73 | 74 | """SQL工单"""
|
74 | 75 |
|
75 | 76 | instance_name = serializers.CharField(source="instance.instance_name")
|
76 |
| - |
77 |
| - def __init__(self, *args, **kwargs): |
78 |
| - """ |
79 |
| - ``fields`` 需要保留的字段列表 |
80 |
| - ``exclude`` 需要排除的字段列表 |
81 |
| - """ |
82 |
| - fields = kwargs.pop("fields", None) |
83 |
| - exclude = kwargs.pop("exclude", None) |
84 |
| - super(SqlWorkflowSerializer, self).__init__(*args, **kwargs) |
85 |
| - |
86 |
| - for field_name in set(self.fields.keys()): |
87 |
| - if not any([fields, exclude]): |
88 |
| - break |
89 |
| - if fields and field_name in fields: |
90 |
| - continue |
91 |
| - if exclude and field_name not in exclude: |
92 |
| - continue |
93 |
| - self.fields.pop(field_name, None) |
| 77 | + sql_content = serializers.CharField(source="sqlworkflowcontent.sql_content") |
| 78 | + display_content = serializers.SerializerMethodField() |
94 | 79 |
|
95 | 80 | @staticmethod
|
96 | 81 | def setup_eager_loading(queryset):
|
97 |
| - """ |
98 |
| - Perform necessary eager loading of data. |
99 |
| - https://ses4j.github.io/2015/11/23/optimizing-slow-django-rest-framework-performance/ |
100 |
| - """ |
101 | 82 | queryset = queryset.select_related("instance")
|
102 | 83 | return queryset
|
103 | 84 |
|
104 |
| - @staticmethod |
105 |
| - def rollback_sql(obj): |
106 |
| - try: |
107 |
| - query_engine = get_engine(instance=obj.instance) |
108 |
| - return query_engine.get_rollback(workflow=obj) |
109 |
| - except Exception as msg: |
110 |
| - logger.error(traceback.format_exc()) |
111 |
| - raise serializers.ValidationError({"errors": msg}) |
112 |
| - |
113 |
| - class Meta: |
114 |
| - model = SqlWorkflow |
115 |
| - fields = "__all__" |
116 |
| - |
117 |
| - |
118 |
| -class SqlWorkflowDetailSerializer(SqlWorkflowSerializer): |
119 |
| - instance_name = serializers.CharField(source="instance.instance_name") |
120 |
| - sql_content = serializers.CharField(source="sqlworkflowcontent.sql_content") |
121 |
| - display_content = serializers.SerializerMethodField() |
122 |
| - |
123 | 85 | @extend_schema_field(field=serializers.ListField(child=ReviewResultSerializer()))
|
124 | 86 | def get_display_content(self, obj):
|
125 | 87 | """获取工单详情用于列表展示的内容,区分不同的状态进行转换"""
|
@@ -161,6 +123,15 @@ def get_display_content(self, obj):
|
161 | 123 | rows = obj.sqlworkflowcontent.review_content
|
162 | 124 | return json.loads(rows)
|
163 | 125 |
|
| 126 | + @staticmethod |
| 127 | + def rollback_sql(obj): |
| 128 | + try: |
| 129 | + query_engine = get_engine(instance=obj.instance) |
| 130 | + return query_engine.get_rollback(workflow=obj) |
| 131 | + except Exception as msg: |
| 132 | + logger.error(traceback.format_exc()) |
| 133 | + raise serializers.ValidationError({"errors": msg}) |
| 134 | + |
164 | 135 | class Meta:
|
165 | 136 | model = SqlWorkflow
|
166 | 137 | fields = "__all__"
|
0 commit comments