sample_center.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. # coding=utf-8
  2. """
  3. 样本中心知识库对接视图
  4. 提供样本中心知识库查询、批量入库等功能
  5. """
  6. import uuid_utils.compat as uuid
  7. from django.utils.translation import gettext as _
  8. from rest_framework.request import Request
  9. from rest_framework.views import APIView
  10. from common.auth import TokenAuth
  11. from common.exception.app_exception import AppApiException
  12. from common.result import result
  13. from knowledge.services.sample_center_client import get_sample_center_client
  14. class SampleCenterView(APIView):
  15. """样本中心知识库对接"""
  16. authentication_classes = [TokenAuth]
  17. class ListKnowledgeBases(APIView):
  18. """查询样本中心知识库列表"""
  19. authentication_classes = [TokenAuth]
  20. def get(self, request: Request):
  21. page = int(request.query_params.get('page', 1))
  22. page_size = int(request.query_params.get('page_size', 20))
  23. base_url = request.query_params.get('base_url', '')
  24. app_id = request.query_params.get('app_id', '')
  25. app_secret = request.query_params.get('app_secret', '')
  26. if not all([base_url, app_id, app_secret]):
  27. raise AppApiException(400, _('base_url, app_id, app_secret are required'))
  28. client = get_sample_center_client(
  29. base_url=base_url,
  30. app_id=app_id,
  31. app_secret=app_secret,
  32. )
  33. data = client.list_knowledge_bases(page=page, page_size=page_size)
  34. return result.success(data)
  35. class GetKnowledgeBase(APIView):
  36. """查询样本中心知识库详情"""
  37. authentication_classes = [TokenAuth]
  38. def get(self, request: Request):
  39. kb_id = request.query_params.get('kb_id', '')
  40. base_url = request.query_params.get('base_url', '')
  41. app_id = request.query_params.get('app_id', '')
  42. app_secret = request.query_params.get('app_secret', '')
  43. if not all([kb_id, base_url, app_id, app_secret]):
  44. raise AppApiException(400, _('kb_id, base_url, app_id, app_secret are required'))
  45. client = get_sample_center_client(
  46. base_url=base_url,
  47. app_id=app_id,
  48. app_secret=app_secret,
  49. )
  50. data = client.get_knowledge_base(kb_id)
  51. return result.success(data)
  52. class BatchImport(APIView):
  53. """提交批量入库任务"""
  54. authentication_classes = [TokenAuth]
  55. def post(self, request: Request):
  56. kb_id = request.data.get('kb_id', '')
  57. base_url = request.data.get('base_url', '')
  58. app_id = request.data.get('app_id', '')
  59. app_secret = request.data.get('app_secret', '')
  60. parents = request.data.get('parents', [])
  61. children = request.data.get('children', [])
  62. callback_url = request.data.get('callback_url', '')
  63. if not all([kb_id, base_url, app_id, app_secret, parents]):
  64. raise AppApiException(400, _('kb_id, base_url, app_id, app_secret, parents are required'))
  65. task_no = f"IMP{uuid.uuid4().hex[:16].upper()}"
  66. client = get_sample_center_client(
  67. base_url=base_url,
  68. app_id=app_id,
  69. app_secret=app_secret,
  70. )
  71. data = client.batch_import(
  72. kb_id=kb_id,
  73. task_no=task_no,
  74. parents=parents,
  75. children=children,
  76. callback_url=callback_url,
  77. )
  78. return result.success(data)
  79. class GetImportTask(APIView):
  80. """查询批量入库任务状态"""
  81. authentication_classes = [TokenAuth]
  82. def get(self, request: Request):
  83. task_id = request.query_params.get('task_id', '')
  84. base_url = request.query_params.get('base_url', '')
  85. app_id = request.query_params.get('app_id', '')
  86. app_secret = request.query_params.get('app_secret', '')
  87. if not all([task_id, base_url, app_id, app_secret]):
  88. raise AppApiException(400, _('task_id, base_url, app_id, app_secret are required'))
  89. client = get_sample_center_client(
  90. base_url=base_url,
  91. app_id=app_id,
  92. app_secret=app_secret,
  93. )
  94. data = client.get_import_task(task_id)
  95. return result.success(data)