docs: def set_from_dict(self, data, source=None):
          """
          :param dict data: Set this object from deserialized 'dict'
          :param source: Source where 'data' came from (optional)
          """
          if source:
              self._source = source
  
          if not data:
              return
  
          for key, value in data.items():
              key = key.replace("-", "_")
              if not hasattr(self, key):
                  LOG.debug("%s is not an attribute of %s", key, self.__class__.__name__)
                  continue
  
              attr = getattr(self, key)
              if attr is not None and not same_type(value, attr):
                  source = getattr(self, "_source", None)
                  origin = " in %s" % source if source else ""
                  LOG.debug("Wrong type '%s' for %s.%s%s, expecting '%s'", type_name(value), type_name(self), key, origin, type_name(attr))
                  continue
  
              setattr(self, key, value)