Coverage for heritrace / __init__.py: 100%

32 statements  

« prev     ^ index     » next       coverage.py v7.13.4, created at 2026-07-02 10:16 +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 get_available_classes 

18 

19 

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

21 app = Flask(__name__) 

22 

23 if config_object: 

24 app.config.from_object(config_object) 

25 

26 logging.basicConfig( 

27 level=logging.INFO, 

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

29 ) 

30 app.logger.setLevel(logging.INFO) 

31 

32 register_cli_commands(app) 

33 

34 is_translate_command = "translate" in sys.argv 

35 

36 if not is_translate_command: 

37 babel = Babel() 

38 login_manager = LoginManager() 

39 

40 redis_url = ( 

41 app.config.get("REDIS_URL") 

42 or os.environ.get("REDIS_URL") 

43 or "redis://localhost:6379/0" 

44 ) 

45 app.logger.info("Connecting to Redis at: %s", redis_url) 

46 redis_client = Redis.from_url(redis_url, decode_responses=True) 

47 

48 with app.app_context(): 

49 init_extensions(app, babel, login_manager, redis_client) 

50 

51 app.logger.info("[STARTUP] Pre-computing available classes cache...") 

52 get_available_classes() 

53 app.logger.info("[STARTUP] Available classes cache computed successfully") 

54 

55 register_blueprints(app) 

56 

57 return app