import sqlite3

from flask import (Flask, request, session, g, redirect,
                   url_for, abort, render_template, flash)

from flask_debugtoolbar import DebugToolbarExtension

from config import *
from generate import generate_password

app = Flask(__name__)
app.config.from_object(__name__)

# Load default config and override config from an environment variable
app.config.update(dict(
    DATABASE=os.path.join(app.root_path, 'pypass.db'),
    SECRET_KEY='xN~@en@B%l0Kli6TBVUoxOP(tIJ_JnC@=9(a8N8cg27J)*nQ!c',
    USERNAME='admin',
    PASSWORD='default',
    DEBUG_TB_INTERCEPT_REDIRECTS=False
))

app.config.from_envvar('PASSGEN_SETTINGS', silent=True)

app.debug = DEBUG
toolbar = DebugToolbarExtension(app)


def connect_db():
    """Connects to the specific database."""

    rv = sqlite3.connect(app.config['DATABASE'])
    rv.row_factory = sqlite3.Row

    return rv


def init_db():

    with app.app_context():

        db = get_db()

        with app.open_resource('schema.sql', mode='r') as f:
            db.cursor().executescript(f.read())

        db.commit()


@app.cli.command('initdb')
def initdb_command():
    """Initializes the database."""

    init_db()

    print('Initialized the database.')


def get_db():
    """Opens a new database connection if there is none yet for the
    current application context.
    
    """
    if not hasattr(g, 'sqlite_db'):
        g.sqlite_db = connect_db()

    return g.sqlite_db


@app.teardown_appcontext
def close_db(error):
    """Closes the database again at the end of the request."""

    if hasattr(g, 'sqlite_db'):
        g.sqlite_db.close()


@app.route('/')
def show_entries():

    db = get_db()
    cur = db.execute('select type, secret from entries order by id desc')
    entries = cur.fetchall()

    return render_template('generate.html', entries=entries)


@app.route('/generate', methods=['POST'])
def add_entry():

    if not session.get('logged_in'):
        abort(401)

    # db = get_db()
    # db.execute('insert into entries (type, secret) values (?, ?)',
    #            [request.form['type'], request.form['secret']])
    # db.commit()

    # output_type = request.form['type']
    output_type = request.form.get('type', 'words')
    # dice = int(request.form['dice'])
    dice = request.form.get('dice', 5)
    # rolls = int(request.form['rolls'])
    rolls = request.form.get('rolls', 5)
    # length = request.form['length'].strip()
    length = request.form.get('length', 20)
    num = 1

    if not length:  # type(length) is not int or
        length = 20
    else:
        length = int(length)

    if output_type is 'mixed' or 'numbers':
        dice, rolls = 5, 5

    print(output_type, dice, rolls, length, num)
    print(type(output_type), type(dice), type(rolls), type(length), type(num))

    try:
        secret = generate_password(number_rolls=rolls, number_dice=dice,
                                   how_many=num, output_type=output_type,
                                   password_length=length)
        flash(secret)
    except Exception as e:
        print(e)

    # flash('New entry was successfully posted')

    return redirect(url_for('show_entries'))


@app.route('/login', methods=['GET', 'POST'])
def login():

    error = None

    if request.method == 'POST':

        if request.form['username'] != app.config['USERNAME']:
            error = 'Invalid username'

        elif request.form['password'] != app.config['PASSWORD']:
            error = 'Invalid password'

        else:

            session['logged_in'] = True

            flash('You were logged in')
            return redirect(url_for('show_entries'))

    return render_template('login.html', error=error)


@app.route('/logout')
def logout():

    session.pop('logged_in', None)
    flash('You were logged out')

    return redirect(url_for('show_entries'))


if __name__ == '__main__':
    init_db()
    app.run()

Add main application, with call to generate_password.