def report(self, event, metadata=None, block=None):
        """
        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
        """
        # 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
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