Coverage for fastblocks/main.py: 0%
52 statements
« prev ^ index » next coverage.py v7.10.6, created at 2025-09-21 04:50 -0700
« prev ^ index » next coverage.py v7.10.6, created at 2025-09-21 04:50 -0700
1import typing as t
2from pathlib import Path
4from acb import register_pkg
5from acb.depends import depends
7_app_instance = None
8_logger_instance = None
11def get_app():
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
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
53def get_logger():
54 get_app()
55 return _logger_instance
58class LazyApp:
59 def __getattr__(self, name: str):
60 return getattr(get_app(), name)
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)
67class LazyLogger:
68 def __getattr__(self, name: str):
69 return getattr(get_logger(), name)
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
79app = LazyApp()
80logger = LazyLogger()