1. import logging
  2. import json
  3. # Configure logging
  4. logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
  5. def extend_metadata(data, metadata_override=None):
  6. """
  7. Extends existing metadata for a given data object with optional overrides.
  8. Args:
  9. data (dict): The data object to extend metadata for.
  10. metadata_override (dict, optional): A dictionary of metadata to override. Defaults to None.
  11. Returns:
  12. dict: The data object with extended metadata.
  13. """
  14. metadata = data.get('metadata', {}) # Get existing metadata, default to empty dict
  15. if metadata_override:
  16. metadata.update(metadata_override) # Update existing metadata with overrides
  17. # Add default metadata if it doesn't exist
  18. if 'created_at' not in metadata:
  19. metadata['created_at'] = datetime.now().isoformat()
  20. logging.info(f"Added default metadata: created_at = {metadata['created_at']}")
  21. if 'updated_at' not in metadata:
  22. metadata['updated_at'] = datetime.now().isoformat()
  23. logging.info(f"Added default metadata: updated_at = {metadata['updated_at']}")
  24. if 'source' not in metadata:
  25. metadata['source'] = 'internal_tool'
  26. logging.info(f"Added default metadata: source = internal_tool")
  27. # Optionally add more default metadata fields.
  28. data['metadata'] = metadata # Update the data with the extended metadata
  29. logging.info(f"Extended metadata for data: {data}")
  30. return data
  31. from datetime import datetime
  32. if __name__ == '__main__':
  33. # Example Usage
  34. test_data = {'id': 123, 'value': 'test'}
  35. override_metadata = {'status': 'active', 'version': '1.0'}
  36. extended_data = extend_metadata(test_data, override_metadata)
  37. print(json.dumps(extended_data, indent=2))
  38. extended_data_no_override = extend_metadata(test_data)
  39. print(json.dumps(extended_data_no_override, indent=2))

Add your comment