diff --git a/server/app/apis/alternatives.py b/server/app/apis/alternatives.py index 8c247b40da2e33bda5cead7d28ce778f73881c6a..48513250554ccf391bf7647d2cf8211992f6f34a 100644 --- a/server/app/apis/alternatives.py +++ b/server/app/apis/alternatives.py @@ -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) diff --git a/server/app/apis/answers.py b/server/app/apis/answers.py index 40e9407fc5d1df9cac874f7d16d28283278adf24..e968e6ecf3d5c70a7987798d3f477cb21fcf7ec0 100644 --- a/server/app/apis/answers.py +++ b/server/app/apis/answers.py @@ -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)) diff --git a/server/app/apis/competitions.py b/server/app/apis/competitions.py index a18ed85ed92897f016fa44db4f69281b5d749526..cc135c09cd82d2a137bcb80c2e6f66bcc28828a6 100644 --- a/server/app/apis/competitions.py +++ b/server/app/apis/competitions.py @@ -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)) diff --git a/server/app/apis/components.py b/server/app/apis/components.py index c68ca92864a75b21c5ac03d8a519029a3e44fd0a..01b1d82780963d0468f0e9a17d2c522b3d3ea8a2 100644 --- a/server/app/apis/components.py +++ b/server/app/apis/components.py @@ -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) diff --git a/server/app/apis/questions.py b/server/app/apis/questions.py index 7d16d3c89e660345c510d84dc645f111dbd7fbf4..bd14d389b530d20d943f60ce9541f5f705878660 100644 --- a/server/app/apis/questions.py +++ b/server/app/apis/questions.py @@ -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)) diff --git a/server/app/apis/slides.py b/server/app/apis/slides.py index 3c25f901ba48c86eac2c421da1bd3e659f24350a..4720fd4468f3636ab3058278bafe001e184da639 100644 --- a/server/app/apis/slides.py +++ b/server/app/apis/slides.py @@ -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)) diff --git a/server/app/apis/teams.py b/server/app/apis/teams.py index 2bb0a23570e5de4abb1668347a6fe287b56e7957..bdf0bb88aea0a4435ee76345cdcbe462ca6ac4b0 100644 --- a/server/app/apis/teams.py +++ b/server/app/apis/teams.py @@ -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)) diff --git a/server/app/apis/users.py b/server/app/apis/users.py index b9dba528a1a3529ec9e340d4418e44bc2e20fedb..b3423d37cccc1638802e1ee0da398720dbe86217 100644 --- a/server/app/apis/users.py +++ b/server/app/apis/users.py @@ -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("/") diff --git a/server/app/database/controller/edit.py b/server/app/database/controller/edit.py index 49fcef87a4d28131501786782dbbf95fc58ac1ae..b1f5bc91e045e43c5f69618a685a39f86c7b081d 100644 --- a/server/app/database/controller/edit.py +++ b/server/app/database/controller/edit.py @@ -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