@@ -2186,6 +2186,17 @@ def __init__(self, *args, **kwargs):
21862186 # an empty response pointing to the same file.
21872187 self .last_queried_file = None
21882188
2189+ def _should_return_empty (self , file_name : str ) -> bool :
2190+ # Note that every other request is empty – the logic is as follows:
2191+ # 1st request – unknown start name – empty response
2192+ # 2nd request – known start name – normal response with a proper next filename
2193+ # 3rd request – unknown start name (as it's the next filename from the previous request) – empty response
2194+ # 4th request – known start name
2195+ # etc. This works especially well when using limiter of number of files fetched set to 1.
2196+ should_return_empty = self .last_queried_file != file_name
2197+ self .last_queried_file = file_name
2198+ return should_return_empty
2199+
21892200 def list_file_versions (
21902201 self ,
21912202 account_auth_token ,
@@ -2194,8 +2205,7 @@ def list_file_versions(
21942205 max_file_count = None , # noqa
21952206 prefix = None ,
21962207 ):
2197- if self .last_queried_file != start_file_name :
2198- self .last_queried_file = start_file_name
2208+ if self ._should_return_empty (start_file_name ):
21992209 return dict (files = [], nextFileName = start_file_name , nextFileId = start_file_id )
22002210 return super ().list_file_versions (
22012211 account_auth_token ,
@@ -2212,8 +2222,7 @@ def list_file_names(
22122222 max_file_count = None , # noqa
22132223 prefix = None ,
22142224 ):
2215- if self .last_queried_file != start_file_name :
2216- self .last_queried_file = start_file_name
2225+ if self ._should_return_empty (start_file_name ):
22172226 return dict (files = [], nextFileName = start_file_name )
22182227 return super ().list_file_names (
22192228 account_auth_token ,
0 commit comments