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

Refactor edit

parent 5e859d27
No related branches found
No related tags found
1 merge request!84Refactor edit
Pipeline #41726 passed
......@@ -37,7 +37,7 @@ class QuestionAlternatives(Resource):
def put(self, CID, SOrder, QID, AID):
args = question_alternative_parser.parse_args(strict=True)
item = dbc.get.one(QuestionAlternative, AID)
item = dbc.edit.question_alternative(item, **args)
item = dbc.edit.default(item, **args)
return item_response(schema.dump(item))
@check_jwt(editor=True)
......
......@@ -37,5 +37,5 @@ class QuestionAnswers(Resource):
def put(self, CID, TID, AID):
args = question_answer_edit_parser.parse_args(strict=True)
item = dbc.get.one(QuestionAnswer, AID)
item = dbc.edit.question_answer(item, **args)
item = dbc.edit.default(item, **args)
return item_response(schema.dump(item))
......@@ -42,7 +42,7 @@ class Competitions(Resource):
def put(self, CID):
args = competition_parser.parse_args(strict=True)
item = dbc.get.one(Competition, CID)
item = dbc.edit.competition(item, **args)
item = dbc.edit.default(item, **args)
return item_response(schema.dump(item))
......
......@@ -25,7 +25,7 @@ class ComponentByID(Resource):
def put(self, CID, SOrder, component_id):
args = component_parser.parse_args()
item = dbc.get.one(Component, component_id)
item = dbc.edit.component(item, **args)
item = dbc.edit.default(item, **args)
return item_response(schema.dump(item))
@check_jwt(editor=True)
......
......@@ -48,7 +48,7 @@ class QuestionById(Resource):
args = question_parser.parse_args(strict=True)
item_question = dbc.get.question(CID, SID, QID)
item_question = dbc.edit.question(item_question, **args)
item_question = dbc.edit.default(item_question, **args)
return item_response(schema.dump(item_question))
......
......@@ -44,7 +44,7 @@ class Slides(Resource):
timer = args.get("timer")
item_slide = dbc.get.slide(CID, SOrder)
item_slide = dbc.edit.slide(item_slide, title, timer)
item_slide = dbc.edit.default(item_slide, title=title, timer=timer)
return item_response(schema.dump(item_slide))
......
......@@ -53,5 +53,5 @@ class Teams(Resource):
item_team = dbc.get.team(CID, TID)
item_team = dbc.edit.team(item_team, name=name, competition_id=CID)
item_team = dbc.edit.default(item_team, name=name, competition_id=CID)
return item_response(schema.dump(item_team))
......@@ -19,7 +19,12 @@ def edit_user(item_user, args):
if User.query.filter(User.email == args["email"]).count() > 0:
api.abort(codes.BAD_REQUEST, "Email is already in use")
return dbc.edit.user(item_user, **args)
try:
args["name"] = args.get("name").title()
except Exception:
pass
return dbc.edit.default(item_user, **args)
@api.route("/")
......
......@@ -26,130 +26,28 @@ def switch_order(item1, item2):
return item1
def component(item, x, y, w, h, data):
""" Edits position, size and content of the provided component. """
if x:
item.x = x
if y:
item.y = y
if w:
item.w = w
if h:
item.h = h
if data:
item.data = data
db.session.commit()
db.session.refresh(item)
return item
def slide(item, title=None, timer=None):
""" Edits the title and timer of the slide. """
if title:
item.title = title
if timer:
item.timer = timer
db.session.commit()
db.session.refresh(item)
return item
def team(item_team, name=None, competition_id=None):
""" Edits the name and competition of the team. """
if name:
item_team.name = name
if competition_id:
item_team.competition_id = competition_id
db.session.commit()
db.session.refresh(item_team)
return item_team
def competition(item, name=None, year=None, city_id=None):
""" Edits the name and year of the competition. """
if name:
item.name = name
if year:
item.year = year
if city_id:
item.city_id = city_id
db.session.commit()
db.session.refresh(item)
return item
def user(item, name=None, email=None, city_id=None, role_id=None):
""" Edits the name, email, city and role of the user. """
if name:
item.name = name.title()
if email:
item.email = email
if city_id:
item.city_id = city_id
if role_id:
item.role_id = role_id
def default(item, **kwargs):
"""
For every keyword argument, set that attribute on item to the given value.
Raise error if item doesn't already have that attribute. Do nothing if the
value for a given key is None. Works for any type of item.
Example:
>>> user = default(user, name="Karl Karlsson") # Change name
>>> user.name
Karl Karlsson
>>> user = default(user, efternamn="Jönsson") # Try to set attribute that doesn't exist
AttributeError: Item of type <class 'app.database.models.User'> has no attribute 'efternamn'
>>> user = default(user, name=None) # Nothing happens if value is None
>>> user.name
Karl Karlsson
"""
for key, value in kwargs.items():
if not hasattr(item, key):
raise AttributeError(f"Item of type {type(item)} has no attribute '{key}'")
if value is not None:
setattr(item, key, value)
db.session.commit()
db.session.refresh(item)
return item
def question(item_question, name=None, total_score=None, type_id=None, slide_id=None):
""" Edits the name, score, type and slide of the question. """
if name:
item_question.name = name
if total_score:
item_question.total_score = total_score
if type_id:
item_question.type_id = type_id
if slide_id:
item_question.slide_id = slide_id
db.session.commit()
db.session.refresh(item_question)
return item_question
def question_alternative(item, text=None, value=None):
if text:
item.text = text
if value:
item.value = value
db.session.commit()
db.session.refresh(item)
return item
def question_answer(item, data=None, score=None):
if data:
item.data = data
if score:
item.score = score
db.session.commit()
db.session.refresh(item)
return item
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