tnet.py - amprolla - devuan's apt repo merger
 (HTM) git clone https://git.parazyd.org/amprolla
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       tnet.py (1031B)
       ---
            1 # See LICENSE file for copyright and license details.
            2 
            3 """
            4 Network functions/helpers
            5 """
            6 
            7 from os import makedirs
            8 from os.path import dirname
            9 import requests
           10 
           11 from lib.log import info, warn
           12 
           13 
           14 def download(uris):
           15     """
           16     Downloads a file by providing it an url and a write path in a tuple
           17     """
           18     url = uris[0]
           19     path = uris[1]
           20     info("dl: %s" % url)
           21 
           22     try:
           23         rfile = requests.get(url, stream=True, timeout=20)
           24     except (requests.exceptions.ConnectionError,
           25             requests.exceptions.ReadTimeout,
           26             ConnectionResetError) as err:
           27         warn('Caught exception: "%s". Retrying...' % err)
           28         return download(uris)
           29 
           30     if rfile.status_code != 200:
           31         warn('%s failed: %d' % (url, rfile.status_code))
           32         return
           33 
           34     makedirs(dirname(path), exist_ok=True)
           35     lfile = open(path, 'wb')
           36     # chunk_size {sh,c}ould be more on gbit servers
           37     for chunk in rfile.iter_content(chunk_size=1024):
           38         if chunk:
           39             lfile.write(chunk)
           40             # f.flush()
           41     lfile.close()