-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.py
More file actions
97 lines (70 loc) · 2.15 KB
/
app.py
File metadata and controls
97 lines (70 loc) · 2.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#!/usr/bin/env python3
# app.py
# Copyright (c) 2026 Banshee (https://www.banshee.pro)
# License: AGPL-3.0 (https://www.gnu.org/licenses/agpl-3.0.html)
import os
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent / "pymodules"))
from flask import Flask, g
from flask_compress import Compress
from flask_login import LoginManager
from vite_fusion import register_vite_assets
from routes import register_routes
from config import Config
from auth import User
app = Flask(
__name__,
static_folder=None,
template_folder=os.path.join(os.path.dirname(__file__), "ui", "template")
)
app.config.from_object(Config)
Compress(app)
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = "login"
login_manager.login_message = None
@login_manager.user_loader
def load_user(user_id):
return User.get(user_id)
@app.before_request
def before_request():
import secrets
g.nonce = secrets.token_urlsafe(16)
register_vite_assets(
app,
dev_mode=app.config.get("DEV_MODE", True),
dev_server_url="http://localhost:5173",
dist_path="/ui/vue3/dist",
manifest_path=os.path.join(os.path.dirname(__file__), "ui", "vue3", "dist", ".vite", "manifest.json"),
nonce_provider=lambda: g.get("nonce"),
logger=None
)
register_routes(app)
def run_development(port):
app.run(
host="0.0.0.0",
port=port,
debug=True
)
def run_production(port, workers):
from hypercorn.config import Config as HypercornConfig
from hypercorn.run import run
config = HypercornConfig()
config.bind = [f"0.0.0.0:{port}"]
config.workers = workers
config.accesslog = "-"
config.application_path = "app:app"
run(config)
if __name__ == "__main__":
from config import Config as AppConfig, CONF
from serverbanner import print_banner
dev_mode = AppConfig.DEV_MODE
port = AppConfig.PORT
workers = AppConfig.WORKERS
mode = "Development" if dev_mode else "Production"
print_banner(port, mode, workers, CONF.get("using_default_credentials", False))
if dev_mode:
run_development(port)
else:
run_production(port, workers)