from flask import Flask, Blueprint, flash, request, redirect, url_for, current_app, render_template, jsonify from werkzeug.exceptions import abort from files.db import get_db from files.auth import admin_required from files.files import get_files_by_category bp = Blueprint('categories', __name__, url_prefix='/categories') def get_categories(): db = get_db() categories = db.execute( 'SELECT id, name' ' FROM categories' ' ORDER BY name DESC' ).fetchall() return categories def get_category(id): db = get_db() category = db.execute( 'SELECT id, name' ' FROM categories' ' WHERE id = ?' ' LIMIT 1', (id,) ).fetchone() return category def get_files_by_category(id): db = get_db() files = db.execute( 'SELECT id, filename, private' ' FROM files' ' WHERE category = ?' ' ORDER BY filename DESC', (id,) ).fetchall() return files @bp.route('/') def index(): categories = get_categories() 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['name'] error = None if not name: error = "Name is required" if error is not None: flash(error) else: db = get_db() db.execute( 'INSERT INTO categories (name)' ' VALUES (?)', (name,) ) db.commit() return redirect(url_for('categories.index')) return render_template('categories/create.html') @bp.route('') def view(id): category = get_category(id) files = get_files_by_category(id) return render_template('categories/view.html', category=category, files=files) @bp.route('//update') @admin_required def update(): pass @bp.route('//delete') @admin_required def delete(): pass