Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 

161 lignes
5.2 KiB

# -*- coding: utf-8 -*-
"""
:author: Grey Li (李辉)
:url: http://greyli.com
:copyright: © 2018 Grey Li <withlihui@gmail.com>
:license: MIT, see LICENSE for more details.
"""
import os
import click
from flask import Flask, render_template
from flask_login import current_user
from flask_wtf.csrf import CSRFError
from albumy.blueprints.admin import admin_bp
from albumy.blueprints.ajax import ajax_bp
from albumy.blueprints.auth import auth_bp
from albumy.blueprints.main import main_bp
from albumy.blueprints.user import user_bp
from albumy.extensions import bootstrap, db, login_manager, mail, dropzone, moment, whooshee, avatars, csrf
from albumy.models import Role, User, Photo, Tag, Follow, Notification, Comment, Collect, Permission
from albumy.settings import config
def create_app(config_name=None):
if config_name is None:
config_name = os.getenv('FLASK_CONFIG', 'development')
app = Flask(__name__)
app.config.from_object(config[config_name])
register_extensions(app)
register_blueprints(app)
register_commands(app)
register_errorhandlers(app)
register_shell_context(app)
register_template_context(app)
return app
def register_extensions(app):
bootstrap.init_app(app)
db.init_app(app)
login_manager.init_app(app)
mail.init_app(app)
dropzone.init_app(app)
moment.init_app(app)
whooshee.init_app(app)
avatars.init_app(app)
csrf.init_app(app)
def register_blueprints(app):
app.register_blueprint(main_bp)
app.register_blueprint(user_bp, url_prefix='/user')
app.register_blueprint(auth_bp, url_prefix='/auth')
app.register_blueprint(admin_bp, url_prefix='/admin')
app.register_blueprint(ajax_bp, url_prefix='/ajax')
def register_shell_context(app):
@app.shell_context_processor
def make_shell_context():
return dict(db=db, User=User, Photo=Photo, Tag=Tag,
Follow=Follow, Collect=Collect, Comment=Comment,
Notification=Notification)
def register_template_context(app):
@app.context_processor
def make_template_context():
if current_user.is_authenticated:
notification_count = Notification.query.with_parent(current_user).filter_by(is_read=False).count()
else:
notification_count = None
return dict(notification_count=notification_count)
def register_errorhandlers(app):
@app.errorhandler(400)
def bad_request(e):
return render_template('errors/400.html'), 400
@app.errorhandler(403)
def forbidden(e):
return render_template('errors/403.html'), 403
@app.errorhandler(404)
def page_not_found(e):
return render_template('errors/404.html'), 404
@app.errorhandler(413)
def request_entity_too_large(e):
return render_template('errors/413.html'), 413
@app.errorhandler(500)
def internal_server_error(e):
return render_template('errors/500.html'), 500
@app.errorhandler(CSRFError)
def handle_csrf_error(e):
return render_template('errors/400.html', description=e.description), 500
def register_commands(app):
@app.cli.command()
@click.option('--drop', is_flag=True, help='Create after drop.')
def initdb(drop):
"""Initialize the database."""
if drop:
click.confirm('This operation will delete the database, do you want to continue?', abort=True)
db.drop_all()
click.echo('Drop tables.')
db.create_all()
click.echo('Initialized database.')
@app.cli.command()
def init():
"""Initialize Albumy."""
click.echo('Initializing the database...')
db.create_all()
click.echo('Initializing the roles and permissions...')
Role.init_role()
click.echo('Done.')
@app.cli.command()
@click.option('--user', default=10, help='Quantity of users, default is 10.')
@click.option('--follow', default=30, help='Quantity of follows, default is 30.')
@click.option('--photo', default=30, help='Quantity of photos, default is 30.')
@click.option('--tag', default=20, help='Quantity of tags, default is 20.')
@click.option('--collect', default=50, help='Quantity of collects, default is 50.')
@click.option('--comment', default=100, help='Quantity of comments, default is 100.')
def forge(user, follow, photo, tag, collect, comment):
"""Generate fake data."""
from albumy.fakes import fake_admin, fake_comment, fake_follow, fake_photo, fake_tag, fake_user, fake_collect
db.drop_all()
db.create_all()
click.echo('Initializing the roles and permissions...')
Role.init_role()
click.echo('Generating the administrator...')
fake_admin()
click.echo('Generating %d users...' % user)
fake_user(user)
click.echo('Generating %d follows...' % follow)
fake_follow(follow)
click.echo('Generating %d tags...' % tag)
fake_tag(tag)
click.echo('Generating %d photos...' % photo)
fake_photo(photo)
click.echo('Generating %d collects...' % photo)
fake_collect(collect)
click.echo('Generating %d comments...' % comment)
fake_comment(comment)
click.echo('Done.')