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
# -*- coding: utf-8 -*-
"""
@File    : debugtalk.py
@Time    : 2023/2/22 15:07
@Author  : geekbing
@LastEditTime : -
@LastEditors : -
@Description : 驱动代码视图
"""
 
from django.core.exceptions import ObjectDoesNotExist
from django.utils.decorators import method_decorator
from django.utils import timezone
from rest_framework.response import Response
from rest_framework.viewsets import GenericViewSet
 
from lunarlink import models
from lunarlink import serializers
from lunarlink.utils import response
from lunarlink.utils.decorator import request_log
from lunarlink.utils.runner import DebugCode
 
 
class DebugTalkView(GenericViewSet):
    """
    DebugTalk update
    """
 
    serializer_class = serializers.DebugTalkSerializer
    queryset = models.Debugtalk.objects
 
    @method_decorator(request_log(level="INFO"))
    def debugtalk(self, request, pk):
        """
        获取debugtalk code
        """
        try:
            queryset = models.Debugtalk.objects.get(project__id=pk)
        except ObjectDoesNotExist:
            return Response(response.DEBUGTALK_NOT_EXISTS)
 
        serializer = self.get_serializer(queryset, many=False)
 
        return Response(serializer.data)
 
    @method_decorator(request_log(level="INFO"))
    def update(self, request):
        """
        编辑debugtalk.py代码并保存
        {
            id: int # debugtalk id
            code: str
        }
        """
 
        try:
            debugtalk_id = request.data["id"]
            debugtalk_code = request.data["code"]
        except KeyError:
            return Response(response.KEY_MISS)
 
        try:
            models.Debugtalk.objects.get(id=debugtalk_id)
            models.Debugtalk.objects.filter(id=debugtalk_id).update(
                code=debugtalk_code,
                updater=request.user.id,
                update_time=timezone.now(),
            )
        except ObjectDoesNotExist:
            return Response(response.DEBUGTALK_NOT_EXISTS)
 
        return Response(response.DEBUGTALK_UPDATE_SUCCESS)
 
    @method_decorator(request_log(level="INFO"))
    def run(self, request):
        """在线运行"""
        try:
            code = request.data["code"]
        except KeyError:
            return Response(response.KEY_MISS)
 
        debug = DebugCode(code)
        debug.run()
        resp = {"msg": debug.resp, "success": True, "code": "0001"}
        return Response(resp)