Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_simple_concatenate(self):
sources = [
CopySource(self.recommended_size),
UploadSource(self.recommended_size),
CopySource(self.recommended_size),
UploadSource(self.recommended_size),
]
self.verify_emerge_plan_for_write_intents(
WriteIntent.wrap_sources_iterator(sources),
[part(source) for source in sources],
)
def test_copy_then_small_copy(self):
source_copy = CopySource(self.recommended_size)
source_small_copy = CopySource(self.min_size - 1)
write_intents = WriteIntent.wrap_sources_iterator([source_copy, source_small_copy])
self.verify_emerge_plan_for_write_intents(
write_intents,
[
part(source_copy),
part([source_small_copy]), # this means: download and then upload
],
def test_upload_small_copy_x2_then_copy(self):
source_upload = UploadSource(self.recommended_size)
source_small_copy1 = CopySource(length=self.min_size - 1)
source_small_copy2 = CopySource(length=self.min_size - 1)
source_copy = CopySource(self.recommended_size)
write_intents = WriteIntent.wrap_sources_iterator(
[source_upload, source_small_copy1, source_small_copy2, source_copy]
)
self.verify_emerge_plan_for_write_intents(
write_intents,
[
part(source_upload),
part([
source_small_copy1,
source_small_copy2,
]),
part(source_copy),
],
def test_upload_small_copy_then_copy(self):
source_upload = UploadSource(self.recommended_size)
source_small_copy = CopySource(self.min_size - 1)
source_copy = CopySource(self.recommended_size)
write_intents = WriteIntent.wrap_sources_iterator([source_upload, source_small_copy, source_copy])
self.verify_emerge_plan_for_write_intents(
write_intents,
[
part([
source_upload,
source_small_copy,
]),
part(source_copy),
]
def test_small_upload_not_enough_copy_then_upload(self):
self.assertGreater(self.min_size, 2 * MEGABYTE)
source_small_upload = UploadSource(self.min_size - 2 * MEGABYTE)
source_copy = CopySource(self.min_size + MEGABYTE)
source_upload = UploadSource(self.recommended_size)
write_intents = WriteIntent.wrap_sources_iterator(
[source_small_upload, source_copy, source_upload]
)
small_parts_len = source_small_upload.get_content_length() + source_copy.get_content_length()
source_upload_split_offset = self.recommended_size - small_parts_len
self.verify_emerge_plan_for_write_intents(
write_intents,
[
part([
source_small_upload,
source_copy,
(source_upload, 0, source_upload_split_offset),
]),
part(source_upload, source_upload_split_offset, small_parts_len),
],
def test_small_copy_then_copy(self):
self.assertGreater(self.min_size, MEGABYTE)
source_small_copy = CopySource(self.min_size - MEGABYTE)
source_copy = CopySource(self.recommended_size)
write_intents = WriteIntent.wrap_sources_iterator([source_small_copy, source_copy])
self.verify_emerge_plan_for_write_intents(
write_intents,
[
part([
source_small_copy,
(source_copy, 0, MEGABYTE),
]),
part(source_copy, MEGABYTE, self.recommended_size - MEGABYTE)
],
def test_upload_multiple_sources(self):
self.assertEqual(self.recommended_size % 8, 0)
unit_part_size = int(self.recommended_size / 8)
uneven_part_size = 3 * unit_part_size
sources = [
UploadSource(uneven_part_size)
for i in range(8)
]
self.verify_emerge_plan_for_write_intents(
WriteIntent.wrap_sources_iterator(sources),
[
part([
sources[0],
sources[1],
(sources[2], 0, 2 * unit_part_size),
]),
part([
(sources[2], 2 * unit_part_size, unit_part_size),
sources[3],
sources[4],
(sources[5], 0, unit_part_size),
]),
part([
(sources[5], unit_part_size, 2 * unit_part_size),
sources[6],
sources[7],
:param str new_file_name: file name of the new file
:param str,None content_type: content_type for the new file, if ``None`` content_type would be
automatically determined from file name or it may be copied if it resolves
as single part remote source copy
:param dict,None file_info: file_info for the new file, if ``None`` it will be set to empty dict
or it may be copied if it resolves as single part remote source copy
:param b2sdk.v1.AbstractProgressListener,None progress_listener: a progress listener object to use,
or ``None`` to not report progress
:param int,None recommended_upload_part_size: the recommended part size to use for uploading local sources
or ``None`` to determine automatically, but remote sources would be copied with
maximum possible part size
:param str,None continue_large_file_id: large file id that should be selected to resume file creation
for multipart upload/copy, ``None`` for automatic search for this id
"""
return self.create_file(
WriteIntent.wrap_sources_iterator(outbound_sources),
file_name,
content_type=content_type,
file_info=file_info,
progress_listener=progress_listener,
recommended_upload_part_size=recommended_upload_part_size,
continue_large_file_id=continue_large_file_id,
)
:param str,None content_type: content_type for the new file, if ``None`` content_type would be
automatically determined or it may be copied if it resolves
as single part remote source copy
:param dict,None file_info: file_info for the new file, if ``None`` it will be set to empty dict
or it may be copied if it resolves as single part remote source copy
:param b2sdk.v1.AbstractProgressListener,None progress_listener: a progress listener object to use,
or ``None`` to not report progress
:param int,None recommended_upload_part_size: the recommended part size to use for uploading local sources
or ``None`` to determine automatically, but remote sources would be copied with
maximum possible part size
:param str,None continue_large_file_id: large file id that should be selected to resume file creation
for multipart upload/copy, if ``None`` in multipart case it would always start a new
large file
"""
return self.create_file_stream(
WriteIntent.wrap_sources_iterator(outbound_sources_iterator),
file_name,
content_type=content_type,
file_info=file_info,
progress_listener=progress_listener,
recommended_upload_part_size=recommended_upload_part_size,
continue_large_file_id=continue_large_file_id,
)