code: def report(self, event, metadata=None, block=None):
          
          # Don't allow reporting if the underlying sender is terminated
          if self._sender.is_terminated:
              self._notify(logging.ERROR, consts.LOG_MSG_REPORT_AFTER_TERMINATION)
              return False
  
          # Send the event to the queue if it is a dict or a string.
          if isinstance(event, (dict,) + py2to3.basestring):
              formatted_event = self._format_event(event, metadata)
  
              should_block = block if block is not None else self.is_blocking
              return self._sender.enqueue_event(formatted_event, should_block)
  
          else:  # Event is not a dict nor a string. Deny it.
              error_message = (consts.LOG_MSG_BAD_EVENT % (type(event), event))
              self._notify(logging.ERROR, error_message)
              return False
docs: Reports an event to Alooma by formatting it properly and placing it in
          the buffer to be sent by the Sender instance
          :param event:    A dict / string representing an event
          :param metadata: (Optional) A dict with extra metadata to be attached to
                           the event
          :param block:    (Optional) If True, the function will block the thread
                           until the event buffer has space for the event.
                           If False, reported events are discarded if the queue is
                           full. Defaults to None, which uses the global `block`
                           parameter given in the `init`.
          :return:         True if the event was successfully enqueued, else False