Explorar el Código

Improve script output serialization

Jeremy Stretch hace 6 años
padre
commit
93d28e6a72
Se han modificado 2 ficheros con 24 adiciones y 5 borrados
  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()
     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
 # Change logging
 #
 #

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

@@ -262,13 +262,16 @@ class ScriptViewSet(ViewSet):
         Run a Script identified as "<module>.<script>".
         Run a Script identified as "<module>.<script>".
         """
         """
         script = self._get_script(pk)()
         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)
 
 
 
 
 #
 #