Skip to content
Snippets Groups Projects
Commit d580fbd0 authored by Joseph Weston's avatar Joseph Weston
Browse files

add helpers for making API parameters required

parent b91182a4
No related branches found
No related tags found
No related merge requests found
def nonempty_string(s):
s = str(s)
if not s:
raise ValueError('cannot be an empty string')
return s
def required_string(parser, name):
parser.add_argument(name, type=nonempty_string,
required=True, nullable=False)
......@@ -7,9 +7,9 @@ from werkzeug.datastructures import FileStorage
from pony import orm
from ..helpers import yaml_helper
from ..helpers import yaml_helper, db_helper
from ..models import db, Exam, Problem, FeedbackOption
from ..helpers import db_helper
from ._helpers import required_string
class ExamConfig(Resource):
......@@ -31,11 +31,12 @@ class ExamConfig(Resource):
'yaml': yml
}
patch_parser = reqparse.RequestParser()
required_string(patch_parser, 'yaml')
@orm.db_session
def patch(self, id):
parser = reqparse.RequestParser()
parser.add_argument('yaml', type=str, required=True)
args = parser.parse_args()
args = patch_parser.parse_args()
exam = Exam[id]
......
......@@ -6,15 +6,12 @@ from flask_restful import Resource, reqparse
from pony import orm
from ..models import db, Grader
from ._helpers import required_string
parser = reqparse.RequestParser()
parser.add_argument('first_name', type=str, required=True)
parser.add_argument('last_name', type=str, required=True)
# TODO: when making new database structure, have only a single
# 'name' field: it is just an identifier
class Graders(Resource):
""" Graders that are able to use the software, also logged during grading """
......@@ -42,6 +39,10 @@ class Graders(Resource):
for g in Grader.select()
]
post_parser = reqparse.RequestParser()
required_string(post_parser, 'first_name')
required_string(post_parser, 'last_name')
@orm.db_session
def post(self):
"""add a grader.
......@@ -58,15 +59,13 @@ class Graders(Resource):
first_name: str
last_name: str
"""
args = parser.parse_args()
args = post_parser.parse_args()
try:
Grader(first_name= args['first_name'],
last_name=args['last_name'])
last_name=args['last_name'])
orm.commit()
except KeyError as _e:
abort(400, _e)
except KeyError as error:
abort(400, error)
return self._get()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment