extension.py 4.0 KB

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