utils.py 1.25 KB
Newer Older
soumith's avatar
soumith committed
1
import os
soumith's avatar
soumith committed
2
import os.path
soumith's avatar
soumith committed
3
4
5
import hashlib
import errno

soumith's avatar
soumith committed
6

7
8
9
def check_integrity(fpath, md5):
    if not os.path.isfile(fpath):
        return False
soumith's avatar
soumith committed
10
    md5o = hashlib.md5()
soumith's avatar
soumith committed
11
    with open(fpath, 'rb') as f:
soumith's avatar
soumith committed
12
        # read in 1MB chunks
13
        for chunk in iter(lambda: f.read(1024 * 1024), b''):
soumith's avatar
soumith committed
14
15
            md5o.update(chunk)
    md5c = md5o.hexdigest()
16
17
18
19
20
    if md5c != md5:
        return False
    return True


soumith's avatar
soumith committed
21
def download_url(url, root, filename, md5):
22
23
    from six.moves import urllib

24
    root = os.path.expanduser(root)
25
26
27
28
29
30
31
32
33
34
35
36
37
38
    fpath = os.path.join(root, filename)

    try:
        os.makedirs(root)
    except OSError as e:
        if e.errno == errno.EEXIST:
            pass
        else:
            raise

    # downloads file
    if os.path.isfile(fpath) and check_integrity(fpath, md5):
        print('Using downloaded and verified file: ' + fpath)
    else:
Tzu-Wei Huang's avatar
Tzu-Wei Huang committed
39
40
41
42
43
44
45
46
47
        try:
            print('Downloading ' + url + ' to ' + fpath)
            urllib.request.urlretrieve(url, fpath)
        except:
            if url[:5] == 'https':
                url = url.replace('https:', 'http:')
                print('Failed download. Trying https -> http instead.'
                      ' Downloading ' + url + ' to ' + fpath)
                urllib.request.urlretrieve(url, fpath)