docs: def set_local(self, key=None, value=None, data=None, **kwdata):
          """
          Locally store some data associated with this conversation.
  
          Data can be passed in either as a single dict, or as key-word args.
  
          For example, if you need to store the previous value of a remote field
          to determine if it has changed, you can use the following::
  
              prev = conversation.get_local('field')
              curr = conversation.get_remote('field')
              if prev != curr:
                  handle_change(prev, curr)
                  conversation.set_local('field', curr)
  
          Note: This uses :mod:`charmhelpers.core.unitdata` and requires that
          :meth:`~charmhelpers.core.unitdata.Storage.flush` be called.
  
          :param str key: The name of a field to set.
          :param value: A value to set. This value must be json serializable.
          :param dict data: A mapping of keys to values.
          :param **kwdata: A mapping of keys to values, as keyword arguments.
          """
          if data is None:
              data = {}
          if key is not None:
              data[key] = value
          data.update(kwdata)
          if not data:
              return
          unitdata.kv().update(data, prefix='%s.%s.' % (self.key, 'local-data'))