import os import click from flask import current_app from flask.cli import with_appcontext from werkzeug.security import generate_password_hash from files.models import db, User, Category, File, FileType def init_db(): db.drop_all() db.create_all() def generate_admin(): username = current_app.config['USERNAME'] password = current_app.config['PASSWORD'] user = User(username, generate_password_hash(password)) db.session.add(user) db.session.commit() def add_defaults(): default_category = Category('Default') default_file_type = FileType('Default') code_file_type = FileType('Code') image_file_type = FileType('Image') db.session.add(default_category) db.session.add(default_file_type) db.session.add(code_file_type) db.session.add(image_file_type) db.session.commit() def add_files(): existing_files = os.listdir(current_app.config['UPLOAD_FOLDER']) default_category = Category.query.filter_by(name='Default').first() default_file_type = FileType.query.filter_by(name='Default').first() added = 0 for existing_file in existing_files: search = File.query.filter_by(filename=existing_file).first() if search is None: file = File( existing_file, 0, default_category.id, default_file_type.id) db.session.add(file) added += 1 db.session.commit() return added @click.command('init-db') @with_appcontext def init_db_command(): """ Creates the db file """ init_db() @click.command("add-defaults") @with_appcontext def add_defaults_command(): """ Initializes the database with default data """ add_defaults() click.echo("Defaults added") @click.command('generate-admin') @with_appcontext def generate_admin_command(): """Creates the admin of the system""" generate_admin() click.echo('The admin was created') @click.command('add-files') @with_appcontext def add_files_command(): """ Generates the rows in the database for the files currently uploaded They all will have default privacy, so, public """ added_size = add_files() click.echo(f'added {added_size} files') def init_app(app): app.cli.add_command(init_db_command) app.cli.add_command(add_defaults_command) app.cli.add_command(generate_admin_command) app.cli.add_command(add_files_command)