Beispiel #1
0
    def build_from_chosen(cls, dir_name, absolute_root, chosen_files=None):
        cur_th = TaskResourceHeader(dir_name)

        abs_dirs = split_path(absolute_root)

        for f in chosen_files:

            dir_, file_name = os.path.split(f)
            dirs = split_path(dir_)[len(abs_dirs):]

            last_header = cur_th

            for d in dirs:

                child_sub_dir_header = TaskResourceHeader(d)
                if last_header.__has_sub_header(d):
                    last_header = last_header.__get_sub_header(d)
                else:
                    last_header.sub_dir_headers.append(child_sub_dir_header)
                    last_header = child_sub_dir_header

            hsh = SimpleHash.hash_file_base64(f)
            last_header.files_data.append((file_name, hsh))

        return cur_th
Beispiel #2
0
    def build_parts_header_delta_from_chosen(cls, header, absolute_root,
                                             res_parts):
        if not isinstance(header, TaskResourceHeader):
            raise TypeError(
                "Incorrect header type: {}. Should be TaskResourceHeader".
                format(type(header)))
        cur_th = TaskResourceHeader(header.dir_name)
        abs_dirs = split_path(absolute_root)
        delta_parts = []

        for file_, parts in res_parts.items():
            dir_, file_name = os.path.split(file_)
            dirs = split_path(dir_)[len(abs_dirs):]

            last_header = cur_th
            last_ref_header = header

            last_header, last_ref_header, ref_header_found = cls.__resolve_dirs(
                dirs, last_header, last_ref_header)

            hsh = SimpleHash.hash_file_base64(file_)
            if ref_header_found:
                if last_ref_header.__has_file(file_name):
                    if hsh == last_ref_header.__get_file_hash(file_name):
                        continue
            last_header.files_data.append((file_name, hsh, parts))
            delta_parts += parts

        return cur_th, delta_parts