Просмотр исходного кода

Improve script output serialization

Jeremy Stretch 6 лет назад
Родитель
Сommit
93d28e6a72
2 измененных файлов с 24 добавлено и 5 удалено
  1. 16 0
      netbox/extras/api/serializers.py
  2. 8 5
      netbox/extras/api/views.py

+ 16 - 0
netbox/extras/api/serializers.py

@@ -230,6 +230,22 @@ class ScriptInputSerializer(serializers.Serializer):
     commit = serializers.BooleanField()
 
 
+class ScriptLogMessageSerializer(serializers.Serializer):
+    status = serializers.SerializerMethodField(read_only=True)
+    message = serializers.SerializerMethodField(read_only=True)
+
+    def get_status(self, instance):
+        return LOG_LEVEL_CODES.get(instance[0])
+
+    def get_message(self, instance):
+        return instance[1]
+
+
+class ScriptOutputSerializer(serializers.Serializer):
+    log = ScriptLogMessageSerializer(many=True, read_only=True)
+    output = serializers.CharField(read_only=True)
+
+
 #
 # Change logging
 #

+ 8 - 5
netbox/extras/api/views.py

@@ -262,13 +262,16 @@ class ScriptViewSet(ViewSet):
         Run a Script identified as "<module>.<script>".
         """
         script = self._get_script(pk)()
-        serializer = serializers.ScriptInputSerializer(data=request.data)
+        input_serializer = serializers.ScriptInputSerializer(data=request.data)
 
-        if serializer.is_valid():
-            script.run(serializer.data['data'])
-            return Response(script.log)
+        if input_serializer.is_valid():
+            output = script.run(input_serializer.data['data'])
+            script.output = output
+            output_serializer = serializers.ScriptOutputSerializer(script)
 
-        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
+            return Response(output_serializer.data)
+
+        return Response(input_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
 
 
 #