1. import json
  2. import logging
  3. class HeaderMetadataWrapper:
  4. def __init__(self, dry_run=False):
  5. self.dry_run = dry_run
  6. self.logger = logging.getLogger(__name__)
  7. def process_header_metadata(self, header_metadata):
  8. """
  9. Processes header metadata, wrapping errors and supporting dry-run mode.
  10. Args:
  11. header_metadata (dict): A dictionary containing header metadata.
  12. Returns:
  13. dict: The processed header metadata. If an error occurs, returns the original metadata and logs the error.
  14. """
  15. try:
  16. # Simulate some processing logic
  17. processed_metadata = self._validate_and_transform(header_metadata)
  18. if self.dry_run:
  19. self.logger.debug(f"Dry run: Processed metadata: {processed_metadata}")
  20. return processed_metadata
  21. else:
  22. self.logger.info(f"Processed metadata: {processed_metadata}")
  23. return processed_metadata
  24. except Exception as e:
  25. self.logger.error(f"Error processing metadata: {e}")
  26. if self.dry_run:
  27. self.logger.debug(f"Dry run: Returning original metadata due to error.")
  28. return header_metadata
  29. def _validate_and_transform(self, header_metadata):
  30. """
  31. Example validation and transformation logic.
  32. """
  33. if not isinstance(header_metadata, dict):
  34. raise TypeError("Header metadata must be a dictionary.")
  35. if 'key1' not in header_metadata:
  36. raise ValueError("Missing required key 'key1'.")
  37. # Simulate transformation
  38. header_metadata['transformed_key'] = header_metadata['key1'].upper()
  39. return header_metadata
  40. if __name__ == '__main__':
  41. # Example usage
  42. logging.basicConfig(level=logging.DEBUG) # Configure logging for debug output
  43. wrapper = HeaderMetadataWrapper(dry_run=True) # Set dry_run to True
  44. metadata1 = {'key1': 'hello'}
  45. processed_metadata1 = wrapper.process_header_metadata(metadata1)
  46. print(f"Processed metadata 1: {processed_metadata1}")
  47. metadata2 = {'key2': 'world'} # Missing key1
  48. processed_metadata2 = wrapper.process_header_metadata(metadata2)
  49. print(f"Processed metadata 2: {processed_metadata2}")
  50. metadata3 = "not a dictionary"
  51. processed_metadata3 = wrapper.process_header_metadata(metadata3)
  52. print(f"Processed metadata 3: {processed_metadata3}")

Add your comment