Files
2019-09-19 15:37:43 +07:00

77 lines
2.2 KiB
Python

from rest_framework import generics, mixins
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework.permissions import IsAuthenticated, IsAdminUser
from rest_framework import serializers
from api.models import Logs, Workspaces
from core import utils
from core import dbutils
from core import common
class LogsSerializer(serializers.ModelSerializer):
class Meta:
model = Logs
fields = [
'cmd',
'output_path',
'std_path',
'module',
'workspace',
'cmd_type',
'chunk',
'delay',
'resources',
'checksum',
]
class LogsView(
generics.ListAPIView,
APIView):
serializer_class = LogsSerializer
permission_classes = (IsAuthenticated, IsAdminUser)
def get_queryset(self):
queryset = Logs.objects.all()
module = self.request.query_params.get('module', None)
workspace = self.request.query_params.get('workspace', None)
cmd = self.request.query_params.get('cmd', None)
raw = self.request.query_params.get('raw', None)
if workspace is not None:
queryset = queryset.filter(workspace=workspace)
if module is not None:
queryset = queryset.filter(module=module)
if cmd is not None:
queryset = queryset.filter(cmd__contains=cmd)
if raw:
return queryset
real_queryset = []
for item in queryset:
if utils.not_empty_file(item.output_path):
real_queryset.append(item)
return real_queryset
def get(self, request, *args, **kwargs):
workspace = self.request.query_params.get('workspace', None)
obj = Workspaces.objects.get(workspace=workspace)
wss = obj.workspaces
content = self.list(request, *args, **kwargs).data
response = []
for log in content:
item = dict(log)
item['output_path'] = item['output_path'].replace(wss, '').strip('/')
item['std_path'] = item['std_path'].replace(wss, '').strip('/')
response.append(item)
return Response({'logs': response})