diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2015-07-12 15:49:24 +0300 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2015-07-12 15:49:24 +0300 |
commit | 365155a4f03c5edc6a07724ed44adab0f251a718 (patch) | |
tree | f07b67c33788e91b76d59f9d7ad2d29ae63eeced | |
parent | 1d4af5c84eaf80cd6342970e69a0284bc42dc459 (diff) | |
download | meson-365155a4f03c5edc6a07724ed44adab0f251a718.zip meson-365155a4f03c5edc6a07724ed44adab0f251a718.tar.gz meson-365155a4f03c5edc6a07724ed44adab0f251a718.tar.bz2 |
Added simple progress bar to downloads. Closes #152.
-rw-r--r-- | wrap.py | 38 |
1 files changed, 31 insertions, 7 deletions
@@ -90,13 +90,35 @@ class Resolver: def get_data(self, url): - u = urllib.request.urlopen(url) - data = u.read() - u.close() + blocksize = 10*1024 + resp = urllib.request.urlopen(url) + dlsize = int(resp.info()['Content-Length']) + print('Download size:', dlsize) + print('Downloading: ', end='') + sys.stdout.flush() + printed_dots = 0 + blocks = [] + downloaded = 0 + while True: + block = resp.read(blocksize) + if block == b'': + break + downloaded += len(block) + blocks.append(block) + ratio = int(downloaded/dlsize * 10) + while printed_dots < ratio: + print('.', end='') + sys.stdout.flush() + printed_dots += 1 + print('') + resp.close() + return b''.join(blocks) + + def get_hash(self, data): h = hashlib.sha256() h.update(data) hashvalue = h.hexdigest() - return (data, hashvalue) + return hashvalue def download(self, p, packagename): ofname = os.path.join(self.cachedir, p.get('source_filename')) @@ -104,15 +126,17 @@ class Resolver: mlog.log('Using', mlog.bold(packagename), 'from cache.') return srcurl = p.get('source_url') - mlog.log('Dowloading', mlog.bold(packagename), 'from', srcurl) - (srcdata, dhash) = self.get_data(srcurl) + mlog.log('Dowloading', mlog.bold(packagename), 'from', mlog.bold(srcurl)) + srcdata = self.get_data(srcurl) + dhash = self.get_hash(srcdata) expected = p.get('source_hash') if dhash != expected: raise RuntimeError('Incorrect hash for source %s:\n %s expected\n %s actual.' % (packagename, expected, dhash)) if p.has_patch(): purl = p.get('patch_url') mlog.log('Downloading patch from', mlog.bold(purl)) - (pdata, phash) = self.get_data(purl) + pdata = self.get_data(purl) + phash = self.get_hash(pdata) expected = p.get('patch_hash') if phash != expected: raise RuntimeError('Incorrect hash for patch %s:\n %s expected\n %s actual' % (packagename, expected, phash)) |