Coverage for fastblocks/main.py: 0%

52 statements  

« prev     ^ index     » next       coverage.py v7.10.7, created at 2025-10-09 00:47 -0700

1import typing as t 

2from pathlib import Path 

3 

4from acb import register_pkg 

5from acb.depends import depends 

6 

7_app_instance = None 

8_logger_instance = None 

9 

10 

11def get_app() -> t.Any: 

12 global _app_instance, _logger_instance 

13 if _app_instance is None: 

14 current_dir = Path.cwd() 

15 fastblocks_pkg_dir = Path(__file__).parent 

16 fastblocks_root_dir = fastblocks_pkg_dir.parent 

17 is_dev_mode = current_dir == fastblocks_pkg_dir or ( 

18 current_dir == fastblocks_root_dir 

19 and (current_dir / "pyproject.toml").exists() 

20 ) 

21 if is_dev_mode: 

22 msg = ( 

23 "FastBlocks cannot be run from its own package directory. " 

24 "Please run from your application directory." 

25 ) 

26 raise RuntimeError( 

27 msg, 

28 ) 

29 try: 

30 register_pkg() 

31 except Exception as e: 

32 msg = f"Failed to register FastBlocks adapters: {e}" 

33 raise RuntimeError(msg) from e 

34 try: 

35 _app_instance = depends.get("app") 

36 except Exception as e: 

37 msg = f"Failed to get app adapter: {e}. Make sure adapters are properly registered and configured." 

38 raise RuntimeError( 

39 msg, 

40 ) from e 

41 try: 

42 _logger_instance = depends.get("logger") 

43 except Exception as e: 

44 import logging 

45 

46 _logger_instance = logging.getLogger("fastblocks") 

47 _logger_instance.warning( 

48 f"Failed to get logger adapter, using fallback: {e}", 

49 ) 

50 return _app_instance 

51 

52 

53def get_logger() -> t.Any: 

54 get_app() 

55 return _logger_instance 

56 

57 

58class LazyApp: 

59 def __getattr__(self, name: str) -> t.Any: 

60 return getattr(get_app(), name) 

61 

62 async def __call__(self, scope: t.Any, receive: t.Any, send: t.Any) -> None: 

63 app = get_app() 

64 await app(scope, receive, send) 

65 

66 

67class LazyLogger: 

68 def __getattr__(self, name: str) -> t.Any: 

69 return getattr(get_logger(), name) 

70 

71 def __call__(self, *args: t.Any, **kwargs: t.Any) -> t.Any: 

72 logger = get_logger() 

73 if callable(logger): 

74 call_method = logger.__call__ 

75 return call_method(*args, **kwargs) 

76 return logger 

77 

78 

79app = LazyApp() 

80logger = LazyLogger()