tool.py 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348
  1. # coding=utf-8
  2. from drf_spectacular.types import OpenApiTypes
  3. from drf_spectacular.utils import OpenApiParameter
  4. from common.mixins.api_mixin import APIMixin
  5. from common.result import ResultSerializer, DefaultResultSerializer
  6. from knowledge.serializers.common import BatchSerializer, BatchMoveSerializer
  7. from tools.serializers.tool import ToolModelSerializer, ToolCreateRequest, ToolDebugRequest, ToolEditRequest, \
  8. PylintInstance, AddInternalToolRequest
  9. class ToolCreateResponse(ResultSerializer):
  10. def get_data(self):
  11. return ToolModelSerializer()
  12. class ToolCreateAPI(APIMixin):
  13. @staticmethod
  14. def get_parameters():
  15. return [
  16. OpenApiParameter(
  17. name="workspace_id",
  18. description="工作空间id",
  19. type=OpenApiTypes.STR,
  20. location='path',
  21. required=True,
  22. )
  23. ]
  24. @staticmethod
  25. def get_request():
  26. return ToolCreateRequest
  27. @staticmethod
  28. def get_response():
  29. return ToolCreateResponse
  30. class ToolReadAPI(APIMixin):
  31. @staticmethod
  32. def get_parameters():
  33. return [
  34. OpenApiParameter(
  35. name="workspace_id",
  36. description="工作空间id",
  37. type=OpenApiTypes.STR,
  38. location='path',
  39. required=True,
  40. ),
  41. OpenApiParameter(
  42. name="tool_id",
  43. description="工具id",
  44. type=OpenApiTypes.STR,
  45. location='path',
  46. required=True,
  47. )
  48. ]
  49. @staticmethod
  50. def get_response():
  51. return ToolCreateResponse
  52. class ToolEditAPI(ToolReadAPI):
  53. @staticmethod
  54. def get_request():
  55. return ToolEditRequest
  56. class ToolDeleteAPI(ToolReadAPI):
  57. @staticmethod
  58. def get_response():
  59. return DefaultResultSerializer
  60. class ToolTreeReadAPI(APIMixin):
  61. @staticmethod
  62. def get_parameters():
  63. return [
  64. OpenApiParameter(
  65. name="workspace_id",
  66. description="工作空间id",
  67. type=OpenApiTypes.STR,
  68. location='path',
  69. required=True,
  70. ),
  71. OpenApiParameter(
  72. name="folder_id",
  73. description="文件夹id",
  74. type=OpenApiTypes.STR,
  75. location='query',
  76. required=False,
  77. )
  78. ]
  79. class ToolDebugApi(APIMixin):
  80. @staticmethod
  81. def get_request():
  82. return ToolDebugRequest
  83. @staticmethod
  84. def get_response():
  85. return DefaultResultSerializer
  86. class ToolExportAPI(APIMixin):
  87. @staticmethod
  88. def get_parameters():
  89. return [
  90. OpenApiParameter(
  91. name="workspace_id",
  92. description="工作空间id",
  93. type=OpenApiTypes.STR,
  94. location='path',
  95. required=True,
  96. ),
  97. OpenApiParameter(
  98. name="tool_id",
  99. description="工具id",
  100. type=OpenApiTypes.STR,
  101. location='path',
  102. required=True,
  103. )
  104. ]
  105. @staticmethod
  106. def get_response():
  107. return DefaultResultSerializer
  108. class ToolImportAPI(APIMixin):
  109. @staticmethod
  110. def get_parameters():
  111. return [
  112. OpenApiParameter(
  113. name="workspace_id",
  114. description="工作空间id",
  115. type=OpenApiTypes.STR,
  116. location='path',
  117. required=True,
  118. ),
  119. ]
  120. @staticmethod
  121. def get_request():
  122. return {
  123. 'multipart/form-data': {
  124. 'type': 'object',
  125. 'properties': {
  126. 'file': {
  127. 'type': 'string',
  128. 'format': 'binary' # Tells Swagger it's a file
  129. }
  130. }
  131. }
  132. }
  133. @staticmethod
  134. def get_response():
  135. return DefaultResultSerializer
  136. class ToolPageAPI(ToolReadAPI):
  137. @staticmethod
  138. def get_parameters():
  139. return [
  140. OpenApiParameter(
  141. name="workspace_id",
  142. description="工作空间id",
  143. type=OpenApiTypes.STR,
  144. location='path',
  145. required=True,
  146. ),
  147. OpenApiParameter(
  148. name="current_page",
  149. description="当前页码",
  150. type=OpenApiTypes.INT,
  151. location='path',
  152. required=True,
  153. ),
  154. OpenApiParameter(
  155. name="page_size",
  156. description="每页大小",
  157. type=OpenApiTypes.INT,
  158. location='path',
  159. required=True,
  160. ),
  161. OpenApiParameter(
  162. name="folder_id",
  163. description="文件夹id",
  164. type=OpenApiTypes.STR,
  165. location='query',
  166. required=True,
  167. ),
  168. OpenApiParameter(
  169. name="user_id",
  170. description="创建者id",
  171. type=OpenApiTypes.STR,
  172. location='query',
  173. required=False,
  174. ),
  175. OpenApiParameter(
  176. name="scope",
  177. description="工具类型",
  178. type=OpenApiTypes.STR,
  179. enum=["SHARED", "WORKSPACE"],
  180. location='query',
  181. required=True,
  182. ),
  183. OpenApiParameter(
  184. name="name",
  185. description="工具名称",
  186. type=OpenApiTypes.STR,
  187. location='query',
  188. required=False,
  189. ),
  190. ]
  191. class PylintAPI(APIMixin):
  192. @staticmethod
  193. def get_parameters():
  194. return [
  195. OpenApiParameter(
  196. name="workspace_id",
  197. description="工作空间id",
  198. type=OpenApiTypes.STR,
  199. location='path',
  200. required=True,
  201. ),
  202. ]
  203. @staticmethod
  204. def get_request():
  205. return PylintInstance
  206. class EditIconAPI(APIMixin):
  207. @staticmethod
  208. def get_parameters():
  209. return [
  210. OpenApiParameter(
  211. name="workspace_id",
  212. description="工作空间id",
  213. type=OpenApiTypes.STR,
  214. location='path',
  215. required=True,
  216. ),
  217. OpenApiParameter(
  218. name="tool_id",
  219. description="工具id",
  220. type=OpenApiTypes.STR,
  221. location='path',
  222. required=True,
  223. ),
  224. ]
  225. @staticmethod
  226. def get_request():
  227. return {
  228. 'multipart/form-data': {
  229. 'type': 'object',
  230. 'properties': {
  231. 'icon': {
  232. 'type': 'string',
  233. 'format': 'binary' # Tells Swagger it's a file
  234. }
  235. }
  236. }
  237. }
  238. @staticmethod
  239. def get_response():
  240. return DefaultResultSerializer
  241. class GetInternalToolAPI(APIMixin):
  242. @staticmethod
  243. def get_parameters():
  244. return [
  245. OpenApiParameter(
  246. name="name",
  247. description="工具名称",
  248. type=OpenApiTypes.STR,
  249. location='query',
  250. required=False,
  251. )
  252. ]
  253. @staticmethod
  254. def get_response():
  255. return DefaultResultSerializer()
  256. class AddInternalToolAPI(APIMixin):
  257. @staticmethod
  258. def get_request():
  259. return AddInternalToolRequest
  260. @staticmethod
  261. def get_response():
  262. return DefaultResultSerializer
  263. @staticmethod
  264. def get_parameters():
  265. return [
  266. OpenApiParameter(
  267. name="workspace_id",
  268. description="工作空间id",
  269. type=OpenApiTypes.STR,
  270. location='path',
  271. required=True,
  272. ),
  273. OpenApiParameter(
  274. name="tool_id",
  275. description="工具id",
  276. type=OpenApiTypes.STR,
  277. location='path',
  278. required=True,
  279. ),
  280. ]
  281. class ToolBatchOperateAPI(APIMixin):
  282. @staticmethod
  283. def get_parameters():
  284. return [
  285. OpenApiParameter(
  286. name="workspace_id",
  287. description="工作空间id",
  288. type=OpenApiTypes.STR,
  289. location='path',
  290. required=True,
  291. )
  292. ]
  293. @staticmethod
  294. def get_request():
  295. return BatchSerializer
  296. @staticmethod
  297. def get_move_request():
  298. return BatchMoveSerializer