external_application.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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. data = marshal(external_applications, external_application_fields)
  24. response = {"data": data, "has_more": len(external_applications) == limit, "limit": limit,
  25. "total": total, "page": page}
  26. return response, 200
  27. @setup_required
  28. @login_required
  29. @account_initialization_required
  30. @marshal_with(external_application_fields)
  31. def post(self):
  32. parser = reqparse.RequestParser()
  33. parser.add_argument(
  34. "name", location="json", nullable=False, required=True, help="Name must be between 1 to 50 characters."
  35. )
  36. parser.add_argument(
  37. "type", type=str, location="json", choices=ExternalApplication.EXTERNAL_APPLICATION_TYPE_LIST,
  38. nullable=False, help="Invalid external_application type."
  39. )
  40. parser.add_argument(
  41. "url", type=str, location="json", nullable=False, help="Invalid external_application url."
  42. )
  43. parser.add_argument(
  44. "method", type=str, location="json", nullable=False, help="Invalid external_application method."
  45. )
  46. parser.add_argument(
  47. "status", type=bool, location="json", nullable=False, help="Invalid external_application status."
  48. )
  49. args = parser.parse_args()
  50. external_application = ExternalApplicationService.save_external_application(args)
  51. return external_application, 200
  52. class ExternalApplicationApi(Resource):
  53. @setup_required
  54. @login_required
  55. @account_initialization_required
  56. @marshal_with(external_application_fields)
  57. def get(self, external_application_id):
  58. external_application = ExternalApplicationService.get_external_application(external_application_id)
  59. if not external_application:
  60. raise NotFound(f"ExternalApplication with id {id} not found.")
  61. return external_application, 200
  62. @setup_required
  63. @login_required
  64. @account_initialization_required
  65. @marshal_with(external_application_fields)
  66. def patch(self, external_application_id):
  67. external_application_id = str(external_application_id)
  68. parser = reqparse.RequestParser()
  69. parser.add_argument(
  70. "name", location="json", nullable=False, required=True, help="Name must be between 1 to 50 characters."
  71. )
  72. parser.add_argument(
  73. "type", type=str, location="json", nullable=False, help="Invalid external_application type."
  74. )
  75. parser.add_argument(
  76. "url", type=str, location="json", nullable=False, help="Invalid external_application url."
  77. )
  78. parser.add_argument(
  79. "method", type=str, location="json", nullable=False, help="Invalid external_application method."
  80. )
  81. parser.add_argument(
  82. "status", type=bool, location="json", nullable=False, help="Invalid external_application status."
  83. )
  84. args = parser.parse_args()
  85. external_application = ExternalApplicationService.update_external_application(args, external_application_id)
  86. return external_application, 200
  87. @setup_required
  88. @login_required
  89. @account_initialization_required
  90. def delete(self, external_application_id):
  91. external_application_id = str(external_application_id)
  92. ExternalApplicationService.delete_external_application(external_application_id)
  93. return 200
  94. api.add_resource(ExternalApplicationListApi, '/external_applications')
  95. api.add_resource(ExternalApplicationApi, '/external_applications/<external_application_id>')