diff options
author | vg <vgm+dev@devys.org> | 2022-09-16 14:51:12 +0200 |
---|---|---|
committer | vg <vgm+dev@devys.org> | 2022-09-16 14:51:12 +0200 |
commit | 5143dc3af380f65536ef624472e27ca8c86b65df (patch) | |
tree | 8245e5dca2882a0c5a7622301350cb930f12c5d1 /gamechestcli/rsync.py | |
parent | 77c76b4e0407250fc0ba8ee0309a528a4a8f1f09 (diff) | |
download | gamechest-5143dc3af380f65536ef624472e27ca8c86b65df.tar.gz gamechest-5143dc3af380f65536ef624472e27ca8c86b65df.tar.bz2 gamechest-5143dc3af380f65536ef624472e27ca8c86b65df.zip |
git-sync on seele
Diffstat (limited to 'gamechestcli/rsync.py')
-rw-r--r-- | gamechestcli/rsync.py | 82 |
1 files changed, 0 insertions, 82 deletions
diff --git a/gamechestcli/rsync.py b/gamechestcli/rsync.py deleted file mode 100644 index 37330f9..0000000 --- a/gamechestcli/rsync.py +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/python3 - -import os -import re -import subprocess - -import humanfriendly - -from .structures import Progress - -class Rsync: - - _rsync_progress_re = re.compile(r'^\s*(\S+)\s+(\d+)%\s+(\S+)\s+(\S+)\s+$') - - def __init__(self, src, dst): - self.proc = subprocess.Popen( - [ - 'rsync', - '--partial', - # not human readable, easier to parse (but speed still appears - # in human form). - '--no-h', - '--info=progress2', - src, - dst, - ], - stdout=subprocess.PIPE, - #stderr=subprocess.DEVNULL, - encoding='utf8', - env={**os.environ, - **{'LC_ALL':'C.UTF-8', - 'LANG':'C.UTF-8', - 'LANGUAGE':'C.UTF-8', - }}, - ) - self.last_progress = Progress() - - def select_fd(self): - 'useful to use selectors with the process stdout file descriptor' - return self.proc.stdout - - def progress_read(self): - line = self.proc.stdout.readline() - if match := self._rsync_progress_re.search(line): - self.last_progress = Progress( - int(match.group(1)), - int(match.group(2)), - humanfriendly.parse_size(match.group(3), binary=True), - match.group(4), - ) - return self.last_progress - - def terminate(self): - self.proc.terminate() - - def poll(self): - 'returns None if not terminated, otherwise return returncode' - return self.proc.poll() - - def wait(self, timeout=None): - return self.proc.wait(timeout) - - def __enter__(self): - return self - - def __exit__(self, exc_type, value, traceback): - self.terminate() - self.wait() - - -if __name__ == '__main__': - import sys - import contextlib - with contextlib.suppress(KeyboardInterrupt): - with Rsync(sys.argv[1], sys.argv[2]) as rsync: - while rsync.poll() is None: - progress = rsync.progress_read() - print(f'{progress.bytes}b {progress.percent}% ' - f'{progress.speed}b/s {progress.eta}') - rc = rsync.poll() - print(f'rsync ended with code: {rc}') - print('Rsync test main ended') |