Skip to content

Commit 203047a

Browse files
author
Isaac
committed
Update deploy
1 parent bef7b70 commit 203047a

File tree

1 file changed

+38
-22
lines changed

1 file changed

+38
-22
lines changed

build-system/Make/DeployBuild.py

Lines changed: 38 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,39 @@ def init_build(host, token, files, channel):
2727
r.raise_for_status()
2828
return r.json()
2929

30+
class ProgressFileReader:
31+
def __init__(self, path, size):
32+
self._file = open(path, 'rb')
33+
self._size = size
34+
self._sent = 0
35+
self._start_time = time.time()
36+
self._last_print = self._start_time
37+
38+
def __len__(self):
39+
return self._size
40+
41+
def read(self, chunk_size=-1):
42+
if chunk_size == -1:
43+
chunk_size = self._size
44+
data = self._file.read(chunk_size)
45+
if not data:
46+
elapsed = time.time() - self._start_time
47+
speed = self._size / elapsed / 1024 / 1024 if elapsed > 0 else 0
48+
print(' 100% - all bytes sent in {:.1f}s ({:.2f} MB/s), waiting for server response...'.format(elapsed, speed))
49+
return data
50+
self._sent += len(data)
51+
now = time.time()
52+
if now - self._last_print >= 5:
53+
elapsed = now - self._start_time
54+
speed = self._sent / elapsed / 1024 / 1024 if elapsed > 0 else 0
55+
print(' {:.1f}% ({:.1f} / {:.1f} MB) {:.2f} MB/s'.format(
56+
self._sent * 100 / self._size, self._sent / 1024 / 1024, self._size / 1024 / 1024, speed))
57+
self._last_print = now
58+
return data
59+
60+
def close(self):
61+
self._file.close()
62+
3063
def upload_file(path, upload_info):
3164
url = upload_info.get('url')
3265
headers = dict(upload_info.get('headers', {}))
@@ -37,28 +70,11 @@ def upload_file(path, upload_info):
3770
print('Uploading {} ({:.1f} MB)'.format(path, size / 1024 / 1024))
3871
start_time = time.time()
3972

40-
def reader():
41-
sent = 0
42-
last_print = time.time()
43-
with open(path, 'rb') as f:
44-
while True:
45-
chunk = f.read(256 * 1024)
46-
if not chunk:
47-
break
48-
sent += len(chunk)
49-
now = time.time()
50-
if now - last_print >= 5:
51-
elapsed = now - start_time
52-
speed = sent / elapsed / 1024 / 1024 if elapsed > 0 else 0
53-
print(' {:.1f}% ({:.1f} / {:.1f} MB) {:.2f} MB/s'.format(
54-
sent * 100 / size, sent / 1024 / 1024, size / 1024 / 1024, speed))
55-
last_print = now
56-
yield chunk
57-
elapsed = time.time() - start_time
58-
speed = size / elapsed / 1024 / 1024 if elapsed > 0 else 0
59-
print(' 100% - all bytes sent in {:.1f}s ({:.2f} MB/s), waiting for server response...'.format(elapsed, speed))
60-
61-
r = requests.put(url, data=reader(), headers=headers, timeout=900)
73+
body = ProgressFileReader(path, size)
74+
try:
75+
r = requests.put(url, data=body, headers=headers, timeout=900)
76+
finally:
77+
body.close()
6278
print(' Server responded: {} ({:.1f}s total)'.format(r.status_code, time.time() - start_time))
6379
if r.status_code != 200:
6480
print('Upload failed', r.status_code)

0 commit comments

Comments
 (0)