from flask import Blueprint, flash, request, redirect, url_for from flask import render_template from files.auth import admin_required from files.models import Category, File, db from files.files import _delete_file bp = Blueprint('categories', __name__, url_prefix='/categories') @bp.route('/') def index(): categories = Category.query.all() return render_template('categories/index.html', categories=categories) @bp.route('/create', methods=['GET', 'POST']) @admin_required def create(): if request.method == 'POST': name = request.form['category.create.name'] error = None if not name: error = "Name is required" if error is not None: flash(error) else: category = Category(name) db.session.add(category) db.session.commit() return redirect(url_for( 'categories.view', category_id=category.id)) return render_template('categories/create.html') @bp.route('/rename', methods=['POST']) @admin_required def rename(): name = request.form['category.rename.name'] if not name: flash('No valid name') return redirect(request.url) if 'category.rename.category' not in request.form: flash('No category selected') return redirect(request.url) category = Category.query.get(request.form['category.rename.category']) category.name = name db.session.commit() return redirect(url_for('categories.view', category_id=category.id)) @bp.route('') def view(category_id): category = Category.query.get(category_id) files = category.files return render_template( 'categories/view.html', category=category, files=files) @bp.route('/delete', methods=['POST']) @admin_required def delete(): if 'category.rename.category' not in request.form: flash('No category selected') return redirect(request.url) category = Category.query.get(request.form['category.rename.category']) files = File.query.filter_by(category_id=category.id).all() for file in files: _delete_file(file) db.session.delete(category) db.session.commit() return redirect(url_for('categories.index'))