def fetch_archive(savedir, url, fname, checksum, force=False):
 dest = pjoin(savedir, fname)
 (scheme, digest_ref) = checksum.split(':')
 if (os.path.exists(dest) and (not force)):
  info(('already have %s' % dest))
  digest = checksum_file(scheme, fname)
  if (digest == digest_ref):
   return dest
  else:
   warn(('but checksum %s != %s, redownloading.' % (digest, digest_ref)))
   os.remove(fname)
 info(('fetching %s into %s' % (url, savedir)))
 if (not os.path.exists(savedir)):
  os.makedirs(savedir)
 req = urlopen(url)
 with open(dest, 'wb') as f:
  f.write(req.read())
 digest = checksum_file(scheme, dest)
 if (digest != digest_ref):
  fatal(('%s %s mismatch:\nExpected: %s\nActual  : %s' % (dest, scheme, digest_ref, digest)))
 return dest

def fetch_archive ( savedir , url , fname , checksum , force = False ) : dest = pjoin ( savedir , fname ) ( scheme , digest_ref ) = checksum . split ( ':' ) if ( os . path . exists ( dest ) and ( not force ) ) : info ( ( 'already have %s' % dest ) ) digest = checksum_file ( scheme , fname ) if ( digest == digest_ref ) : return dest else : warn ( ( 'but checksum %s != %s, redownloading.' % ( digest , digest_ref ) ) ) os . remove ( fname ) info ( ( 'fetching %s into %s' % ( url , savedir ) ) ) if ( not os . path . exists ( savedir ) ) : os . makedirs ( savedir ) req = urlopen ( url ) with open ( dest , 'wb' ) as f : f . write ( req . read ( ) ) digest = checksum_file ( scheme , dest ) if ( digest != digest_ref ) : fatal ( ( '%s %s mismatch:\nExpected: %s\nActual  : %s' % ( dest , scheme , digest_ref , digest ) ) ) return dest
download an archive to a specific location .