123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- from flask import request
- from flask_login import login_required
- from flask_restful import Resource, marshal, marshal_with, reqparse
- from werkzeug.exceptions import NotFound
- from controllers.console import api
- from controllers.console.wraps import account_initialization_required, setup_required
- from fields.external_application_fields import external_application_fields
- from models.external_application import ExternalApplication
- from services.external_application_service import ExternalApplicationService
- class ExternalApplicationListApi(Resource):
- @setup_required
- @login_required
- @account_initialization_required
- def get(self):
- page = request.args.get("page", default=1, type=int)
- limit = request.args.get("limit", default=20, type=int)
- search = request.args.get("search", default=None, type=str)
- type = request.args.get("type", default=None, type=str)
- url = request.args.get("url", default=None, type=str)
- method = request.args.get("method", default=None, type=str)
- external_applications, total = ExternalApplicationService.get_external_applications(
- page, limit, search, type, url, method)
- data = marshal(external_applications, external_application_fields)
- response = {"data": data, "has_more": len(external_applications) == limit, "limit": limit,
- "total": total, "page": page}
- return response, 200
- @setup_required
- @login_required
- @account_initialization_required
- @marshal_with(external_application_fields)
- def post(self):
- parser = reqparse.RequestParser()
- parser.add_argument(
- "name", location="json", nullable=False, required=True, help="Name must be between 1 to 50 characters."
- )
- parser.add_argument(
- "type", type=str, location="json", choices=ExternalApplication.EXTERNAL_APPLICATION_TYPE_LIST,
- nullable=False, help="Invalid external_application type."
- )
- parser.add_argument(
- "url", type=str, location="json", nullable=False, help="Invalid external_application url."
- )
- parser.add_argument(
- "method", type=str, location="json", nullable=False, help="Invalid external_application method."
- )
- parser.add_argument(
- "status", type=bool, location="json", nullable=False, help="Invalid external_application status."
- )
- args = parser.parse_args()
- external_application = ExternalApplicationService.save_external_application(args)
- return external_application, 200
- class ExternalApplicationApi(Resource):
- @setup_required
- @login_required
- @account_initialization_required
- @marshal_with(external_application_fields)
- def get(self, external_application_id):
- external_application = ExternalApplicationService.get_external_application(external_application_id)
- if not external_application:
- raise NotFound(f"ExternalApplication with id {id} not found.")
- return external_application, 200
- @setup_required
- @login_required
- @account_initialization_required
- @marshal_with(external_application_fields)
- def patch(self, external_application_id):
- external_application_id = str(external_application_id)
- parser = reqparse.RequestParser()
- parser.add_argument(
- "name", location="json", nullable=False, required=True, help="Name must be between 1 to 50 characters."
- )
- parser.add_argument(
- "type", type=str, location="json", nullable=False, help="Invalid external_application type."
- )
- parser.add_argument(
- "url", type=str, location="json", nullable=False, help="Invalid external_application url."
- )
- parser.add_argument(
- "method", type=str, location="json", nullable=False, help="Invalid external_application method."
- )
- parser.add_argument(
- "status", type=bool, location="json", nullable=False, help="Invalid external_application status."
- )
- args = parser.parse_args()
- external_application = ExternalApplicationService.update_external_application(args, external_application_id)
- return external_application, 200
- @setup_required
- @login_required
- @account_initialization_required
- def delete(self, external_application_id):
- external_application_id = str(external_application_id)
- ExternalApplicationService.delete_external_application(external_application_id)
- return 200
- api.add_resource(ExternalApplicationListApi, '/external_applications')
- api.add_resource(ExternalApplicationApi, '/external_applications/<external_application_id>')
|