Beispiel #1
0
    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)
Beispiel #2
0
 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),
     )
Beispiel #3
0
    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)