Get a :class:`~okcupyd.question.UserQuestion` corresponding to the
        given :class:`~okcupyd.question.Question`.

        HUGE CAVEATS: If the logged in user has not answered the relevant
        question, it will automatically be answered with whatever the first
        answer to the question is.

        For the sake of reducing the number of requests made when
        this function is called repeatedly this function does not
        bust the cache of this :class:`~.User`'s
        :attr:`okcupyd.profile.Profile.questions` attribute. That means that
        a question that HAS been answered could still be answered by
        this function if this :class:`~.User`'s
        :attr:`~okcupyd.profile.P:attr:`okcupyd.profile.Profile.questions`
        was populated previously (This population happens automatically --
        See :class:`~okcupyd.util.fetchable.Fetchable` for details about when
        and how this happens).

        :param question: The question for which a
                         :class:`~okcupyd.question.UserQuestion` should
                         be retrieved.
        :type question: :class:`~okcupyd.question.BaseQuestion`
        :param fast: Don't try to look through the users existing questions to
                     see if arbitrarily answering the question can be avoided.
        :type fast: bool
        :param bust_questions_cache: clear the
                                     :attr:`~okcupyd.profile.Profile.questions`
                                     attribute of this users
                                     :class:`~okcupyd.profile.Profile`
                                     before looking for an existing answer.
                                     Be aware that even this does not eliminate
                                     all race conditions.
        :type bust_questions_cache: bool

def get_user_question(self, question, fast=False,
                          bust_questions_cache=False):
        """Get a :class:`~okcupyd.question.UserQuestion` corresponding to the
        given :class:`~okcupyd.question.Question`.

        HUGE CAVEATS: If the logged in user has not answered the relevant
        question, it will automatically be answered with whatever the first
        answer to the question is.

        For the sake of reducing the number of requests made when
        this function is called repeatedly this function does not
        bust the cache of this :class:`~.User`'s
        :attr:`okcupyd.profile.Profile.questions` attribute. That means that
        a question that HAS been answered could still be answered by
        this function if this :class:`~.User`'s
        :attr:`~okcupyd.profile.P:attr:`okcupyd.profile.Profile.questions`
        was populated previously (This population happens automatically --
        See :class:`~okcupyd.util.fetchable.Fetchable` for details about when
        and how this happens).

        :param question: The question for which a
                         :class:`~okcupyd.question.UserQuestion` should
                         be retrieved.
        :type question: :class:`~okcupyd.question.BaseQuestion`
        :param fast: Don't try to look through the users existing questions to
                     see if arbitrarily answering the question can be avoided.
        :type fast: bool
        :param bust_questions_cache: clear the
                                     :attr:`~okcupyd.profile.Profile.questions`
                                     attribute of this users
                                     :class:`~okcupyd.profile.Profile`
                                     before looking for an existing answer.
                                     Be aware that even this does not eliminate
                                     all race conditions.
        :type bust_questions_cache: bool
        """
        if bust_questions_cache:
            self.profile.questions()
        user_question = None if fast else self.profile.find_question(
            question.id
        )
        if user_question is None:
            self.questions.respond(question.id, [1], [1], 3)
            # Give okcupid some time to update. I wish there were a better
            # way...
            for _ in range(10):
                start_time = time.time()
                user_question = self.profile.find_question(
                    question.id,
                    self.profile.question_fetchable(recent=1)
                )
                if user_question is None:
                    log.debug(
                        "Could not find question with id {0} in "
                        "questions.".format(question.id)
                    )
                    if time.time() - start_time < 1:
                        time.sleep(1)
                else:
                    break
        return user_question