from subprocess import PIPE from trio import TASK_STATUS_IGNORED, CancelScope, open_process, run_process from dropship.logger import log async def croc_send(fpath, parent, task_status=TASK_STATUS_IGNORED): """Run `croc send` on a local file path.""" with CancelScope() as scope: command = ["croc", "send", fpath] process = await open_process(command, stderr=PIPE) #output = await process.stderr.receive_some() #this is some nasty hacky shit async for i in process.stderr: if b"Code is:" in i: output = i break code = output.decode().split()[-1] task_status.started((code, scope,)) log.info(f"croc_send: now waiting for other side ({code})") await process.wait() log.info(f"croc_send: succesfully transfered ({code})") if scope.cancel_called: process.terminate() log.info(f"croc_send: succesfully terminated process ({code})") parent._remove_pending_transfer(code) async def croc_recv(code, parent, task_status=TASK_STATUS_IGNORED): """Run `croc receive` on a pending transfer code.""" with CancelScope() as scope: command = ["croc", "--yes", code] process = await open_process(command, stderr=PIPE) task_status.started((scope,)) log.info(f"croc_recv: now starting receiving process ({code})") await process.wait() log.info(f"croc_recv: succesfully received ({code})") if scope.cancel_called: process.terminate() log.info(f"croc_recv: succesfully terminated process ({code})") parent._remove_pending_transfer(code)