softwareview.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. import json
  2. from django.http import HttpResponse
  3. from rest_framework.response import Response
  4. from rest_framework.views import APIView
  5. from TestLaboratory.settings import SOFTWARE_ROOT, HTTP_HEAD
  6. from apps.file.models import FileManager
  7. from apps.log.models import get_log, gen_log
  8. from apps.software.models import Software
  9. from django.http.request import QueryDict
  10. from apps.user.middleware.rolecontrol import RoleControl
  11. class SoftwareView(APIView):
  12. # 登录权限验证
  13. authentication_classes = []
  14. # view software
  15. @staticmethod
  16. @RoleControl
  17. def get(request, software_id, *args, **kwargs):
  18. software = Software.objects.filter(id=software_id, delete=False)
  19. if not software:
  20. return HttpResponse(status=404, content='软件已删除或不存在')
  21. software = software[0]
  22. try:
  23. versions = []
  24. for version in software.version_set.filter(delete=False):
  25. version_fid = version.version_file
  26. file_path = FileManager.objects.filter(id=version_fid)[0].path
  27. versions.append({
  28. 'id': version.id, 'version': version.number,
  29. 'file': file_path.split('/')[-1],
  30. 'file_url': HTTP_HEAD+SOFTWARE_ROOT+file_path,
  31. 'create_time': version.create_time, 'update_time': version.update_time
  32. })
  33. task_num = 0
  34. if software.testplan_set.filter(delete=False):
  35. for plan in software.testplan_set.filter(delete=False):
  36. task_num += len(plan.testtask_set.filter(delete=False))
  37. software_info = {'name': software.name, 'type': software.type, 'create_time': software.create_time,
  38. 'update_time': software.update_time,
  39. 'versions': versions,
  40. 'case_num': len(software.testcase_set.filter(delete=False)),
  41. 'task_num': task_num}
  42. except:
  43. return HttpResponse(status=500, content='查询失败')
  44. executor, action, method = get_log(request)
  45. gen_log(action, "测试目标", software.name, method, executor)
  46. return Response(software_info)
  47. # edit software
  48. @staticmethod
  49. @RoleControl
  50. def put(request, software_id, *args, **kwargs):
  51. software = Software.objects.filter(id=software_id, delete=False)
  52. if not software:
  53. return HttpResponse(status=404, content='软件已删除或不存在')
  54. software = software[0]
  55. name = request.POST.get('name')
  56. software_type = request.POST.get('type')
  57. if not name:
  58. return HttpResponse(status=500, content='软件名不能为空')
  59. if name == software.name and software_type == software.type:
  60. return HttpResponse(status=500, content='未监测到软件名称及类型变化,编辑不保存')
  61. software.name = name
  62. software.type = software_type
  63. software.save()
  64. # print(software)
  65. executor, action, method = get_log(request)
  66. gen_log(action, "测试目标", software.name, method, executor)
  67. return HttpResponse(status=200, content='编辑已保存')
  68. # delete software
  69. @staticmethod
  70. @RoleControl
  71. def delete(request, software_id, *args, **kwargs):
  72. software = Software.objects.filter(id=software_id, delete=False)
  73. if not software:
  74. return HttpResponse(status=404, content='软件{}已删除或不存在'.format(software_id))
  75. software = software[0]
  76. if software.version_set.exists():
  77. for version in software.version_set.filter():
  78. version_fid = version.version_file
  79. file_version = FileManager.objects.filter(id=version_fid)[0]
  80. file_version.delete = True
  81. file_version.save()
  82. # 删除测试计划
  83. plan_set = software.testplan_set.filter(delete=False)
  84. if plan_set:
  85. for plan in plan_set:
  86. task_set = plan.testtask_set.filter(delete=False)
  87. if task_set:
  88. for task in task_set:
  89. task.delete = True
  90. task.save()
  91. plan.delete = True
  92. plan.save()
  93. version.delete = True
  94. version.save()
  95. software.delete = True
  96. software.save()
  97. executor, action, method = get_log(request)
  98. gen_log(action, "测试目标", software.name, method, executor)
  99. return HttpResponse(status=200, content='删除完成')