| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 | from flask import requestfrom flask_login import login_requiredfrom flask_restful import Resource, marshal, marshal_with, reqparsefrom werkzeug.exceptions import NotFoundfrom controllers.console import apifrom controllers.console.wraps import account_initialization_required, setup_requiredfrom fields.external_application_fields import external_application_fieldsfrom models.external_application import ExternalApplicationfrom services.external_application_service import ExternalApplicationServiceclass 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, 200class 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 200api.add_resource(ExternalApplicationListApi, '/external_applications')api.add_resource(ExternalApplicationApi, '/external_applications/<external_application_id>')
 |