old_contents: class Data:
  
      """A bucket for arbitrary data.
  
      Data can be added and retrieved as attributes (dot notation) or
      items (bracket notation).
  
      """
  
      def __init__(self, **data):
          super().__setattr__('__data', {})
          for name, value in data.items():
              self[name] = value
  
      def __getattr__(self, name):
          return self.__data[name]
  
      __getitem__ = __getattr__
  
      def __setattr__(self, name, value):
          self.__data[name] = value
  
      __setitem__ = __setattr__
  
new_contents: class Data:
  
      """A bucket for arbitrary data.
  
      Data can be added and retrieved as attributes (dot notation) or
      items (bracket notation).
  
      When a ``dict`` is added, it will be converted to an instance of
      :class:`Data`.
  
      """
  
      def __init__(self, **data):
          super().__setattr__('__data', {})
          for name, value in data.items():
              self[name] = value
  
      def __getattr__(self, name):
          data = super().__getattribute__('__data')
          return data[name]
  
      __getitem__ = __getattr__
  
      def __setattr__(self, name, value):
          data = super().__getattribute__('__data')
          if isinstance(value, dict):
              value = self.__class__(**value)
          data[name] = value
  
      __setitem__ = __setattr__
  
subject: Allow arbitrary data to be attached to commands (round 2)