avoids copying entire result into a new list
This commit is contained in:
		
							parent
							
								
									aa4be6fcad
								
							
						
					
					
						commit
						9ba28a05b8
					
				@ -2,6 +2,7 @@ from __future__ import unicode_literals
 | 
			
		||||
 | 
			
		||||
import datetime
 | 
			
		||||
import functools
 | 
			
		||||
import itertools
 | 
			
		||||
import json
 | 
			
		||||
import os
 | 
			
		||||
import time
 | 
			
		||||
@ -43,16 +44,12 @@ def paginate(limit, start_arg="next_token", limit_arg="max_results"):
 | 
			
		||||
    def outer_wrapper(func):
 | 
			
		||||
        @functools.wraps(func)
 | 
			
		||||
        def wrapper(*args, **kwargs):
 | 
			
		||||
            # setup
 | 
			
		||||
            start = int(default_start if kwargs.get(start_arg) is None else kwargs[start_arg])
 | 
			
		||||
            stop = int(limit if kwargs.get(limit_arg) is None else kwargs[limit_arg])
 | 
			
		||||
            end = start + stop
 | 
			
		||||
            # call
 | 
			
		||||
            lim = int(limit if kwargs.get(limit_arg) is None else kwargs[limit_arg])
 | 
			
		||||
            stop = start + lim
 | 
			
		||||
            result = func(*args, **kwargs)
 | 
			
		||||
            # modify
 | 
			
		||||
            results = list(result)
 | 
			
		||||
            limited_results = results[start: end]
 | 
			
		||||
            next_token = end if end < len(results) else None
 | 
			
		||||
            limited_results = list(itertools.islice(result, start, stop))
 | 
			
		||||
            next_token = stop if stop < len(result) else None
 | 
			
		||||
            return limited_results, next_token
 | 
			
		||||
        return wrapper
 | 
			
		||||
    return outer_wrapper
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user