1. import json
  2. import yaml
  3. import logging
  4. logging.basicConfig(level=logging.ERROR, format='%(asctime)s - %(levelname)s - %(message)s')
  5. def convert_metadata(metadata, input_format, output_format):
  6. """
  7. Converts metadata from one format to another.
  8. Args:
  9. metadata (dict): The metadata to convert.
  10. input_format (str): The format of the input metadata ('json', 'yaml').
  11. output_format (str): The desired format of the output metadata ('json', 'yaml').
  12. Returns:
  13. str: The converted metadata as a string, or None if an error occurred.
  14. """
  15. try:
  16. if input_format == 'json':
  17. # Load from JSON
  18. data = json.dumps(metadata)
  19. elif input_format == 'yaml':
  20. # Load from YAML
  21. data = yaml.dump(metadata) # Convert to string
  22. else:
  23. logging.error(f"Unsupported input format: {input_format}")
  24. return None
  25. if output_format == 'json':
  26. # Convert to JSON
  27. converted_data = json.loads(data)
  28. elif output_format == 'yaml':
  29. # Convert to YAML
  30. converted_data = yaml.safe_load(data)
  31. else:
  32. logging.error(f"Unsupported output format: {output_format}")
  33. return None
  34. return yaml.dump(converted_data) # Convert back to string
  35. except json.JSONDecodeError as e:
  36. logging.error(f"Error decoding JSON: {e}")
  37. return None
  38. except yaml.YAMLError as e:
  39. logging.error(f"Error parsing YAML: {e}")
  40. return None
  41. except Exception as e:
  42. logging.error(f"An unexpected error occurred: {e}")
  43. return None
  44. if __name__ == '__main__':
  45. # Example Usage
  46. json_metadata = {"name": "Task 1", "status": "pending"}
  47. yaml_metadata = """
  48. name: Task 2
  49. status: completed
  50. """
  51. # Convert JSON to YAML
  52. converted_yaml = convert_metadata(json_metadata, 'json', 'yaml')
  53. if converted_yaml:
  54. print("Converted to YAML:")
  55. print(converted_yaml)
  56. # Convert YAML to JSON
  57. converted_json = convert_metadata(yaml_metadata, 'yaml', 'json')
  58. if converted_json:
  59. print("\nConverted to JSON:")
  60. print(converted_json)
  61. #Test invalid format
  62. converted_invalid = convert_metadata(json_metadata, 'invalid', 'yaml')
  63. if converted_invalid is None:
  64. print("\nInvalid format test passed")

Add your comment