<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def enqueue(self, stanza, **kwargs):
 """ Put a `stanza` in the internal transmission queue and return a token to track it. :param stanza: Stanza to send :type stanza: :class:`IQ`, :class:`Message` or :class:`Presence` :param kwargs: see :class:`StanzaToken` :raises ConnectionError: if the stream is not :attr:`established` yet. :return: token which tracks the stanza :rtype: :class:`StanzaToken` The `stanza` is enqueued in the active queue for transmission and will be sent on the next opportunity. The relative ordering of stanzas enqueued is always preserved. Return a fresh :class:`StanzaToken` instance which traks the progress of the transmission of the `stanza`. The `kwargs` are forwarded to the :class:`StanzaToken` constructor. This method calls :meth:`~.stanza.StanzaBase.autoset_id` on the stanza automatically. .. seealso:: :meth:`send` for a more high-level way to send stanzas. .. versionchanged:: 0.10 This method has been moved from :meth:`aioxmpp.stream.StanzaStream.enqueue`. """

        if not self.established_event.is_set():
            raise ConnectionError("stream is not ready")

        return self.stream._enqueue(stanza, **kwargs)