Coverage for heritrace/__init__.py: 92%
36 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-10-13 17:12 +0000
« prev ^ index » next coverage.py v7.6.12, created at 2025-10-13 17:12 +0000
1import logging
2import os
3import sys
5from flask import Flask
6from flask_babel import Babel
7from flask_login import LoginManager
8from redis import Redis
10from heritrace.cli import register_cli_commands
11from heritrace.utils.sparql_utils import precompute_available_classes_cache
14def create_app(config_object=None):
15 app = Flask(__name__)
17 if config_object:
18 app.config.from_object(config_object)
20 logging.basicConfig(
21 level=logging.INFO,
22 format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
23 )
24 app.logger.setLevel(logging.INFO)
26 register_cli_commands(app)
28 is_translate_command = 'translate' in sys.argv
30 if not is_translate_command:
31 babel = Babel()
32 login_manager = LoginManager()
34 redis_url = os.environ.get('REDIS_URL', 'redis://localhost:6379/0')
35 app.logger.info(f"Connecting to Redis at: {redis_url}")
36 redis_client = Redis.from_url(redis_url, decode_responses=True)
38 from heritrace.extensions import init_extensions
39 from heritrace.routes import register_blueprints
41 init_extensions(app, babel, login_manager, redis_client)
43 with app.app_context():
44 app.logger.info("[STARTUP] Pre-computing available classes cache...")
45 try:
46 precompute_available_classes_cache()
47 app.logger.info("[STARTUP] Available classes cache computed successfully")
48 except Exception as e:
49 app.logger.warning(f"[STARTUP] Failed to pre-compute classes cache: {e}")
50 app.logger.warning("[STARTUP] Classes will be computed on first request")
52 register_blueprints(app)
54 return app