123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- import datetime
- import json
- import os
- import zipfile
- from django.http import HttpResponse
- from rest_framework.response import Response
- from rest_framework.views import APIView
- from django.forms.models import model_to_dict
- from apps.task.annote.annotate import annotate
- from apps.task.models import RetrievalTask, DataType, Purpose
- import logging
- logger = logging.getLogger('django')
- class TaskView(APIView):
- # execute task
- @staticmethod
- def post(request, task_id, *args, **kwargs):
- task = RetrievalTask.objects.filter(id=task_id, delete=False)
- if not task:
- logger.error('任务已删除或不存在')
- return HttpResponse(status=500, content='任务已删除或不存在')
- task = task[0]
- project = task.project
- if project.delete:
- logger.error('项目已删除或不存在')
- return HttpResponse(status=500, content='项目已删除或不存在')
- if task.state == 2:
- logger.error('任务已执行完成,不能重复执行')
- return HttpResponse(status=500, content='任务已执行完成,不能重复执行')
- file_zip = zipfile.ZipFile(project.project_file, 'r', zipfile.ZIP_DEFLATED)
- py_files = [py_file for py_file in file_zip.namelist() if py_file.endswith('.py')]
- file_zip.extractall(path=os.path.dirname(project.project_file), members=py_files)
- source = project.project_file[:project.project_file.rfind('.')]
- with open("apps/task/annote/datatype_dictionary.json") as file:
- content = file.read()
- lattice = json.loads(content)
- task.state = 1
- task.save()
- data_type_list, purpose_list = annotate(source, lattice)
- task.state = 2
- task.save()
- for data_type in data_type_list:
- datatype = DataType.objects.create(**data_type, task=task)
- data_type['id'] = datatype.id
- for purpose in purpose_list:
- purpose_obj = Purpose.objects.create(**purpose, task=task)
- purpose['id'] = purpose_obj.id
- return Response({
- 'data_type_list': data_type_list,
- 'purpose_list': purpose_list
- })
- # get detail of task
- @staticmethod
- def get(request, task_id, *args, **kwargs):
- task = RetrievalTask.objects.filter(id=task_id, delete=False)
- if not task:
- logger.error('任务已删除或不存在')
- return HttpResponse(status=500, content='任务已删除或不存在')
- task = task[0]
- data_type_info = []
- purpose_info = []
- if task.state == 2:
- data_type_list = task.datatype_set.filter(delete=False)
- for data_type in data_type_list:
- data_type_info.append(model_to_dict(data_type))
- purpose_list = task.purpose_set.filter(delete=False)
- for purpose in purpose_list:
- purpose_info.append(model_to_dict(purpose))
- return Response({
- 'id': task.id,
- 'title': task.title,
- 'description': task.description,
- 'state': task.state,
- 'type': task.type,
- 'data_type_list': data_type_info,
- 'purpose_list': purpose_info
- })
- # edit task
- @staticmethod
- def put(request, task_id, *args, **kwargs):
- title = request.POST.get('title')
- task_type = request.POST.get('type')
- description = request.POST.get('description')
- task = RetrievalTask.objects.filter(id=task_id, delete=False)
- if not task:
- logger.error('任务已删除或不存在')
- return HttpResponse(status=500, content='任务已删除或不存在')
- task = task[0]
- if not title:
- logger.error("任务名称不能为空")
- return HttpResponse(status=500, content='任务名称不能为空')
- if not task_type:
- logger.error("任务类型不能为空")
- return HttpResponse(status=500, content='任务类型不能为空')
- update_time = datetime.datetime.now()
- task.title = title
- task.type = task_type
- task.description = description
- task.update_time = update_time
- task.save()
- return HttpResponse(status=200, content='编辑已保存')
- # delete task
- @staticmethod
- def delete(request, task_id, *args, **kwargs):
- task = RetrievalTask.objects.filter(id=task_id, delete=False)
- if not task:
- logger.error('任务已删除或不存在')
- return HttpResponse(status=500, content='任务已删除或不存在')
- task = task[0]
- task.delete = True
- task.save()
- return HttpResponse(status=200, content='任务已删除')
|