import json
import yaml
import logging
logging.basicConfig(level=logging.ERROR, format='%(asctime)s - %(levelname)s - %(message)s')
def convert_metadata(metadata, input_format, output_format):
"""
Converts metadata from one format to another.
Args:
metadata (dict): The metadata to convert.
input_format (str): The format of the input metadata ('json', 'yaml').
output_format (str): The desired format of the output metadata ('json', 'yaml').
Returns:
str: The converted metadata as a string, or None if an error occurred.
"""
try:
if input_format == 'json':
# Load from JSON
data = json.dumps(metadata)
elif input_format == 'yaml':
# Load from YAML
data = yaml.dump(metadata) # Convert to string
else:
logging.error(f"Unsupported input format: {input_format}")
return None
if output_format == 'json':
# Convert to JSON
converted_data = json.loads(data)
elif output_format == 'yaml':
# Convert to YAML
converted_data = yaml.safe_load(data)
else:
logging.error(f"Unsupported output format: {output_format}")
return None
return yaml.dump(converted_data) # Convert back to string
except json.JSONDecodeError as e:
logging.error(f"Error decoding JSON: {e}")
return None
except yaml.YAMLError as e:
logging.error(f"Error parsing YAML: {e}")
return None
except Exception as e:
logging.error(f"An unexpected error occurred: {e}")
return None
if __name__ == '__main__':
# Example Usage
json_metadata = {"name": "Task 1", "status": "pending"}
yaml_metadata = """
name: Task 2
status: completed
"""
# Convert JSON to YAML
converted_yaml = convert_metadata(json_metadata, 'json', 'yaml')
if converted_yaml:
print("Converted to YAML:")
print(converted_yaml)
# Convert YAML to JSON
converted_json = convert_metadata(yaml_metadata, 'yaml', 'json')
if converted_json:
print("\nConverted to JSON:")
print(converted_json)
#Test invalid format
converted_invalid = convert_metadata(json_metadata, 'invalid', 'yaml')
if converted_invalid is None:
print("\nInvalid format test passed")
Add your comment