1. import json
  2. import datetime
  3. def validate_metadata(metadata_file):
  4. """
  5. Validates metadata from a JSON file.
  6. Performs defensive checks on data types, required fields, and date formats.
  7. """
  8. try:
  9. with open(metadata_file, 'r') as f:
  10. metadata = json.load(f)
  11. except FileNotFoundError:
  12. print(f"Error: Metadata file '{metadata_file}' not found.")
  13. return False
  14. except json.JSONDecodeError:
  15. print(f"Error: Invalid JSON format in '{metadata_file}'.")
  16. return False
  17. # Defensive check: metadata must be a dictionary
  18. if not isinstance(metadata, dict):
  19. print("Error: Metadata must be a JSON object (dictionary).")
  20. return False
  21. # Required fields validation
  22. required_fields = ["script_name", "author", "creation_date", "last_modified"]
  23. for field in required_fields:
  24. if field not in metadata:
  25. print(f"Error: Missing required field '{field}'.")
  26. return False
  27. # Data type validation
  28. if not isinstance(metadata["script_name"], str):
  29. print("Error: 'script_name' must be a string.")
  30. return False
  31. if not isinstance(metadata["author"], str):
  32. print("Error: 'author' must be a string.")
  33. return False
  34. # Date validation
  35. try:
  36. creation_date = datetime.datetime.strptime(metadata["creation_date"], "%Y-%m-%d") #Expect YYYY-MM-DD
  37. except ValueError:
  38. print("Error: 'creation_date' must be in YYYY-MM-DD format.")
  39. return False
  40. if not isinstance(metadata["last_modified"], str):
  41. print("Error: 'last_modified' must be a string.")
  42. return False
  43. try:
  44. last_modified_date = datetime.datetime.strptime(metadata["last_modified"], "%Y-%m-%d") #Expect YYYY-MM-DD
  45. except ValueError:
  46. print("Error: 'last_modified' must be in YYYY-MM-DD format.")
  47. return False
  48. # Additional checks (example)
  49. if len(metadata["script_name"]) < 3:
  50. print("Warning: 'script_name' is very short.")
  51. return True
  52. if __name__ == '__main__':
  53. # Example usage:
  54. metadata_file = "metadata.json" # Replace with your metadata file
  55. if validate_metadata(metadata_file):
  56. print("Metadata is valid.")
  57. else:
  58. print("Metadata is invalid.")

Add your comment