Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
# "folder". If the first search doesn't produce enough results,
# then we keep calling list_file_names until we get all of the
# names in this "folder".
current_dir = None
start_file_name = prefix
start_file_id = None
session = self.api.session
while True:
if show_versions:
response = session.list_file_versions(
self.id_, start_file_name, start_file_id, fetch_count, prefix
)
else:
response = session.list_file_names(self.id_, start_file_name, fetch_count, prefix)
for entry in response['files']:
file_version_info = FileVersionInfoFactory.from_api_response(entry)
if not file_version_info.file_name.startswith(prefix):
# We're past the files we care about
return
after_prefix = file_version_info.file_name[len(prefix):]
if '/' not in after_prefix or recursive:
# This is not a folder, so we'll print it out and
# continue on.
yield file_version_info, None
current_dir = None
else:
# This is a folder. If it's different than the folder
# we're already in, then we can print it. This check
# is needed, because all of the files in the folder
# will be in the list.
folder_with_slash = after_prefix.split('/')[0] + '/'
if folder_with_slash != current_dir:
file_id,
large_file_upload_state,
finished_parts=finished_parts,
)
execution_step = execution_step_factory.get_execution_step()
future = self._execute_step(execution_step)
part_futures.append(future)
# Collect the sha1 checksums of the parts as the uploads finish.
# If any of them raised an exception, that same exception will
# be raised here by result()
part_sha1_array = [interruptible_get_result(f)['contentSha1'] for f in part_futures]
# Finish the large file
response = self.services.session.finish_large_file(file_id, part_sha1_array)
return FileVersionInfoFactory.from_api_response(response)
def hide_file(self, file_name):
"""
Hide a file.
:param str file_name: a file name
:rtype: b2sdk.v1.FileVersionInfo
"""
response = self.api.session.hide_file(self.id_, file_name)
return FileVersionInfoFactory.from_api_response(response)
metadata_directive = MetadataDirectiveMode.COPY
else:
if file_info is None:
raise ValueError('File info can be not set only when content type is not set')
metadata_directive = MetadataDirectiveMode.REPLACE
response = self.services.session.copy_file(
copy_source.file_id,
file_name,
bytes_range=bytes_range,
metadata_directive=metadata_directive,
content_type=content_type,
file_info=file_info,
destination_bucket_id=destination_bucket_id
)
file_info = FileVersionInfoFactory.from_api_response(response)
if progress_listener is not None:
progress_listener.bytes_completed(file_info.size)
return file_info
if upload_source.is_sha1_known():
content_sha1 = upload_source.get_content_sha1()
else:
input_stream = StreamWithHash(
input_stream, stream_length=content_length
)
content_sha1 = HEX_DIGITS_AT_END
# it is important that `len()` works on `input_stream`
response = self.services.session.upload_file(
bucket_id, file_name, len(input_stream), content_type, content_sha1,
file_info, input_stream
)
if content_sha1 == HEX_DIGITS_AT_END:
content_sha1 = input_stream.hash
assert content_sha1 == response['contentSha1']
return FileVersionInfoFactory.from_api_response(response)
except B2Error as e:
if not e.should_retry_upload():
raise
exception_info_list.append(e)
self.account_info.clear_bucket_upload_data(bucket_id)
raise MaxRetriesExceeded(self.MAX_UPLOAD_ATTEMPTS, exception_info_list)
:param int,None fetch_count: how many entries to list per API call or ``None`` to use the default. Acceptable values: 1 - 10000
:rtype: generator[b2sdk.v1.FileVersionInfo]
"""
if fetch_count is not None and fetch_count <= 0:
# fetch_count equal to 0 means "use API default", which we don't want to support here
raise ValueError("unsupported fetch_count value")
start_file_name = file_name
start_file_id = None
session = self.api.session
while 1:
response = session.list_file_versions(
self.id_, start_file_name, start_file_id, fetch_count, file_name
)
for entry in response['files']:
file_version_info = FileVersionInfoFactory.from_api_response(entry)
if file_version_info.file_name != file_name:
# All versions for the requested file name have been listed.
return
yield file_version_info
start_file_name = response['nextFileName']
start_file_id = response['nextFileId']
if start_file_name is None:
return