async def start(self, ctx: Context): if isinstance(self.commit_executor, str): self.commit_executor = await ctx.request_resource(Executor, self.commit_executor) elif self.commit_executor is None: self.commit_executor = ThreadPoolExecutor(self.commit_executor_workers) ctx.add_teardown_callback(self.commit_executor.shutdown) for resource_name, context_attr, bind, factory, ready_callback in self.session_factories: if ready_callback: retval = ready_callback(bind, factory) if isawaitable(retval): await retval engine = bind if isinstance(bind, Engine) else bind.engine ctx.add_resource(engine, resource_name) ctx.add_resource(factory, resource_name) ctx.add_resource_factory(partial(self.create_session, factory=factory), [Session], resource_name, context_attr) logger.info('Configured SQLAlchemy session maker (%s / ctx.%s; dialect=%s)', resource_name, context_attr, bind.dialect.name) await yield_() for resource_name, context_attr, bind, factory, ready_callback in self.session_factories: if isinstance(bind, Engine): bind.dispose() logger.info('SQLAlchemy session maker (%s / ctx.%s) shut down', resource_name, context_attr)
async def start(self, ctx: Context): proxymaker = partial(TemplateRendererProxy, renderer=self.renderer) types = [TemplateRenderer, type(self.renderer)] ctx.add_resource_factory(proxymaker, types, self.resource_name) logger.info( "Configured template renderer (%s; class=%s)", self.resource_name, qualified_name(self.renderer), )
async def start(self, ctx: Context) -> AsyncGenerator[None, Exception | None]: if self.ready_callback: retval = self.ready_callback(self.bind, self.sessionmaker) if isawaitable(retval): await retval ctx.add_resource(self.engine, self.resource_name) ctx.add_resource(self.sessionmaker, self.resource_name) if isinstance(self.engine, AsyncEngine): ctx.add_resource_factory( self.create_async_session, [AsyncSession], self.resource_name, ) else: self.commit_executor = ThreadPoolExecutor( self.commit_executor_workers) ctx.add_teardown_callback(self.commit_executor.shutdown) ctx.add_resource_factory( self.create_session, [Session], self.resource_name, ) logger.info( "Configured SQLAlchemy resources (%s; dialect=%s, driver=%s)", self.resource_name, self.bind.dialect.name, self.bind.dialect.driver, ) yield if isinstance(self.bind, Engine): self.bind.dispose() elif isinstance(self.bind, AsyncEngine): await self.bind.dispose() logger.info("SQLAlchemy resources (%s) shut down", self.resource_name)