|
1 |
| -from typing import Optional |
2 |
| - |
3 |
| -from gevent import monkey |
4 |
| -monkey.patch_all() |
5 |
| - |
6 |
| -import sentry_sdk |
7 |
| -import os |
8 |
| -from sqlalchemy.exc import OperationalError |
9 |
| - |
10 |
| -from flask import Flask |
11 |
| -from flask_login import LoginManager |
12 |
| -from flask_sqlalchemy import SQLAlchemy |
13 |
| -from flask_migrate import Migrate |
14 |
| -from flask_socketio import SocketIO |
15 |
| -from config import Config, get_config |
16 |
| -from urllib.parse import urlparse |
17 |
| -from redis import Redis |
18 |
| - |
19 |
| -# Initialize extensions |
20 |
| -db = SQLAlchemy() |
21 |
| -login_manager = LoginManager() |
22 |
| -login_manager.login_view = 'api.login' |
23 |
| -migrate = Migrate() |
24 |
| -socketio = SocketIO(async_mode='gevent') |
25 |
| - |
26 |
| -DEFAULT_REDIS_URL = 'redis://localhost:6379/0' |
27 |
| - |
28 |
| -# Redis setup |
29 |
| -def create_redis_connection(): |
30 |
| - redis_url = os.environ.get('REDIS_URL', DEFAULT_REDIS_URL) |
31 |
| - parsed_url = urlparse(redis_url) |
32 |
| - redis_host = parsed_url.hostname |
33 |
| - redis_port = parsed_url.port or 6379 |
34 |
| - return Redis(host=redis_host, port=redis_port) |
35 |
| - |
36 |
| -redis = create_redis_connection() |
37 |
| - |
38 |
| -# Sentry setup |
39 |
| -def initialize_sentry(app): |
40 |
| - with app.app_context(): |
41 |
| - from .models import get_settings_dict |
42 |
| - try: |
43 |
| - settings = get_settings_dict() |
44 |
| - dsn = settings.get('sentry', {}).get('controller_dsn', None) |
45 |
| - except OperationalError: |
46 |
| - print("Could not get settings dict, db not initialized.") |
47 |
| - return |
48 |
| - if dsn: |
49 |
| - sentry_sdk.init(dsn=dsn, traces_sample_rate=1.0, profiles_sample_rate=1.0) |
50 |
| - |
51 |
| -def create_app(config: Optional[Config] = None): |
52 |
| - config = config or get_config() |
53 |
| - app = Flask(__name__, static_folder='../../frontend/dist', static_url_path='/', template_folder='../templates') |
54 |
| - app.config.from_object(config) |
55 |
| - |
56 |
| - db.init_app(app) |
57 |
| - with app.app_context(): |
58 |
| - os.makedirs('../db', exist_ok=True) |
59 |
| - |
60 |
| - db.create_all() |
61 |
| - login_manager.init_app(app) |
62 |
| - migrate.init_app(app, db) |
63 |
| - socketio.init_app(app, cors_allowed_origins="*", message_queue=os.environ.get('REDIS_URL', DEFAULT_REDIS_URL)) |
64 |
| - initialize_sentry(app) |
65 |
| - |
66 |
| - from app.views.base import setup_base_routes |
67 |
| - setup_base_routes(app) |
68 |
| - |
69 |
| - from app.api import api as api_blueprint |
70 |
| - app.register_blueprint(api_blueprint, url_prefix='/api') |
71 |
| - |
72 |
| - return app |
0 commit comments