11import asyncio
2+ from importlib import import_module
23
34from dependency_injector import containers , providers
45from dependency_injector .providers import Callable , Factory , Singleton
1415 PubsubExceptionHandler ,
1516)
1617from app .infrastructure .repositories .caching .redis_repo import RedisRepo
17- from app .infrastructure .repositories .sample_record import SampleRecordRepository
18+ from app .infrastructure .repositories .unit_of_work import (
19+ ReadOnlySampleRecordUnitOfWork ,
20+ WriteSampleRecordUnitOfWork ,
21+ )
1822from app .logger import logger
1923
2024from app .presentation .bot .error_handlers .internal_error_handler import (
2731
2832
2933class BotSampleRecordCommandContainer (containers .DeclarativeContainer ):
30- record_use_cases_factory = Callable (
31- lambda session : SampleRecordUseCases (
32- record_repo = SampleRecordRepository (session = session )
33- )
34- )
34+ session_factory = providers .Dependency ()
3535
36+ ro_unit_of_work : Factory [ReadOnlySampleRecordUnitOfWork ] = Factory (
37+ ReadOnlySampleRecordUnitOfWork , session_factory
38+ )
39+ rw_unit_of_work : Factory [WriteSampleRecordUnitOfWork ] = Factory (
40+ WriteSampleRecordUnitOfWork , session_factory
41+ )
3642
37- # class StorageContainer(containers.DeclarativeContainer):
38- # wiring_config = containers.WiringConfiguration(
39- # modules=["app.presentation.bot.commands.sample_records"]
40- # )
41- #
42- # # Provider that returns a factory to create sessions
43- # session_factory = Factory(build_db_session_factory)
44- #
45- # # Provider that creates a session (e.g., AsyncSession instance)
46- # session = Resource(session_factory)
47- #
48- # # Provider that creates the SampleRecordUseCases, injecting the session
49- # record_use_cases = Factory(
50- # SampleRecordUseCases,
51- # record_repo=Factory(
52- # SampleRecordRepository,
53- # session=session
54- # )
55- # )
43+ record_use_cases_factory = Callable (
44+ lambda repository : SampleRecordUseCases (record_repo = repository )
45+ )
5646
5747
5848class CallbackTaskManager :
@@ -117,11 +107,16 @@ class ApplicationStartupContainer(containers.DeclarativeContainer):
117107 {} if not settings .RAISE_BOT_EXCEPTIONS else {Exception : internal_error_handler }
118108 )
119109
120- from app .presentation .bot .commands import common , sample_record
110+ # Ленивая загрузка коллекторов
111+ @staticmethod
112+ def get_collectors ():
113+ common = import_module ("app.presentation.bot.commands.common" )
114+ sample_record = import_module ("app.presentation.bot.commands.sample_record" )
115+ return [common .collector , sample_record .collector ]
121116
122117 bot = providers .Singleton (
123118 Bot ,
124- collectors = [ common . collector , sample_record . collector ] ,
119+ collectors = Callable ( get_collectors ) ,
125120 bot_accounts = settings .BOT_CREDENTIALS ,
126121 exception_handlers = exception_handlers , # type: ignore
127122 default_callback_timeout = settings .BOTX_CALLBACK_TIMEOUT_IN_SECONDS ,
@@ -146,7 +141,6 @@ class ApplicationStartupContainer(containers.DeclarativeContainer):
146141 )
147142
148143
149-
150144class WorkerStartupContainer (containers .DeclarativeContainer ):
151145 redis_client = Singleton (lambda : aioredis .from_url (settings .REDIS_DSN ))
152146
0 commit comments