def determine_part_size()

in oss2/utils.py [0:0]


    def determine_part_size(self, data_size, excepted_part_size=None):
        if excepted_part_size:
            if self.is_valid_part_size(excepted_part_size, data_size):
                return excepted_part_size
            # excepted_part_size is not aligned
            elif excepted_part_size * defaults.max_part_count >= data_size:
                part_size = int(excepted_part_size / self.block_size_len + 1) * self.block_size_len
                return part_size

        # if excepted_part_size is None or is too small, calculate a correct part_size
        part_size = defaults.part_size
        while part_size * defaults.max_part_count < data_size:
            part_size = part_size * 2

        if not self.is_block_aligned(part_size):
            part_size = int(part_size / self.block_size_len + 1) * self.block_size_len

        return part_size