Coverage for heritrace/__init__.py: 100%

35 statements  

« 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 

4 

5import logging 

6import os 

7import sys 

8 

9from flask import Flask 

10from flask_babel import Babel 

11from flask_login import LoginManager 

12from redis import Redis 

13 

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) 

23 

24 

25def create_app(config_object: object = None) -> Flask: 

26 app = Flask(__name__) 

27 

28 if config_object: 

29 app.config.from_object(config_object) 

30 

31 logging.basicConfig( 

32 level=logging.INFO, 

33 format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", 

34 ) 

35 app.logger.setLevel(logging.INFO) 

36 

37 register_cli_commands(app) 

38 

39 is_translate_command = "translate" in sys.argv 

40 

41 if not is_translate_command: 

42 babel = Babel() 

43 login_manager = LoginManager() 

44 

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) 

52 

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 ) 

58 

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() 

64 

65 register_blueprints(app) 

66 

67 return app