endpoint.py 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. from flask_login import current_user # type: ignore
  2. from flask_restful import Resource, reqparse # type: ignore
  3. from werkzeug.exceptions import Forbidden
  4. from controllers.console import api
  5. from controllers.console.wraps import account_initialization_required, setup_required
  6. from core.model_runtime.utils.encoders import jsonable_encoder
  7. from libs.login import login_required
  8. from services.plugin.endpoint_service import EndpointService
  9. class EndpointCreateApi(Resource):
  10. @setup_required
  11. @login_required
  12. @account_initialization_required
  13. def post(self):
  14. user = current_user
  15. if not user.is_admin_or_owner:
  16. raise Forbidden()
  17. parser = reqparse.RequestParser()
  18. parser.add_argument("plugin_unique_identifier", type=str, required=True)
  19. parser.add_argument("settings", type=dict, required=True)
  20. parser.add_argument("name", type=str, required=True)
  21. args = parser.parse_args()
  22. plugin_unique_identifier = args["plugin_unique_identifier"]
  23. settings = args["settings"]
  24. name = args["name"]
  25. return {
  26. "success": EndpointService.create_endpoint(
  27. tenant_id=user.current_tenant_id,
  28. user_id=user.id,
  29. plugin_unique_identifier=plugin_unique_identifier,
  30. name=name,
  31. settings=settings,
  32. )
  33. }
  34. class EndpointListApi(Resource):
  35. @setup_required
  36. @login_required
  37. @account_initialization_required
  38. def get(self):
  39. user = current_user
  40. parser = reqparse.RequestParser()
  41. parser.add_argument("page", type=int, required=True, location="args")
  42. parser.add_argument("page_size", type=int, required=True, location="args")
  43. args = parser.parse_args()
  44. page = args["page"]
  45. page_size = args["page_size"]
  46. return jsonable_encoder(
  47. {
  48. "endpoints": EndpointService.list_endpoints(
  49. tenant_id=user.current_tenant_id,
  50. user_id=user.id,
  51. page=page,
  52. page_size=page_size,
  53. )
  54. }
  55. )
  56. class EndpointListForSinglePluginApi(Resource):
  57. @setup_required
  58. @login_required
  59. @account_initialization_required
  60. def get(self):
  61. user = current_user
  62. parser = reqparse.RequestParser()
  63. parser.add_argument("page", type=int, required=True, location="args")
  64. parser.add_argument("page_size", type=int, required=True, location="args")
  65. parser.add_argument("plugin_id", type=str, required=True, location="args")
  66. args = parser.parse_args()
  67. page = args["page"]
  68. page_size = args["page_size"]
  69. plugin_id = args["plugin_id"]
  70. return jsonable_encoder(
  71. {
  72. "endpoints": EndpointService.list_endpoints_for_single_plugin(
  73. tenant_id=user.current_tenant_id,
  74. user_id=user.id,
  75. plugin_id=plugin_id,
  76. page=page,
  77. page_size=page_size,
  78. )
  79. }
  80. )
  81. class EndpointDeleteApi(Resource):
  82. @setup_required
  83. @login_required
  84. @account_initialization_required
  85. def post(self):
  86. user = current_user
  87. parser = reqparse.RequestParser()
  88. parser.add_argument("endpoint_id", type=str, required=True)
  89. args = parser.parse_args()
  90. if not user.is_admin_or_owner:
  91. raise Forbidden()
  92. endpoint_id = args["endpoint_id"]
  93. return {
  94. "success": EndpointService.delete_endpoint(
  95. tenant_id=user.current_tenant_id, user_id=user.id, endpoint_id=endpoint_id
  96. )
  97. }
  98. class EndpointUpdateApi(Resource):
  99. @setup_required
  100. @login_required
  101. @account_initialization_required
  102. def post(self):
  103. user = current_user
  104. parser = reqparse.RequestParser()
  105. parser.add_argument("endpoint_id", type=str, required=True)
  106. parser.add_argument("settings", type=dict, required=True)
  107. parser.add_argument("name", type=str, required=True)
  108. args = parser.parse_args()
  109. endpoint_id = args["endpoint_id"]
  110. settings = args["settings"]
  111. name = args["name"]
  112. if not user.is_admin_or_owner:
  113. raise Forbidden()
  114. return {
  115. "success": EndpointService.update_endpoint(
  116. tenant_id=user.current_tenant_id,
  117. user_id=user.id,
  118. endpoint_id=endpoint_id,
  119. name=name,
  120. settings=settings,
  121. )
  122. }
  123. class EndpointEnableApi(Resource):
  124. @setup_required
  125. @login_required
  126. @account_initialization_required
  127. def post(self):
  128. user = current_user
  129. parser = reqparse.RequestParser()
  130. parser.add_argument("endpoint_id", type=str, required=True)
  131. args = parser.parse_args()
  132. endpoint_id = args["endpoint_id"]
  133. if not user.is_admin_or_owner:
  134. raise Forbidden()
  135. return {
  136. "success": EndpointService.enable_endpoint(
  137. tenant_id=user.current_tenant_id, user_id=user.id, endpoint_id=endpoint_id
  138. )
  139. }
  140. class EndpointDisableApi(Resource):
  141. @setup_required
  142. @login_required
  143. @account_initialization_required
  144. def post(self):
  145. user = current_user
  146. parser = reqparse.RequestParser()
  147. parser.add_argument("endpoint_id", type=str, required=True)
  148. args = parser.parse_args()
  149. endpoint_id = args["endpoint_id"]
  150. if not user.is_admin_or_owner:
  151. raise Forbidden()
  152. return {
  153. "success": EndpointService.disable_endpoint(
  154. tenant_id=user.current_tenant_id, user_id=user.id, endpoint_id=endpoint_id
  155. )
  156. }
  157. api.add_resource(EndpointCreateApi, "/workspaces/current/endpoints/create")
  158. api.add_resource(EndpointListApi, "/workspaces/current/endpoints/list")
  159. api.add_resource(EndpointListForSinglePluginApi, "/workspaces/current/endpoints/list/plugin")
  160. api.add_resource(EndpointDeleteApi, "/workspaces/current/endpoints/delete")
  161. api.add_resource(EndpointUpdateApi, "/workspaces/current/endpoints/update")
  162. api.add_resource(EndpointEnableApi, "/workspaces/current/endpoints/enable")
  163. api.add_resource(EndpointDisableApi, "/workspaces/current/endpoints/disable")