code: def download(url, dir, filename=None, expect_size=None):
      
      mkdir_p(dir)
      if filename is None:
          filename = url.split('/')[-1]
      fpath = os.path.join(dir, filename)
  
      if os.path.isfile(fpath):
          if expect_size is not None and os.stat(fpath).st_size == expect_size:
              logger.info("File {} exists! Skip download.".format(filename))
              return fpath
          else:
              logger.warn("File {} exists. Will overwrite with a new download!".format(filename))
  
      def hook(t):
          last_b = [0]
  
          def inner(b, bsize, tsize=None):
              if tsize is not None:
                  t.total = tsize
              t.update((b - last_b[0]) * bsize)
              last_b[0] = b
          return inner
      try:
          with tqdm.tqdm(unit='B', unit_scale=True, miniters=1, desc=filename) as t:
              fpath, _ = urllib.request.urlretrieve(url, fpath, reporthook=hook(t))
          statinfo = os.stat(fpath)
          size = statinfo.st_size
      except IOError:
          logger.error("Failed to download {}".format(url))
          raise
      assert size > 0, "Downloaded an empty file from {}!".format(url)
  
      if expect_size is not None and size != expect_size:
          logger.error("File downloaded from {} does not match the expected size!".format(url))
          logger.error("You may have downloaded a broken file, or the upstream may have modified the file.")
  
      # TODO human-readable size
      logger.info('Succesfully downloaded ' + filename + ". " + str(size) + ' bytes.')
      return fpath
docs: Download URL to a directory.
      Will figure out the filename automatically from URL, if not given.