extension.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. from flask_login import current_user
  2. from flask_restful import Resource, marshal_with, reqparse
  3. from constants import HIDDEN_VALUE
  4. from controllers.console import api
  5. from controllers.console.setup import setup_required
  6. from controllers.console.wraps import account_initialization_required
  7. from fields.api_based_extension_fields import api_based_extension_fields
  8. from libs.login import login_required
  9. from models.api_based_extension import APIBasedExtension
  10. from services.api_based_extension_service import APIBasedExtensionService
  11. from services.code_based_extension_service import CodeBasedExtensionService
  12. class CodeBasedExtensionAPI(Resource):
  13. @setup_required
  14. @login_required
  15. @account_initialization_required
  16. def get(self):
  17. parser = reqparse.RequestParser()
  18. parser.add_argument("module", type=str, required=True, location="args")
  19. args = parser.parse_args()
  20. return {"module": args["module"], "data": CodeBasedExtensionService.get_code_based_extension(args["module"])}
  21. class APIBasedExtensionAPI(Resource):
  22. @setup_required
  23. @login_required
  24. @account_initialization_required
  25. @marshal_with(api_based_extension_fields)
  26. def get(self):
  27. tenant_id = current_user.current_tenant_id
  28. return APIBasedExtensionService.get_all_by_tenant_id(tenant_id)
  29. @setup_required
  30. @login_required
  31. @account_initialization_required
  32. @marshal_with(api_based_extension_fields)
  33. def post(self):
  34. parser = reqparse.RequestParser()
  35. parser.add_argument("name", type=str, required=True, location="json")
  36. parser.add_argument("api_endpoint", type=str, required=True, location="json")
  37. parser.add_argument("api_key", type=str, required=True, location="json")
  38. args = parser.parse_args()
  39. extension_data = APIBasedExtension(
  40. tenant_id=current_user.current_tenant_id,
  41. name=args["name"],
  42. api_endpoint=args["api_endpoint"],
  43. api_key=args["api_key"],
  44. )
  45. return APIBasedExtensionService.save(extension_data)
  46. class APIBasedExtensionDetailAPI(Resource):
  47. @setup_required
  48. @login_required
  49. @account_initialization_required
  50. @marshal_with(api_based_extension_fields)
  51. def get(self, id):
  52. api_based_extension_id = str(id)
  53. tenant_id = current_user.current_tenant_id
  54. return APIBasedExtensionService.get_with_tenant_id(tenant_id, api_based_extension_id)
  55. @setup_required
  56. @login_required
  57. @account_initialization_required
  58. @marshal_with(api_based_extension_fields)
  59. def post(self, id):
  60. api_based_extension_id = str(id)
  61. tenant_id = current_user.current_tenant_id
  62. extension_data_from_db = APIBasedExtensionService.get_with_tenant_id(tenant_id, api_based_extension_id)
  63. parser = reqparse.RequestParser()
  64. parser.add_argument("name", type=str, required=True, location="json")
  65. parser.add_argument("api_endpoint", type=str, required=True, location="json")
  66. parser.add_argument("api_key", type=str, required=True, location="json")
  67. args = parser.parse_args()
  68. extension_data_from_db.name = args["name"]
  69. extension_data_from_db.api_endpoint = args["api_endpoint"]
  70. if args["api_key"] != HIDDEN_VALUE:
  71. extension_data_from_db.api_key = args["api_key"]
  72. return APIBasedExtensionService.save(extension_data_from_db)
  73. @setup_required
  74. @login_required
  75. @account_initialization_required
  76. def delete(self, id):
  77. api_based_extension_id = str(id)
  78. tenant_id = current_user.current_tenant_id
  79. extension_data_from_db = APIBasedExtensionService.get_with_tenant_id(tenant_id, api_based_extension_id)
  80. APIBasedExtensionService.delete(extension_data_from_db)
  81. return {"result": "success"}
  82. api.add_resource(CodeBasedExtensionAPI, "/code-based-extension")
  83. api.add_resource(APIBasedExtensionAPI, "/api-based-extension")
  84. api.add_resource(APIBasedExtensionDetailAPI, "/api-based-extension/<uuid:id>")