external_application.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. from flask import request
  2. from flask_login import login_required
  3. from flask_restful import Resource, marshal, marshal_with, reqparse
  4. from werkzeug.exceptions import NotFound
  5. from controllers.console import api
  6. from controllers.console.wraps import account_initialization_required, setup_required
  7. from fields.external_application_fields import external_application_fields
  8. from models.external_application import ExternalApplication
  9. from services.external_application_service import ExternalApplicationService
  10. class ExternalApplicationListApi(Resource):
  11. @setup_required
  12. @login_required
  13. @account_initialization_required
  14. def get(self):
  15. page = request.args.get("page", default=1, type=int)
  16. limit = request.args.get("limit", default=20, type=int)
  17. search = request.args.get("search", default=None, type=str)
  18. type = request.args.get("type", default=None, type=str)
  19. url = request.args.get("url", default=None, type=str)
  20. method = request.args.get("method", default=None, type=str)
  21. external_applications, total = ExternalApplicationService.get_external_applications(
  22. page, limit, search, type, url, method
  23. )
  24. data = marshal(external_applications, external_application_fields)
  25. response = {
  26. "data": data,
  27. "has_more": len(external_applications) == limit,
  28. "limit": limit,
  29. "total": total,
  30. "page": page,
  31. }
  32. return response, 200
  33. @setup_required
  34. @login_required
  35. @account_initialization_required
  36. @marshal_with(external_application_fields)
  37. def post(self):
  38. parser = reqparse.RequestParser()
  39. parser.add_argument(
  40. "name", location="json", nullable=False, required=True, help="Name must be between 1 to 50 characters."
  41. )
  42. parser.add_argument(
  43. "type",
  44. type=str,
  45. location="json",
  46. choices=ExternalApplication.EXTERNAL_APPLICATION_TYPE_LIST,
  47. nullable=False,
  48. help="Invalid external_application type.",
  49. )
  50. parser.add_argument("url", type=str, location="json", nullable=False, help="Invalid external_application url.")
  51. parser.add_argument(
  52. "method", type=str, location="json", nullable=False, help="Invalid external_application method."
  53. )
  54. parser.add_argument(
  55. "status", type=bool, location="json", nullable=False, help="Invalid external_application status."
  56. )
  57. args = parser.parse_args()
  58. external_application = ExternalApplicationService.save_external_application(args)
  59. return external_application, 200
  60. class ExternalApplicationApi(Resource):
  61. @setup_required
  62. @login_required
  63. @account_initialization_required
  64. @marshal_with(external_application_fields)
  65. def get(self, external_application_id):
  66. external_application = ExternalApplicationService.get_external_application(external_application_id)
  67. if not external_application:
  68. raise NotFound(f"ExternalApplication with id {id} not found.")
  69. return external_application, 200
  70. @setup_required
  71. @login_required
  72. @account_initialization_required
  73. @marshal_with(external_application_fields)
  74. def patch(self, external_application_id):
  75. external_application_id = str(external_application_id)
  76. parser = reqparse.RequestParser()
  77. parser.add_argument(
  78. "name", location="json", nullable=False, required=True, help="Name must be between 1 to 50 characters."
  79. )
  80. parser.add_argument(
  81. "type", type=str, location="json", nullable=False, help="Invalid external_application type."
  82. )
  83. parser.add_argument("url", type=str, location="json", nullable=False, help="Invalid external_application url.")
  84. parser.add_argument(
  85. "method", type=str, location="json", nullable=False, help="Invalid external_application method."
  86. )
  87. parser.add_argument(
  88. "status", type=bool, location="json", nullable=False, help="Invalid external_application status."
  89. )
  90. args = parser.parse_args()
  91. external_application = ExternalApplicationService.update_external_application(args, external_application_id)
  92. return external_application, 200
  93. @setup_required
  94. @login_required
  95. @account_initialization_required
  96. def delete(self, external_application_id):
  97. external_application_id = str(external_application_id)
  98. ExternalApplicationService.delete_external_application(external_application_id)
  99. return 200
  100. api.add_resource(ExternalApplicationListApi, "/external_applications")
  101. api.add_resource(ExternalApplicationApi, "/external_applications/<external_application_id>")