from typing import Any, List def split_chunks(item_list: List[Any], chunk_size: int): for i in range(0, len(item_list), chunk_size): yield item_list[i:i + chunk_size] def request_in_chunks(chunk_size: int, field_name: str, has_result: bool = True): def decorator(f): def wrapper(*args, **kwargs): if field_name not in kwargs: return f(*args, **kwargs) result = {} if has_result else None item_list = list(kwargs[field_name]) modified_kwargs = dict(kwargs) for item_chunk in split_chunks(item_list, chunk_size): modified_kwargs[field_name] = item_chunk result_chunk = f(*args, **modified_kwargs) if has_result: result.update(result_chunk) return result return wrapper return decorator