import json
import datetime
def validate_metadata(metadata_file):
"""
Validates metadata from a JSON file.
Performs defensive checks on data types, required fields, and date formats.
"""
try:
with open(metadata_file, 'r') as f:
metadata = json.load(f)
except FileNotFoundError:
print(f"Error: Metadata file '{metadata_file}' not found.")
return False
except json.JSONDecodeError:
print(f"Error: Invalid JSON format in '{metadata_file}'.")
return False
# Defensive check: metadata must be a dictionary
if not isinstance(metadata, dict):
print("Error: Metadata must be a JSON object (dictionary).")
return False
# Required fields validation
required_fields = ["script_name", "author", "creation_date", "last_modified"]
for field in required_fields:
if field not in metadata:
print(f"Error: Missing required field '{field}'.")
return False
# Data type validation
if not isinstance(metadata["script_name"], str):
print("Error: 'script_name' must be a string.")
return False
if not isinstance(metadata["author"], str):
print("Error: 'author' must be a string.")
return False
# Date validation
try:
creation_date = datetime.datetime.strptime(metadata["creation_date"], "%Y-%m-%d") #Expect YYYY-MM-DD
except ValueError:
print("Error: 'creation_date' must be in YYYY-MM-DD format.")
return False
if not isinstance(metadata["last_modified"], str):
print("Error: 'last_modified' must be a string.")
return False
try:
last_modified_date = datetime.datetime.strptime(metadata["last_modified"], "%Y-%m-%d") #Expect YYYY-MM-DD
except ValueError:
print("Error: 'last_modified' must be in YYYY-MM-DD format.")
return False
# Additional checks (example)
if len(metadata["script_name"]) < 3:
print("Warning: 'script_name' is very short.")
return True
if __name__ == '__main__':
# Example usage:
metadata_file = "metadata.json" # Replace with your metadata file
if validate_metadata(metadata_file):
print("Metadata is valid.")
else:
print("Metadata is invalid.")
Add your comment