extension.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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 {
  21. 'module': args['module'],
  22. 'data': CodeBasedExtensionService.get_code_based_extension(args['module'])
  23. }
  24. class APIBasedExtensionAPI(Resource):
  25. @setup_required
  26. @login_required
  27. @account_initialization_required
  28. @marshal_with(api_based_extension_fields)
  29. def get(self):
  30. tenant_id = current_user.current_tenant_id
  31. return APIBasedExtensionService.get_all_by_tenant_id(tenant_id)
  32. @setup_required
  33. @login_required
  34. @account_initialization_required
  35. @marshal_with(api_based_extension_fields)
  36. def post(self):
  37. parser = reqparse.RequestParser()
  38. parser.add_argument('name', type=str, required=True, location='json')
  39. parser.add_argument('api_endpoint', type=str, required=True, location='json')
  40. parser.add_argument('api_key', type=str, required=True, location='json')
  41. args = parser.parse_args()
  42. extension_data = APIBasedExtension(
  43. tenant_id=current_user.current_tenant_id,
  44. name=args['name'],
  45. api_endpoint=args['api_endpoint'],
  46. api_key=args['api_key']
  47. )
  48. return APIBasedExtensionService.save(extension_data)
  49. class APIBasedExtensionDetailAPI(Resource):
  50. @setup_required
  51. @login_required
  52. @account_initialization_required
  53. @marshal_with(api_based_extension_fields)
  54. def get(self, id):
  55. api_based_extension_id = str(id)
  56. tenant_id = current_user.current_tenant_id
  57. return APIBasedExtensionService.get_with_tenant_id(tenant_id, api_based_extension_id)
  58. @setup_required
  59. @login_required
  60. @account_initialization_required
  61. @marshal_with(api_based_extension_fields)
  62. def post(self, id):
  63. api_based_extension_id = str(id)
  64. tenant_id = current_user.current_tenant_id
  65. extension_data_from_db = APIBasedExtensionService.get_with_tenant_id(tenant_id, api_based_extension_id)
  66. parser = reqparse.RequestParser()
  67. parser.add_argument('name', type=str, required=True, location='json')
  68. parser.add_argument('api_endpoint', type=str, required=True, location='json')
  69. parser.add_argument('api_key', type=str, required=True, location='json')
  70. args = parser.parse_args()
  71. extension_data_from_db.name = args['name']
  72. extension_data_from_db.api_endpoint = args['api_endpoint']
  73. if args['api_key'] != HIDDEN_VALUE:
  74. extension_data_from_db.api_key = args['api_key']
  75. return APIBasedExtensionService.save(extension_data_from_db)
  76. @setup_required
  77. @login_required
  78. @account_initialization_required
  79. def delete(self, id):
  80. api_based_extension_id = str(id)
  81. tenant_id = current_user.current_tenant_id
  82. extension_data_from_db = APIBasedExtensionService.get_with_tenant_id(tenant_id, api_based_extension_id)
  83. APIBasedExtensionService.delete(extension_data_from_db)
  84. return {'result': 'success'}
  85. api.add_resource(CodeBasedExtensionAPI, '/code-based-extension')
  86. api.add_resource(APIBasedExtensionAPI, '/api-based-extension')
  87. api.add_resource(APIBasedExtensionDetailAPI, '/api-based-extension/<uuid:id>')