Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

extension.py 6.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. from flask_login import current_user
  2. from flask_restx import Resource, fields, marshal_with, reqparse
  3. from constants import HIDDEN_VALUE
  4. from controllers.console import api, console_ns
  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. @console_ns.route("/code-based-extension")
  12. class CodeBasedExtensionAPI(Resource):
  13. @api.doc("get_code_based_extension")
  14. @api.doc(description="Get code-based extension data by module name")
  15. @api.expect(
  16. api.parser().add_argument("module", type=str, required=True, location="args", help="Extension module name")
  17. )
  18. @api.response(
  19. 200,
  20. "Success",
  21. api.model(
  22. "CodeBasedExtensionResponse",
  23. {"module": fields.String(description="Module name"), "data": fields.Raw(description="Extension data")},
  24. ),
  25. )
  26. @setup_required
  27. @login_required
  28. @account_initialization_required
  29. def get(self):
  30. parser = reqparse.RequestParser()
  31. parser.add_argument("module", type=str, required=True, location="args")
  32. args = parser.parse_args()
  33. return {"module": args["module"], "data": CodeBasedExtensionService.get_code_based_extension(args["module"])}
  34. @console_ns.route("/api-based-extension")
  35. class APIBasedExtensionAPI(Resource):
  36. @api.doc("get_api_based_extensions")
  37. @api.doc(description="Get all API-based extensions for current tenant")
  38. @api.response(200, "Success", fields.List(fields.Nested(api_based_extension_fields)))
  39. @setup_required
  40. @login_required
  41. @account_initialization_required
  42. @marshal_with(api_based_extension_fields)
  43. def get(self):
  44. tenant_id = current_user.current_tenant_id
  45. return APIBasedExtensionService.get_all_by_tenant_id(tenant_id)
  46. @api.doc("create_api_based_extension")
  47. @api.doc(description="Create a new API-based extension")
  48. @api.expect(
  49. api.model(
  50. "CreateAPIBasedExtensionRequest",
  51. {
  52. "name": fields.String(required=True, description="Extension name"),
  53. "api_endpoint": fields.String(required=True, description="API endpoint URL"),
  54. "api_key": fields.String(required=True, description="API key for authentication"),
  55. },
  56. )
  57. )
  58. @api.response(201, "Extension created successfully", api_based_extension_fields)
  59. @setup_required
  60. @login_required
  61. @account_initialization_required
  62. @marshal_with(api_based_extension_fields)
  63. def post(self):
  64. parser = reqparse.RequestParser()
  65. parser.add_argument("name", type=str, required=True, location="json")
  66. parser.add_argument("api_endpoint", type=str, required=True, location="json")
  67. parser.add_argument("api_key", type=str, required=True, location="json")
  68. args = parser.parse_args()
  69. extension_data = APIBasedExtension(
  70. tenant_id=current_user.current_tenant_id,
  71. name=args["name"],
  72. api_endpoint=args["api_endpoint"],
  73. api_key=args["api_key"],
  74. )
  75. return APIBasedExtensionService.save(extension_data)
  76. @console_ns.route("/api-based-extension/<uuid:id>")
  77. class APIBasedExtensionDetailAPI(Resource):
  78. @api.doc("get_api_based_extension")
  79. @api.doc(description="Get API-based extension by ID")
  80. @api.doc(params={"id": "Extension ID"})
  81. @api.response(200, "Success", api_based_extension_fields)
  82. @setup_required
  83. @login_required
  84. @account_initialization_required
  85. @marshal_with(api_based_extension_fields)
  86. def get(self, id):
  87. api_based_extension_id = str(id)
  88. tenant_id = current_user.current_tenant_id
  89. return APIBasedExtensionService.get_with_tenant_id(tenant_id, api_based_extension_id)
  90. @api.doc("update_api_based_extension")
  91. @api.doc(description="Update API-based extension")
  92. @api.doc(params={"id": "Extension ID"})
  93. @api.expect(
  94. api.model(
  95. "UpdateAPIBasedExtensionRequest",
  96. {
  97. "name": fields.String(required=True, description="Extension name"),
  98. "api_endpoint": fields.String(required=True, description="API endpoint URL"),
  99. "api_key": fields.String(required=True, description="API key for authentication"),
  100. },
  101. )
  102. )
  103. @api.response(200, "Extension updated successfully", api_based_extension_fields)
  104. @setup_required
  105. @login_required
  106. @account_initialization_required
  107. @marshal_with(api_based_extension_fields)
  108. def post(self, id):
  109. api_based_extension_id = str(id)
  110. tenant_id = current_user.current_tenant_id
  111. extension_data_from_db = APIBasedExtensionService.get_with_tenant_id(tenant_id, api_based_extension_id)
  112. parser = reqparse.RequestParser()
  113. parser.add_argument("name", type=str, required=True, location="json")
  114. parser.add_argument("api_endpoint", type=str, required=True, location="json")
  115. parser.add_argument("api_key", type=str, required=True, location="json")
  116. args = parser.parse_args()
  117. extension_data_from_db.name = args["name"]
  118. extension_data_from_db.api_endpoint = args["api_endpoint"]
  119. if args["api_key"] != HIDDEN_VALUE:
  120. extension_data_from_db.api_key = args["api_key"]
  121. return APIBasedExtensionService.save(extension_data_from_db)
  122. @api.doc("delete_api_based_extension")
  123. @api.doc(description="Delete API-based extension")
  124. @api.doc(params={"id": "Extension ID"})
  125. @api.response(204, "Extension deleted successfully")
  126. @setup_required
  127. @login_required
  128. @account_initialization_required
  129. def delete(self, id):
  130. api_based_extension_id = str(id)
  131. tenant_id = current_user.current_tenant_id
  132. extension_data_from_db = APIBasedExtensionService.get_with_tenant_id(tenant_id, api_based_extension_id)
  133. APIBasedExtensionService.delete(extension_data_from_db)
  134. return {"result": "success"}, 204