68 lines
1.8 KiB
Python
68 lines
1.8 KiB
Python
|
|
"""Flask application factory for the Bluesky Collector web UI."""
|
||
|
|
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
import os
|
||
|
|
|
||
|
|
from flask import Flask
|
||
|
|
|
||
|
|
from . import db as webdb
|
||
|
|
from .helpers import (
|
||
|
|
bsky_post_url,
|
||
|
|
encode_uri,
|
||
|
|
format_dt,
|
||
|
|
format_number,
|
||
|
|
time_ago,
|
||
|
|
truncate,
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
def create_app() -> Flask:
|
||
|
|
app = Flask(
|
||
|
|
__name__,
|
||
|
|
template_folder="templates",
|
||
|
|
)
|
||
|
|
|
||
|
|
app.secret_key = os.environ.get("SECRET_KEY", "bluesky-collector-dev-key")
|
||
|
|
|
||
|
|
app.config["DATABASE_URL"] = os.environ.get(
|
||
|
|
"DATABASE_URL",
|
||
|
|
"postgresql://bluesky:changeme@db:5432/bluesky",
|
||
|
|
)
|
||
|
|
|
||
|
|
# Initialize database pool
|
||
|
|
webdb.init_pool(app.config["DATABASE_URL"])
|
||
|
|
|
||
|
|
# Register Jinja2 globals/filters
|
||
|
|
app.jinja_env.filters["format_dt"] = format_dt
|
||
|
|
app.jinja_env.filters["time_ago"] = time_ago
|
||
|
|
app.jinja_env.filters["truncate_text"] = truncate
|
||
|
|
app.jinja_env.filters["format_number"] = format_number
|
||
|
|
app.jinja_env.globals["encode_uri"] = encode_uri
|
||
|
|
app.jinja_env.globals["bsky_post_url"] = bsky_post_url
|
||
|
|
|
||
|
|
# Register blueprints
|
||
|
|
from .routes.dashboard import bp as dashboard_bp
|
||
|
|
from .routes.accounts import bp as accounts_bp
|
||
|
|
from .routes.statuses import bp as statuses_bp
|
||
|
|
from .routes.mentions import bp as mentions_bp
|
||
|
|
from .routes.export import bp as export_bp
|
||
|
|
from .routes.analysis import bp as analysis_bp
|
||
|
|
|
||
|
|
app.register_blueprint(dashboard_bp)
|
||
|
|
app.register_blueprint(accounts_bp)
|
||
|
|
app.register_blueprint(statuses_bp)
|
||
|
|
app.register_blueprint(mentions_bp)
|
||
|
|
app.register_blueprint(export_bp)
|
||
|
|
app.register_blueprint(analysis_bp)
|
||
|
|
|
||
|
|
# Teardown
|
||
|
|
@app.teardown_appcontext
|
||
|
|
def close_db(exc):
|
||
|
|
pass # Pool is long-lived, closed at shutdown
|
||
|
|
|
||
|
|
import atexit
|
||
|
|
atexit.register(webdb.close_pool)
|
||
|
|
|
||
|
|
return app
|