예제 #1
0
def downloadFile(sUrlFile,
                 sDstFile,
                 sLocalPrefix,
                 fnLog,
                 fnError=None,
                 fNoProxies=True):
    """
    Downloads the given file if an URL is given, otherwise assume it's
    something on the build share and copy it from there.

    Raises no exceptions, returns log + success indicator instead.

    Note! This method may use proxies configured on the system and the
          http_proxy, ftp_proxy, no_proxy environment variables.

    """
    if fnError is None:
        fnError = fnLog

    if  sUrlFile.startswith('http://') \
     or sUrlFile.startswith('https://') \
     or sUrlFile.startswith('ftp://'):
        # Download the file.
        fnLog('Downloading "%s" to "%s"...' % (sUrlFile, sDstFile))
        try:
            ## @todo We get 404.html content instead of exceptions here, which is confusing and should be addressed.
            if not fNoProxies:
                oOpener = urllib_build_opener()
            else:
                oOpener = urllib_build_opener(
                    urllib_ProxyHandler(proxies=dict()))
            oSrc = oOpener.open(sUrlFile)
            oDst = utils.openNoInherit(sDstFile, 'wb')
            oDst.write(oSrc.read())
            oDst.close()
            oSrc.close()
        except Exception as oXcpt:
            fnError('Error downloading "%s" to "%s": %s' %
                    (sUrlFile, sDstFile, oXcpt))
            return False
    else:
        # Assumes file from the build share.
        if sUrlFile.startswith('file:///'):
            sSrcPath = sUrlFile[7:]
        elif sUrlFile.startswith('file://'):
            sSrcPath = sUrlFile[6:]
        elif os.path.isabs(sUrlFile):
            sSrcPath = sUrlFile
        else:
            sSrcPath = os.path.join(sLocalPrefix, sUrlFile)
        fnLog('Copying "%s" to "%s"...' % (sSrcPath, sDstFile))
        try:
            utils.copyFileSimple(sSrcPath, sDstFile)
        except Exception as oXcpt:
            fnError('Error copying "%s" to "%s": %s' %
                    (sSrcPath, sDstFile, oXcpt))
            return False

    return True
def downloadFile(sUrlFile, sDstFile, sLocalPrefix, fnLog, fnError = None, fNoProxies=True):
    """
    Downloads the given file if an URL is given, otherwise assume it's
    something on the build share and copy it from there.

    Raises no exceptions, returns log + success indicator instead.

    Note! This method may use proxies configured on the system and the
          http_proxy, ftp_proxy, no_proxy environment variables.

    """
    if fnError is None:
        fnError = fnLog;

    if  sUrlFile.startswith('http://') \
     or sUrlFile.startswith('https://') \
     or sUrlFile.startswith('ftp://'):
        # Download the file.
        fnLog('Downloading "%s" to "%s"...' % (sUrlFile, sDstFile));
        try:
            ## @todo We get 404.html content instead of exceptions here, which is confusing and should be addressed.
            if not fNoProxies:
                oOpener = urllib_build_opener();
            else:
                oOpener = urllib_build_opener(urllib_ProxyHandler(proxies = dict()));
            oSrc = oOpener.open(sUrlFile);
            oDst = utils.openNoInherit(sDstFile, 'wb');
            oDst.write(oSrc.read());
            oDst.close();
            oSrc.close();
        except Exception as oXcpt:
            fnError('Error downloading "%s" to "%s": %s' % (sUrlFile, sDstFile, oXcpt));
            return False;
    else:
        # Assumes file from the build share.
        sSrcPath = os.path.join(sLocalPrefix, sUrlFile);
        fnLog('Copying "%s" to "%s"...' % (sSrcPath, sDstFile));
        try:
            utils.copyFileSimple(sSrcPath, sDstFile);
        except Exception as oXcpt:
            fnError('Error copying "%s" to "%s": %s' % (sSrcPath, sDstFile, oXcpt));
            return False;

    return True;