Files
flask-files/files/commands.py

102 lines
2.4 KiB
Python

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)