Coverage for heritrace/__init__.py: 92%

36 statements  

« prev     ^ index     » next       coverage.py v7.6.12, created at 2025-10-13 17:12 +0000

1import logging 

2import os 

3import sys 

4 

5from flask import Flask 

6from flask_babel import Babel 

7from flask_login import LoginManager 

8from redis import Redis 

9 

10from heritrace.cli import register_cli_commands 

11from heritrace.utils.sparql_utils import precompute_available_classes_cache 

12 

13 

14def create_app(config_object=None): 

15 app = Flask(__name__) 

16 

17 if config_object: 

18 app.config.from_object(config_object) 

19 

20 logging.basicConfig( 

21 level=logging.INFO, 

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

23 ) 

24 app.logger.setLevel(logging.INFO) 

25 

26 register_cli_commands(app) 

27 

28 is_translate_command = 'translate' in sys.argv 

29 

30 if not is_translate_command: 

31 babel = Babel() 

32 login_manager = LoginManager() 

33 

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) 

37 

38 from heritrace.extensions import init_extensions 

39 from heritrace.routes import register_blueprints 

40 

41 init_extensions(app, babel, login_manager, redis_client) 

42 

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

51 

52 register_blueprints(app) 

53 

54 return app