async def _install_to_destination( self, bundle: Bundle, destination: Destination ) -> InstalledArtifact: async with self.get_stub() as stub, stub.install.open() as stream: generator = None if isinstance(bundle, str): url = urllib.parse.urlparse(bundle) if url.scheme: # send url payload = Payload(url=bundle) generator = generate_requests([InstallRequest(payload=payload)]) else: file_path = str(Path(bundle).resolve(strict=True)) if none_throws(self.companion_info).is_local: # send file_path generator = generate_requests( [InstallRequest(payload=Payload(file_path=file_path))] ) else: # chunk file from file_path generator = generate_binary_chunks( path=file_path, destination=destination, logger=self.logger ) else: # chunk file from memory generator = generate_io_chunks(io=bundle, logger=self.logger) # stream to companion await stream.send_message(InstallRequest(destination=destination)) response = await drain_to_stream( stream=stream, generator=generator, logger=self.logger ) return InstalledArtifact(name=response.name, uuid=response.uuid)
async def _install_to_destination( self, bundle: Bundle, destination: Destination) -> AsyncIterator[InstalledArtifact]: async with self.stub.install.open() as stream: generator = None if isinstance(bundle, str): url = urllib.parse.urlparse(bundle) if url.scheme: # send url payload = Payload(url=bundle) generator = generate_requests( [InstallRequest(payload=payload)]) else: file_path = str(Path(bundle).resolve(strict=True)) if self.companion_info.is_local: # send file_path generator = generate_requests([ InstallRequest(payload=Payload( file_path=file_path)) ]) else: # chunk file from file_path generator = generate_binary_chunks( path=file_path, destination=destination, logger=self.logger) else: # chunk file from memory generator = generate_io_chunks(io=bundle, logger=self.logger) # stream to companion await stream.send_message(InstallRequest(destination=destination)) async for message in generator: await stream.send_message(message) await stream.end() async for response in stream: yield InstalledArtifact(name=response.name, uuid=response.uuid, progress=response.progress)