示例#1
0
def download_server(memory, options, url, output_name_item_percentage=None):
    """
    download_server
    @type memory: Memory, None
    @type options: optparse.Values, instance
    @type url: str, unicode
    @type output_name_item_percentage: str
    """
    if memory:
        url = os.path.normpath(url)
        url = options.server + options.cryptobox + "/" + url
        session = memory.get("session")
        result = session.get(url, timeout=3600, stream=True, verify=False)
    else:
        result = requests.get(url, timeout=3600, stream=True, verify=False)

    if result.status_code == 403:
        raise ServerForbidden(result.reason)

    if result.status_code == 500:
        raise ServerError(result.reason)

    tf_download = get_named_temporary_file(auto_delete=False)

    if "Content-Length" in result.headers:
        size = int(result.headers['Content-Length'].strip())
        downloaded_bytes = 0
        prev_percenage = -1
        last_update = time.time()

        for buf in result.iter_content(1024):
            if buf:
                tf_download.write(buf)
                downloaded_bytes += len(buf)
                divider = float(size) / 100

                if divider > 0:
                    percentage = int(float(downloaded_bytes) / divider)
                    if percentage != prev_percenage:
                        if time.time() - last_update > 0.5:
                            if output_name_item_percentage:
                                update_item_progress(
                                    percentage, output_name_item_percentage)
                            else:
                                update_item_progress(percentage)

                            last_update = time.time()

                        prev_percenage = percentage

        return tf_download
    else:
        tf_download.write(result.content)

    return tf_download.name
示例#2
0
def download_server(memory, options, url, output_name_item_percentage=None):
    """
    download_server
    @type memory: Memory, None
    @type options: optparse.Values, instance
    @type url: str, unicode
    @type output_name_item_percentage: str
    """
    if memory:
        url = os.path.normpath(url)
        url = options.server + options.cryptobox + "/" + url
        session = memory.get("session")
        result = session.get(url, timeout=3600, stream=True, verify=False)
    else:
        result = requests.get(url, timeout=3600, stream=True, verify=False)

    if result.status_code == 403:
        raise ServerForbidden(result.reason)

    if result.status_code == 500:
        raise ServerError(result.reason)

    tf_download = get_named_temporary_file(auto_delete=False)

    if "Content-Length" in result.headers:
        size = int(result.headers["Content-Length"].strip())
        downloaded_bytes = 0
        prev_percenage = -1
        last_update = time.time()

        for buf in result.iter_content(1024):
            if buf:
                tf_download.write(buf)
                downloaded_bytes += len(buf)
                divider = float(size) / 100

                if divider > 0:
                    percentage = int(float(downloaded_bytes) / divider)
                    if percentage != prev_percenage:
                        if time.time() - last_update > 0.5:
                            if output_name_item_percentage:
                                update_item_progress(percentage, output_name_item_percentage)
                            else:
                                update_item_progress(percentage)

                            last_update = time.time()

                        prev_percenage = percentage

        return tf_download
    else:
        tf_download.write(result.content)

    return tf_download.name
示例#3
0
def read_file(path, read_data=False):
    """
    @type path: str or unicode
    @type read_data: bool
    @return: @rtype:
    """
    if read_data:
        tempfile_data = get_named_temporary_file(auto_delete=False)
        dataf = open(path, "rb")
        chunk = dataf.read(2**20 * 5)

        while chunk:
            tempfile_data.write(chunk)
            chunk = dataf.read(2**20 * 5)
        tempfile_data.seek(0)
        data = tempfile_data.name
    else:
        data = None

    stats = os.stat(path)
    return stats.st_ctime, stats.st_atime, stats.st_mtime, stats.st_mode, stats.st_uid, stats.st_gid, stats.st_size, data
示例#4
0
def read_file(path, read_data=False):
    """
    @type path: str or unicode
    @type read_data: bool
    @return: @rtype:
    """
    if read_data:
        tempfile_data = get_named_temporary_file(auto_delete=False)
        dataf = open(path, "rb")
        chunk = dataf.read(2**20*5)

        while chunk:
            tempfile_data.write(chunk)
            chunk = dataf.read(2 ** 20 * 5)
        tempfile_data.seek(0)
        data = tempfile_data.name
    else:
        data = None

    stats = os.stat(path)
    return stats.st_ctime, stats.st_atime, stats.st_mtime, stats.st_mode, stats.st_uid, stats.st_gid, stats.st_size, data