2020-05-09 18:00:07 +00:00
|
|
|
from flask.app import Flask
|
2020-05-21 11:20:27 +00:00
|
|
|
from flask import g, redirect, request
|
2020-05-09 18:00:07 +00:00
|
|
|
from flask.helpers import url_for
|
|
|
|
import time
|
2020-05-10 14:54:53 +00:00
|
|
|
import subprocess
|
2022-06-17 11:38:49 +00:00
|
|
|
from lenticular_cloud.lenticular_services import lenticular_services
|
2022-02-19 22:16:13 +00:00
|
|
|
from ory_hydra_client import Client
|
2022-02-06 22:57:01 +00:00
|
|
|
import os
|
2020-05-09 18:00:07 +00:00
|
|
|
|
2022-04-08 19:29:23 +00:00
|
|
|
from pathlib import Path
|
2020-05-09 18:00:07 +00:00
|
|
|
|
2022-06-17 11:38:49 +00:00
|
|
|
from .pki import pki
|
2022-02-19 22:16:13 +00:00
|
|
|
from .hydra import hydra_service
|
|
|
|
from .translations import init_babel
|
2022-06-17 11:38:49 +00:00
|
|
|
from .model import db, migrate
|
|
|
|
from .views import auth_views, frontend_views, init_login_manager, api_views, pki_views, admin_views, oauth2_views
|
2020-05-09 18:00:07 +00:00
|
|
|
|
|
|
|
|
2020-05-10 14:54:53 +00:00
|
|
|
def get_git_hash():
|
|
|
|
try:
|
|
|
|
return subprocess.check_output(['git', 'rev-parse', 'HEAD'])[:10].decode()
|
|
|
|
except Exception:
|
|
|
|
return ''
|
|
|
|
|
2020-05-09 18:00:07 +00:00
|
|
|
|
2022-02-19 22:16:13 +00:00
|
|
|
def create_app() -> Flask:
|
2022-02-06 22:57:01 +00:00
|
|
|
name = "lenticular_cloud"
|
|
|
|
app = Flask(name, template_folder='template')
|
2020-05-09 18:00:07 +00:00
|
|
|
app.config.from_pyfile('application.cfg')
|
2022-02-06 22:57:01 +00:00
|
|
|
active_cfg = os.getenv('CONFIG_FILE', 'production.cfg')
|
|
|
|
app.config.from_pyfile(active_cfg)
|
2020-05-09 18:00:07 +00:00
|
|
|
|
2020-05-10 14:54:53 +00:00
|
|
|
app.jinja_env.globals['GIT_HASH'] = get_git_hash()
|
|
|
|
|
2020-05-21 11:20:27 +00:00
|
|
|
db.init_app(app)
|
2022-04-08 19:29:23 +00:00
|
|
|
migration_dir = Path(app.root_path) / 'migrations'
|
|
|
|
migrate.init_app(app, db, directory=str(migration_dir))
|
2022-02-20 15:52:06 +00:00
|
|
|
# with app.app_context():
|
|
|
|
# db.create_all()
|
2020-05-21 11:20:27 +00:00
|
|
|
|
2022-02-19 22:16:13 +00:00
|
|
|
init_babel(app)
|
2020-05-09 18:00:07 +00:00
|
|
|
|
2020-05-21 11:20:27 +00:00
|
|
|
#init hydra admin api
|
2022-02-19 22:16:13 +00:00
|
|
|
# hydra_config = hydra.Configuration(
|
|
|
|
# host=app.config['HYDRA_ADMIN_URL'],
|
|
|
|
# username=app.config['HYDRA_ADMIN_USER'],
|
|
|
|
# password=app.config['HYDRA_ADMIN_PASSWORD'])
|
|
|
|
hydra_service.set_hydra_client(Client(base_url=app.config['HYDRA_ADMIN_URL']))
|
|
|
|
|
2020-05-13 15:04:22 +00:00
|
|
|
init_login_manager(app)
|
2020-05-09 18:00:07 +00:00
|
|
|
app.register_blueprint(auth_views)
|
|
|
|
app.register_blueprint(frontend_views)
|
2020-05-21 11:20:27 +00:00
|
|
|
app.register_blueprint(api_views)
|
2020-05-25 18:23:27 +00:00
|
|
|
app.register_blueprint(pki_views)
|
2020-06-01 21:43:10 +00:00
|
|
|
app.register_blueprint(admin_views)
|
2022-02-19 22:16:13 +00:00
|
|
|
app.register_blueprint(oauth2_views)
|
2020-05-09 18:00:07 +00:00
|
|
|
|
|
|
|
@app.before_request
|
|
|
|
def befor_request():
|
|
|
|
request_start_time = time.time()
|
|
|
|
g.request_time = lambda: "%.5fs" % (time.time() - request_start_time)
|
|
|
|
|
2022-06-17 11:38:49 +00:00
|
|
|
lenticular_services.init_app(app)
|
2020-05-09 18:00:07 +00:00
|
|
|
|
2022-06-17 11:38:49 +00:00
|
|
|
pki.init_app(app)
|
2020-05-09 18:00:07 +00:00
|
|
|
|
|
|
|
return app
|
|
|
|
|