42 lines
1.1 KiB
Python
42 lines
1.1 KiB
Python
from flask import Flask, current_app
|
|
from flask_sqlalchemy import SQLAlchemy
|
|
from sqlalchemy.engine.url import make_url
|
|
import logging
|
|
import os
|
|
|
|
|
|
db = SQLAlchemy()
|
|
|
|
logger = logging.getLogger('sqlalchemy.engine')
|
|
logger.setLevel(logging.INFO)
|
|
if not logger.handlers:
|
|
handler = logging.StreamHandler()
|
|
handler.setFormatter(logging.Formatter('%(asctime)s [%(levelname)s] %(message)s'))
|
|
logger.addHandler(handler)
|
|
|
|
def is_in_memory_sqlite():
|
|
uri = current_app.config.get("SQLALCHEMY_DATABASE_URI")
|
|
if not uri:
|
|
return False
|
|
url = make_url(uri)
|
|
return url.get_backend_name() == "sqlite" and url.database == ":memory:"
|
|
|
|
def create_app():
|
|
from config import Config
|
|
app = Flask(__name__)
|
|
app.secret_key = os.getenv('SECRET_KEY', 'dev-secret-key-unsafe') # You know what to do for prod
|
|
app.config.from_object(Config)
|
|
|
|
db.init_app(app)
|
|
|
|
with app.app_context():
|
|
from . import models
|
|
if is_in_memory_sqlite():
|
|
db.create_all()
|
|
|
|
from .routes import main
|
|
from .routes.images import image_bp
|
|
app.register_blueprint(main)
|
|
app.register_blueprint(image_bp)
|
|
|
|
return app
|