From 9ec6c20c7b5ef58b070863aa9b697cf1c3f33226 Mon Sep 17 00:00:00 2001 From: robban64 <carl@schonfelder.se> Date: Tue, 27 Apr 2021 15:12:49 +0200 Subject: [PATCH] fix: moved parsers to api --- server/app/apis/alternatives.py | 11 ++-- server/app/apis/answers.py | 14 +++-- server/app/apis/auth.py | 17 ++++-- server/app/apis/codes.py | 4 +- server/app/apis/competitions.py | 15 ++++- server/app/apis/components.py | 19 ++++-- server/app/apis/media.py | 11 ++-- server/app/apis/misc.py | 4 +- server/app/apis/questions.py | 9 ++- server/app/apis/slides.py | 9 ++- server/app/apis/teams.py | 9 +-- server/app/apis/users.py | 27 ++++++--- server/app/core/parsers.py | 101 -------------------------------- 13 files changed, 102 insertions(+), 148 deletions(-) diff --git a/server/app/apis/alternatives.py b/server/app/apis/alternatives.py index ce7b4e7d..2adad553 100644 --- a/server/app/apis/alternatives.py +++ b/server/app/apis/alternatives.py @@ -1,17 +1,18 @@ import app.core.http_codes as codes import app.database.controller as dbc from app.apis import check_jwt, item_response, list_response -from app.core.dto import QuestionAlternativeDTO, QuestionDTO -from app.core.parsers import question_alternative_parser -from app.core.schemas import QuestionAlternativeSchema -from app.database.models import Question, QuestionAlternative -from flask_jwt_extended import jwt_required +from app.core.dto import QuestionAlternativeDTO from flask_restx import Resource +from flask_restx import reqparse api = QuestionAlternativeDTO.api schema = QuestionAlternativeDTO.schema list_schema = QuestionAlternativeDTO.list_schema +question_alternative_parser = reqparse.RequestParser() +question_alternative_parser.add_argument("text", type=str, default=None, location="json") +question_alternative_parser.add_argument("value", type=int, default=None, location="json") + @api.route("") @api.param("competition_id, slide_id, question_id") diff --git a/server/app/apis/answers.py b/server/app/apis/answers.py index 0ef30039..6bb30ddb 100644 --- a/server/app/apis/answers.py +++ b/server/app/apis/answers.py @@ -2,16 +2,22 @@ import app.core.http_codes as codes import app.database.controller as dbc from app.apis import check_jwt, item_response, list_response from app.core.dto import QuestionAnswerDTO -from app.core.parsers import question_answer_edit_parser, question_answer_parser -from app.core.schemas import QuestionAlternativeSchema -from app.database.models import Question, QuestionAlternative, QuestionAnswer -from flask_jwt_extended import jwt_required from flask_restx import Resource +from flask_restx import reqparse api = QuestionAnswerDTO.api schema = QuestionAnswerDTO.schema list_schema = QuestionAnswerDTO.list_schema +question_answer_parser = reqparse.RequestParser() +question_answer_parser.add_argument("data", type=dict, required=True, location="json") +question_answer_parser.add_argument("score", type=int, required=True, location="json") +question_answer_parser.add_argument("question_id", type=int, required=True, location="json") + +question_answer_edit_parser = reqparse.RequestParser() +question_answer_edit_parser.add_argument("data", type=dict, default=None, location="json") +question_answer_edit_parser.add_argument("score", type=int, default=None, location="json") + @api.route("") @api.param("competition_id, team_id") diff --git a/server/app/apis/auth.py b/server/app/apis/auth.py index e043f1b1..37da9e98 100644 --- a/server/app/apis/auth.py +++ b/server/app/apis/auth.py @@ -3,22 +3,31 @@ import app.database.controller as dbc from app.apis import check_jwt, item_response, text_response from app.core.codes import verify_code from app.core.dto import AuthDTO, CodeDTO -from app.core.parsers import create_user_parser, login_code_parser, login_parser -from app.database.models import User from flask_jwt_extended import ( create_access_token, create_refresh_token, get_jwt_identity, get_raw_jwt, jwt_refresh_token_required, - jwt_required, ) -from flask_restx import Namespace, Resource, cors +from flask_restx import Resource +from flask_restx import inputs, reqparse api = AuthDTO.api schema = AuthDTO.schema list_schema = AuthDTO.list_schema +login_parser = reqparse.RequestParser() +login_parser.add_argument("email", type=inputs.email(), required=True, location="json") +login_parser.add_argument("password", required=True, location="json") + +create_user_parser = login_parser.copy() +create_user_parser.add_argument("city_id", type=int, required=True, location="json") +create_user_parser.add_argument("role_id", type=int, required=True, location="json") + +login_code_parser = reqparse.RequestParser() +login_code_parser.add_argument("code", type=str, location="json") + def get_user_claims(item_user): return {"role": item_user.role.name, "city_id": item_user.city_id} diff --git a/server/app/apis/codes.py b/server/app/apis/codes.py index 7d58aef0..8a4105d2 100644 --- a/server/app/apis/codes.py +++ b/server/app/apis/codes.py @@ -2,9 +2,7 @@ import app.database.controller as dbc from app.apis import check_jwt, item_response, list_response from app.core import http_codes as codes from app.core.dto import CodeDTO -from app.core.parsers import code_parser -from app.database.models import Code, Competition -from flask_jwt_extended import jwt_required +from app.database.models import Code from flask_restx import Resource api = CodeDTO.api diff --git a/server/app/apis/competitions.py b/server/app/apis/competitions.py index 6421ba34..e806f34a 100644 --- a/server/app/apis/competitions.py +++ b/server/app/apis/competitions.py @@ -2,18 +2,27 @@ import time import app.database.controller as dbc from app.apis import check_jwt, item_response, list_response -from app.core import rich_schemas from app.core.dto import CompetitionDTO -from app.core.parsers import competition_parser, competition_search_parser from app.database.models import Competition -from flask_jwt_extended import jwt_required from flask_restx import Resource +from flask_restx import reqparse +from app.core.parsers import search_parser api = CompetitionDTO.api schema = CompetitionDTO.schema rich_schema = CompetitionDTO.rich_schema list_schema = CompetitionDTO.list_schema +competition_parser = reqparse.RequestParser() +competition_parser.add_argument("name", type=str, location="json") +competition_parser.add_argument("year", type=int, location="json") +competition_parser.add_argument("city_id", type=int, location="json") + +competition_search_parser = search_parser.copy() +competition_search_parser.add_argument("name", type=str, default=None, location="args") +competition_search_parser.add_argument("year", type=int, default=None, location="args") +competition_search_parser.add_argument("city_id", type=int, default=None, location="args") + @api.route("") class CompetitionsList(Resource): diff --git a/server/app/apis/components.py b/server/app/apis/components.py index 806e65e9..8ab67b8c 100644 --- a/server/app/apis/components.py +++ b/server/app/apis/components.py @@ -2,17 +2,28 @@ import app.core.http_codes as codes import app.database.controller as dbc from app.apis import check_jwt, item_response, list_response from app.core.dto import ComponentDTO -from app.core.parsers import component_create_parser, component_edit_parser, component_parser -from app.database.models import Competition, Component -from flask.globals import request -from flask_jwt_extended import jwt_required from flask_restx import Resource +from flask_restx import reqparse api = ComponentDTO.api schema = ComponentDTO.schema list_schema = ComponentDTO.list_schema +component_parser = reqparse.RequestParser() +component_parser.add_argument("x", type=str, default=None, location="json") +component_parser.add_argument("y", type=int, default=None, location="json") +component_parser.add_argument("w", type=int, default=None, location="json") +component_parser.add_argument("h", type=int, default=None, location="json") + +component_edit_parser = component_parser.copy() +component_edit_parser.add_argument("text", type=str, location="json") +component_edit_parser.add_argument("media_id", type=str, location="json") + +component_create_parser = component_edit_parser.copy() +component_create_parser.add_argument("type_id", type=int, required=True, location="json") + + @api.route("/<component_id>") @api.param("competition_id, slide_id, component_id") class ComponentByID(Resource): diff --git a/server/app/apis/media.py b/server/app/apis/media.py index 8f0b28f7..5d89550a 100644 --- a/server/app/apis/media.py +++ b/server/app/apis/media.py @@ -2,11 +2,11 @@ import app.core.http_codes as codes import app.database.controller as dbc from app.apis import check_jwt, item_response, list_response from app.core.dto import MediaDTO -from app.core.parsers import media_parser_search -from app.database.models import City, Media, MediaType, QuestionType, Role +from app.core.parsers import search_parser +from app.database.models import Media from flask import request -from flask_jwt_extended import get_jwt_identity, jwt_required -from flask_restx import Resource, reqparse +from flask_jwt_extended import get_jwt_identity +from flask_restx import Resource from flask_uploads import UploadNotAllowed from sqlalchemy import exc import app.core.files as files @@ -16,6 +16,9 @@ image_set = MediaDTO.image_set schema = MediaDTO.schema list_schema = MediaDTO.list_schema +media_parser_search = search_parser.copy() +media_parser_search.add_argument("filename", type=str, default=None, location="args") + @api.route("/images") class ImageList(Resource): diff --git a/server/app/apis/misc.py b/server/app/apis/misc.py index 8b3bd5e5..ab52362d 100644 --- a/server/app/apis/misc.py +++ b/server/app/apis/misc.py @@ -1,10 +1,10 @@ import app.database.controller as dbc -from app.apis import check_jwt, item_response, list_response +from app.apis import check_jwt, list_response from app.core import http_codes from app.core.dto import MiscDTO from app.database.models import City, Competition, ComponentType, MediaType, QuestionType, Role, User, ViewType -from flask_jwt_extended import jwt_required from flask_restx import Resource, reqparse +from flask_restx import reqparse api = MiscDTO.api diff --git a/server/app/apis/questions.py b/server/app/apis/questions.py index 5797872a..aaefafc4 100644 --- a/server/app/apis/questions.py +++ b/server/app/apis/questions.py @@ -2,15 +2,18 @@ import app.core.http_codes as codes import app.database.controller as dbc from app.apis import check_jwt, item_response, list_response from app.core.dto import QuestionDTO -from app.core.parsers import question_parser -from app.database.models import Question -from flask_jwt_extended import jwt_required from flask_restx import Resource +from flask_restx import reqparse api = QuestionDTO.api schema = QuestionDTO.schema list_schema = QuestionDTO.list_schema +question_parser = reqparse.RequestParser() +question_parser.add_argument("name", type=str, default=None, location="json") +question_parser.add_argument("total_score", type=int, default=None, location="json") +question_parser.add_argument("type_id", type=int, default=None, location="json") + @api.route("/questions") @api.param("competition_id") diff --git a/server/app/apis/slides.py b/server/app/apis/slides.py index 9ca4a5f2..1823531e 100644 --- a/server/app/apis/slides.py +++ b/server/app/apis/slides.py @@ -2,15 +2,18 @@ import app.core.http_codes as codes import app.database.controller as dbc from app.apis import check_jwt, item_response, list_response from app.core.dto import SlideDTO -from app.core.parsers import slide_parser -from app.database.models import Competition, Slide -from flask_jwt_extended import jwt_required from flask_restx import Resource +from flask_restx import reqparse api = SlideDTO.api schema = SlideDTO.schema list_schema = SlideDTO.list_schema +slide_parser = reqparse.RequestParser() +slide_parser.add_argument("order", type=int, default=None, location="json") +slide_parser.add_argument("title", type=str, default=None, location="json") +slide_parser.add_argument("timer", type=int, default=None, location="json") + @api.route("") @api.param("competition_id") diff --git a/server/app/apis/teams.py b/server/app/apis/teams.py index 514748ae..3fcb276c 100644 --- a/server/app/apis/teams.py +++ b/server/app/apis/teams.py @@ -2,15 +2,16 @@ import app.core.http_codes as codes import app.database.controller as dbc from app.apis import check_jwt, item_response, list_response from app.core.dto import TeamDTO -from app.core.parsers import team_parser -from app.database.models import Competition, Team -from flask_jwt_extended import get_jwt_identity, jwt_required -from flask_restx import Namespace, Resource, reqparse +from flask_restx import Resource, reqparse +from flask_restx import reqparse api = TeamDTO.api schema = TeamDTO.schema list_schema = TeamDTO.list_schema +team_parser = reqparse.RequestParser() +team_parser.add_argument("name", type=str, location="json") + @api.route("") @api.param("competition_id") diff --git a/server/app/apis/users.py b/server/app/apis/users.py index 1bae000b..a5b2d58b 100644 --- a/server/app/apis/users.py +++ b/server/app/apis/users.py @@ -2,18 +2,29 @@ import app.core.http_codes as codes import app.database.controller as dbc from app.apis import check_jwt, item_response, list_response from app.core.dto import UserDTO -from app.core.parsers import user_parser, user_search_parser -from app.database.models import User -from flask import request -from flask_jwt_extended import get_jwt_identity, jwt_required -from flask_restx import Namespace, Resource +from flask_jwt_extended import get_jwt_identity +from flask_restx import Resource +from flask_restx import inputs, reqparse +from app.core.parsers import search_parser api = UserDTO.api schema = UserDTO.schema list_schema = UserDTO.list_schema +user_parser = reqparse.RequestParser() +user_parser.add_argument("email", type=inputs.email(), location="json") +user_parser.add_argument("name", type=str, location="json") +user_parser.add_argument("city_id", type=int, location="json") +user_parser.add_argument("role_id", type=int, location="json") -def edit_user(item_user, args): +user_search_parser = search_parser.copy() +user_search_parser.add_argument("name", type=str, default=None, location="args") +user_search_parser.add_argument("email", type=str, default=None, location="args") +user_search_parser.add_argument("city_id", type=int, default=None, location="args") +user_search_parser.add_argument("role_id", type=int, default=None, location="args") + + +def _edit_user(item_user, args): email = args.get("email") name = args.get("name") @@ -38,7 +49,7 @@ class UsersList(Resource): def put(self): args = user_parser.parse_args(strict=True) item = dbc.get.user(get_jwt_identity()) - item = edit_user(item, args) + item = _edit_user(item, args) return item_response(schema.dump(item)) @@ -54,7 +65,7 @@ class Users(Resource): def put(self, ID): args = user_parser.parse_args(strict=True) item = dbc.get.user(ID) - item = edit_user(item, args) + item = _edit_user(item, args) return item_response(schema.dump(item)) diff --git a/server/app/core/parsers.py b/server/app/core/parsers.py index 3420e99e..c695dd23 100644 --- a/server/app/core/parsers.py +++ b/server/app/core/parsers.py @@ -6,104 +6,3 @@ search_parser.add_argument("page", type=int, default=0, location="args") search_parser.add_argument("page_size", type=int, default=15, location="args") search_parser.add_argument("order", type=int, default=1, location="args") search_parser.add_argument("order_by", type=str, default=None, location="args") - -###LOGIN#### -login_parser = reqparse.RequestParser() -login_parser.add_argument("email", type=inputs.email(), required=True, location="json") -login_parser.add_argument("password", required=True, location="json") - -###CREATE_USER#### -create_user_parser = login_parser.copy() -create_user_parser.add_argument("city_id", type=int, required=True, location="json") -create_user_parser.add_argument("role_id", type=int, required=True, location="json") - -###USER#### -user_parser = reqparse.RequestParser() -user_parser.add_argument("email", type=inputs.email(), location="json") -user_parser.add_argument("name", type=str, location="json") -user_parser.add_argument("city_id", type=int, location="json") -user_parser.add_argument("role_id", type=int, location="json") - -###SEARCH_USER#### -user_search_parser = search_parser.copy() -user_search_parser.add_argument("name", type=str, default=None, location="args") -user_search_parser.add_argument("email", type=str, default=None, location="args") -user_search_parser.add_argument("city_id", type=int, default=None, location="args") -user_search_parser.add_argument("role_id", type=int, default=None, location="args") - - -###COMPETITION#### -competition_parser = reqparse.RequestParser() -competition_parser.add_argument("name", type=str, location="json") -competition_parser.add_argument("year", type=int, location="json") -competition_parser.add_argument("city_id", type=int, location="json") - - -###SEARCH_COMPETITION#### -competition_search_parser = search_parser.copy() -competition_search_parser.add_argument("name", type=str, default=None, location="args") -competition_search_parser.add_argument("year", type=int, default=None, location="args") -competition_search_parser.add_argument("city_id", type=int, default=None, location="args") - - -###SLIDER_PARSER#### -slide_parser = reqparse.RequestParser() -slide_parser.add_argument("order", type=int, default=None, location="json") -slide_parser.add_argument("title", type=str, default=None, location="json") -slide_parser.add_argument("timer", type=int, default=None, location="json") - - -###QUESTION#### -question_parser = reqparse.RequestParser() -question_parser.add_argument("name", type=str, default=None, location="json") -question_parser.add_argument("total_score", type=int, default=None, location="json") -question_parser.add_argument("type_id", type=int, default=None, location="json") - - -###QUESTION ALTERNATIVES#### -question_alternative_parser = reqparse.RequestParser() -question_alternative_parser.add_argument("text", type=str, default=None, location="json") -question_alternative_parser.add_argument("value", type=int, default=None, location="json") - -###QUESTION ANSWERS#### -question_answer_parser = reqparse.RequestParser() -question_answer_parser.add_argument("data", type=dict, required=True, location="json") -question_answer_parser.add_argument("score", type=int, required=True, location="json") -question_answer_parser.add_argument("question_id", type=int, required=True, location="json") - -###QUESTION ANSWERS EDIT#### -question_answer_edit_parser = reqparse.RequestParser() -question_answer_edit_parser.add_argument("data", type=dict, default=None, location="json") -question_answer_edit_parser.add_argument("score", type=int, default=None, location="json") - -###CODE#### -code_parser = reqparse.RequestParser() -code_parser.add_argument("pointer", type=str, default=None, location="json") -code_parser.add_argument("view_type_id", type=int, default=None, location="json") - - -###TEAM#### -team_parser = reqparse.RequestParser() -team_parser.add_argument("name", type=str, location="json") - -###SEARCH_COMPETITION#### -media_parser_search = search_parser.copy() -media_parser_search.add_argument("filename", type=str, default=None, location="args") - - -###COMPONENT### -component_parser = reqparse.RequestParser() -component_parser.add_argument("x", type=str, default=None, location="json") -component_parser.add_argument("y", type=int, default=None, location="json") -component_parser.add_argument("w", type=int, default=None, location="json") -component_parser.add_argument("h", type=int, default=None, location="json") - -component_edit_parser = component_parser.copy() -component_edit_parser.add_argument("text", type=str, location="json") -component_edit_parser.add_argument("media_id", type=str, location="json") - -component_create_parser = component_edit_parser.copy() -component_create_parser.add_argument("type_id", type=int, required=True, location="json") - -login_code_parser = reqparse.RequestParser() -login_code_parser.add_argument("code", type=str, location="json") -- GitLab