# See LICENSE file for copyright and license details.

"""
Network functions/helpers
"""

from os import makedirs
from os.path import dirname
import requests

from lib.log import info, warn


def download(uris):
    """
    Downloads a file by providing it an url and a write path in a tuple
    """
    url = uris[0]
    path = uris[1]
    info("dl: %s" % url)

    try:
        rfile = requests.get(url, stream=True, timeout=20)
    except (requests.exceptions.ConnectionError,
            requests.exceptions.ReadTimeout) as err:
        warn('Caught exception: "%s". Retrying...' % err)
        return download(uris)

    if rfile.status_code != 200:
        warn('%s failed: %d' % (url, rfile.status_code))
        return

    makedirs(dirname(path), exist_ok=True)
    lfile = open(path, 'wb')
    # chunk_size {sh,c}ould be more on gbit servers
    for chunk in rfile.iter_content(chunk_size=1024):
        if chunk:
            lfile.write(chunk)
            # f.flush()
    lfile.close()

@@ -516,16 +516,50 @@
 dTimeout
+,%0A            ConnectionResetError
 ) as err

Handle uncaught ConnectionResetError in net/download.