Skip to content
Snippets Groups Projects
Commit 04bcb98a authored by Victor Löfgren's avatar Victor Löfgren
Browse files

Add answer api

parent 66ad0d45
Branches
Tags
1 merge request!161Resolve "replace-restx-with-smorest"
......@@ -115,8 +115,6 @@ def protect_route(allowed_roles=None, allowed_views=None):
# flask_api = Api()
# flask_api.add_namespace(answer_ns, path="/api/competitions/<competition_id>/teams/<team_id>/answers")
# flask_api.add_namespace(score_ns, path="/api/competitions/<competition_id>/teams/<team_id>/answers/question_scores")
from flask_smorest import Api
......@@ -127,6 +125,7 @@ flask_api = Api()
def init_api():
from .alternatives import blp as alternative_blp
from .answers import blp as answer_blp
from .auth import blp as auth_blp
from .codes import blp as code_blp
from .competitions import blp as competition_blp
......@@ -149,3 +148,4 @@ def init_api():
flask_api.register_blueprint(code_blp)
flask_api.register_blueprint(alternative_blp)
flask_api.register_blueprint(component_blp)
flask_api.register_blueprint(answer_blp)
......@@ -4,57 +4,57 @@ Default route: /api/competitions/<competition_id>/teams/<team_id>/answers
"""
import app.database.controller as dbc
from app.apis import item_response, list_response, protect_route
from app.core.dto import QuestionAlternativeAnswerDTO, QuestionScoreDTO
from app.core.parsers import sentinel
from flask_restx import Resource, reqparse
from app.apis import protect_route
from app.core import ma
from app.core.schemas import BaseSchema, QuestionAlternativeAnswerSchema
from app.database import models
from flask.views import MethodView
from flask_smorest import Blueprint, abort, response
api = QuestionAlternativeAnswerDTO.api
schema = QuestionAlternativeAnswerDTO.schema
list_schema = QuestionAlternativeAnswerDTO.list_schema
from . import http_codes
score_schema = QuestionScoreDTO.schema
score_list_schema = QuestionScoreDTO.list_schema
blp = Blueprint(
"answer",
"answer",
url_prefix="/api/competitions/<competition_id>/teams/<team_id>/answers",
description="Adding, updating, deleting and copy answer",
)
answer_parser_add = reqparse.RequestParser()
answer_parser_add.add_argument("answer", type=str, required=True, location="json")
class AnswerAddArgsSchema(BaseSchema):
class Meta(BaseSchema.Meta):
model = models.QuestionAlternativeAnswer
answer_parser_edit = reqparse.RequestParser()
answer_parser_edit.add_argument("answer", type=str, default=sentinel, location="json")
answer = ma.auto_field(required=False)
@api.route("/question_alternatives")
@api.param("competition_id, team_id")
class QuestionAlternativeList(Resource):
@blp.route("")
class QuestionAlternativeList(MethodView):
@protect_route(allowed_roles=["*"], allowed_views=["*"])
@blp.response(http_codes.OK, QuestionAlternativeAnswerSchema)
def get(self, competition_id, team_id):
""" Gets all question answers that the specified team has given. """
return dbc.get.question_alternative_answer_list(competition_id, team_id)
items = dbc.get.question_alternative_answer_list(competition_id, team_id)
return list_response(list_schema.dump(items))
@api.route("/question_alternatives/<question_alternative_id>")
@api.param("competition_id, team_id, question_alternative_id")
class QuestionAlternativeAnswers(Resource):
@blp.route("/<answer_id>")
class QuestionAlternativeAnswers(MethodView):
@protect_route(allowed_roles=["*"], allowed_views=["*"])
def get(self, competition_id, team_id, question_alternative_id):
@blp.response(http_codes.OK, QuestionAlternativeAnswerSchema)
def get(self, competition_id, team_id, answer_id):
""" Gets the specified question answer. """
item = dbc.get.question_alternative_answer(competition_id, team_id, question_alternative_id)
return item_response(schema.dump(item))
return dbc.get.question_alternative_answer(competition_id, team_id, answer_id)
@protect_route(allowed_roles=["*"], allowed_views=["*"])
def put(self, competition_id, team_id, question_alternative_id):
@blp.arguments(AnswerAddArgsSchema)
@blp.response(http_codes.OK, QuestionAlternativeAnswerSchema)
def put(self, args, competition_id, team_id, answer_id):
""" Add or edit specified quesiton_answer. """
item = dbc.get.question_alternative_answer(competition_id, team_id, question_alternative_id, required=False)
item = dbc.get.question_alternative_answer(competition_id, team_id, answer_id, required=False)
if item is None:
args = answer_parser_add.parse_args(strict=True)
item = dbc.add.question_alternative_answer(args.get("answer"), question_alternative_id, team_id)
item = dbc.add.question_alternative_answer(args.get("answer"), answer_id, team_id)
else:
args = answer_parser_edit.parse_args(strict=True)
item = dbc.edit.default(item, **args)
return item_response(schema.dump(item))
return item
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment