Code owners
Assign users and groups as approvers for specific file changes. Learn more.
delete.py 2.95 KiB
"""
This file contains functionality to delete data to the database.
"""
import app.core.http_codes as codes
import app.database.controller as dbc
from app.core import db
from app.database.models import Whitelist
from flask_restx import abort
def default(item):
""" Deletes item and commits. """
try:
db.session.delete(item)
db.session.commit()
except:
db.session.rollback()
abort(codes.INTERNAL_SERVER_ERROR, f"Item of type {type(item)} could not be deleted")
def whitelist_to_blacklist(filters):
"""
Remove whitelist by condition(filters) and insert those into blacklist
Example: When delete user all whitelisted tokens for that user should be blacklisted
"""
whitelist = Whitelist.query.filter(filters).all()
for item in whitelist:
dbc.add.blacklist(item.jti)
Whitelist.query.filter(filters).delete()
dbc.utils.commit()
def component(item_component):
""" Deletes component. """
default(item_component)
def _slide(item_slide):
""" Internal delete for slide. """
for item_question in item_slide.questions:
question(item_question)
for item_component in item_slide.components:
default(item_component)
default(item_slide)
def slide(item_slide):
""" Deletes slide and updates order of other slides if neccesary. """
competition_id = item_slide.competition_id
slide_order = item_slide.order
_slide(item_slide)
# Update slide order for all slides after the deleted slide
slides_in_same_competition = dbc.get.slide_list(competition_id)
for other_slide in slides_in_same_competition:
if other_slide.order > slide_order:
other_slide.order -= 1
db.session.commit()
def team(item_team):
""" Deletes team, its question answers and the code. """
for item_question_answer in item_team.question_answers:
question_answers(item_question_answer)
for item_code in item_team.code:
code(item_code)
default(item_team)
def question(item_question):
""" Deletes question and its alternatives and answers. """
for item_question_answer in item_question.question_answers:
question_answers(item_question_answer)
for item_alternative in item_question.alternatives:
alternatives(item_alternative)
default(item_question)
def alternatives(item_alternatives):
""" Deletes question alternative. """
default(item_alternatives)
def question_answers(item_question_answers):
""" Deletes question answer. """
default(item_question_answers)
def competition(item_competition):
""" Deletes competition, its slides, teams and codes. """
for item_slide in item_competition.slides:
_slide(item_slide)
for item_team in item_competition.teams:
team(item_team)
for item_code in item_competition.codes:
code(item_code)
default(item_competition)
def code(item_code):
""" Deletes competition code. """
default(item_code)