Coverage for heritrace/__init__.py: 100%
35 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-07-26 08:34 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-07-26 08:34 +0000
1# SPDX-FileCopyrightText: 2024-2025 Arcangelo Massari <arcangelo.massari@unibo.it>
2#
3# SPDX-License-Identifier: ISC
5import logging
6import os
7import sys
9from flask import Flask
10from flask_babel import Babel
11from flask_login import LoginManager
12from redis import Redis
14from heritrace.cli import register_cli_commands
15from heritrace.extensions import init_extensions
16from heritrace.routes import register_blueprints
17from heritrace.utils.sparql_utils import (
18 configure_worker_pool,
19 get_available_classes,
20 warm_catalogue,
21 warm_time_vault,
22)
25def create_app(config_object: object = None) -> Flask:
26 app = Flask(__name__)
28 if config_object:
29 app.config.from_object(config_object)
31 logging.basicConfig(
32 level=logging.INFO,
33 format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
34 )
35 app.logger.setLevel(logging.INFO)
37 register_cli_commands(app)
39 is_translate_command = "translate" in sys.argv
41 if not is_translate_command:
42 babel = Babel()
43 login_manager = LoginManager()
45 redis_url = (
46 app.config.get("REDIS_URL")
47 or os.environ.get("REDIS_URL")
48 or "redis://localhost:6379/0"
49 )
50 app.logger.info("Connecting to Redis at: %s", redis_url)
51 redis_client = Redis.from_url(redis_url, decode_responses=True)
53 with app.app_context():
54 init_extensions(app, babel, login_manager, redis_client)
55 configure_worker_pool(
56 app.config["MAX_WORKERS"], app.config["GUNICORN_WORKERS"]
57 )
59 app.logger.info("[STARTUP] Pre-computing available classes cache...")
60 available_classes = get_available_classes()
61 app.logger.info("[STARTUP] Available classes cache computed successfully")
62 warm_catalogue(available_classes, app.config["CATALOGUE_DEFAULT_PER_PAGE"])
63 warm_time_vault()
65 register_blueprints(app)
67 return app