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