""" This file contains some miscellaneous functionality. """ import app.core.http_codes as codes from app.core import db from app.core.codes import generate_code_string from app.database.models import Code from flask_restx import abort def move_slides(item_competition, start_order, end_order): """ Changes a slide order and then arranges other affected slides. """ slides = item_competition.slides # Move up if start_order < end_order: for i in range(start_order + 1, end_order): slides[i].order -= 1 # Move down elif start_order > end_order: for i in range(end_order, start_order): slides[i].order += 1 # start = 5, end = 1 # 1->2, 2->3, 4->5 # 5 = 1 slides[start_order].order = end_order return commit_and_refresh(item_competition) def generate_unique_code(): """ Generates a unique competition code. """ code = generate_code_string() while db.session.query(Code).filter(Code.code == code).count(): code = generate_code_string() return code def refresh(item): """ Refreshes the provided item. """ try: db.session.refresh(item) except Exception as e: abort(codes.INTERNAL_SERVER_ERROR, f"Refresh failed!\n{str(e)}") return item def commit(): """ Commits to the database. """ try: db.session.commit() except Exception as e: db.session.rollback() abort(codes.INTERNAL_SERVER_ERROR, f"Commit failed!\n{str(e)}") def commit_and_refresh(item): """ Commits and refreshes the provided item. """ commit() return refresh(item)