1. import argparse
  2. import logging
  3. def paginate_cli_args(parser, args, results_generator, page_size=10):
  4. """
  5. Paginates results from a generator based on CLI arguments.
  6. Args:
  7. parser: argparse.ArgumentParser object.
  8. args: argparse.Namespace object containing CLI arguments.
  9. results_generator: A generator function that yields results.
  10. page_size: The number of results per page.
  11. """
  12. # Configure logging
  13. logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
  14. try:
  15. page = args.page if hasattr(args, 'page') else 1 # Default to page 1 if not specified
  16. total_results = sum(1 for _ in results_generator) #Count total results
  17. if total_results == 0:
  18. logging.info("No results found.")
  19. return
  20. start = (page - 1) * page_size
  21. end = start + page_size
  22. for i, result in enumerate(results_generator):
  23. if i >= start and i < end:
  24. logging.debug(f"Processing result {i+1}/{total_results}")
  25. yield result
  26. elif i >= end:
  27. logging.info(f"Finished processing page {page}.")
  28. break #Stop if end of results is reached
  29. except Exception as e:
  30. logging.error(f"An error occurred during pagination: {e}")
  31. raise
  32. if __name__ == '__main__':
  33. parser = argparse.ArgumentParser(description="Paginate CLI arguments.")
  34. parser.add_argument("--page", type=int, help="Page number to retrieve.")
  35. # Example results generator
  36. def example_results(n):
  37. for i in range(n):
  38. yield f"Result {i+1}"
  39. args = parser.parse_args()
  40. try:
  41. paginated_results = list(paginate_cli_args(parser, args, example_results(25), page_size=5)) #Example Usage
  42. for result in paginated_results:
  43. print(result)
  44. except Exception as e:
  45. print(f"Error: {e}")

Add your comment