1. import argparse
  2. import json
  3. import time
  4. def parse_metadata_arguments(metadata_file, retry_interval=5):
  5. """
  6. Parses metadata arguments from a JSON file, handling retry intervals.
  7. Args:
  8. metadata_file (str): Path to the JSON metadata file.
  9. retry_interval (int): Retry interval in seconds (default: 5).
  10. Returns:
  11. dict: A dictionary containing the parsed metadata arguments.
  12. Returns None if file not found or invalid JSON.
  13. """
  14. try:
  15. with open(metadata_file, 'r') as f:
  16. metadata = json.load(f)
  17. except FileNotFoundError:
  18. print(f"Error: Metadata file not found: {metadata_file}")
  19. return None
  20. except json.JSONDecodeError:
  21. print(f"Error: Invalid JSON in metadata file: {metadata_file}")
  22. return None
  23. # Validate required fields (example)
  24. if 'target' not in metadata or 'retries' not in metadata:
  25. print("Error: Metadata file missing required fields (target, retries).")
  26. return None
  27. # Ensure retries is an integer
  28. if not isinstance(metadata['retries'], int) or metadata['retries'] <= 0:
  29. print("Error: 'retries' must be a positive integer.")
  30. return None
  31. # Process retry interval
  32. if 'retry_interval' in metadata:
  33. try:
  34. retry_interval = int(metadata['retry_interval'])
  35. if retry_interval <= 0:
  36. print("Error: retry_interval must be a positive integer.")
  37. return None
  38. except ValueError:
  39. print("Error: retry_interval is not a valid integer.")
  40. return None
  41. return metadata
  42. if __name__ == '__main__':
  43. parser = argparse.ArgumentParser(description='Parse metadata arguments.')
  44. parser.add_argument('metadata_file', type=str, help='Path to the metadata file.')
  45. parser.add_argument('--retry_interval', type=int, default=5, help='Retry interval in seconds.')
  46. args = parser.parse_args()
  47. metadata = parse_metadata_arguments(args.metadata_file, args.retry_interval)
  48. if metadata:
  49. print("Parsed Metadata:")
  50. print(json.dumps(metadata, indent=4)) # Pretty print for readability

Add your comment