import json
import logging
class HeaderMetadataWrapper:
def __init__(self, dry_run=False):
self.dry_run = dry_run
self.logger = logging.getLogger(__name__)
def process_header_metadata(self, header_metadata):
"""
Processes header metadata, wrapping errors and supporting dry-run mode.
Args:
header_metadata (dict): A dictionary containing header metadata.
Returns:
dict: The processed header metadata. If an error occurs, returns the original metadata and logs the error.
"""
try:
# Simulate some processing logic
processed_metadata = self._validate_and_transform(header_metadata)
if self.dry_run:
self.logger.debug(f"Dry run: Processed metadata: {processed_metadata}")
return processed_metadata
else:
self.logger.info(f"Processed metadata: {processed_metadata}")
return processed_metadata
except Exception as e:
self.logger.error(f"Error processing metadata: {e}")
if self.dry_run:
self.logger.debug(f"Dry run: Returning original metadata due to error.")
return header_metadata
def _validate_and_transform(self, header_metadata):
"""
Example validation and transformation logic.
"""
if not isinstance(header_metadata, dict):
raise TypeError("Header metadata must be a dictionary.")
if 'key1' not in header_metadata:
raise ValueError("Missing required key 'key1'.")
# Simulate transformation
header_metadata['transformed_key'] = header_metadata['key1'].upper()
return header_metadata
if __name__ == '__main__':
# Example usage
logging.basicConfig(level=logging.DEBUG) # Configure logging for debug output
wrapper = HeaderMetadataWrapper(dry_run=True) # Set dry_run to True
metadata1 = {'key1': 'hello'}
processed_metadata1 = wrapper.process_header_metadata(metadata1)
print(f"Processed metadata 1: {processed_metadata1}")
metadata2 = {'key2': 'world'} # Missing key1
processed_metadata2 = wrapper.process_header_metadata(metadata2)
print(f"Processed metadata 2: {processed_metadata2}")
metadata3 = "not a dictionary"
processed_metadata3 = wrapper.process_header_metadata(metadata3)
print(f"Processed metadata 3: {processed_metadata3}")
Add your comment