def METHOD_NAME(self, timeout=None, poll_interval=5, verbose=False):
    if not self.async_accepted:
        return self
    session = self.__session
    poll_interval = max(1, poll_interval)
    remaining = max(0, timeout) if timeout else sys.maxsize
    while remaining > 0:
        if not self.ready():
            # Still pending, log and continue
            if verbose and session._logger:
                progress = ('waiting forever'
                            if timeout is False
                            else '%.1f/%.1f seconds remaining' % (remaining, float(timeout or 0)))
                session._logger.info('Waiting for asynchronous call %s (%s)'
                                     % (self.request_cls.__name__, progress))
            time.sleep(poll_interval)
            remaining -= poll_interval
            continue
        # We've got something (good or bad, we don't know), create a call result and return
        return self.result()
    # Timeout expired, return the asynchronous call's result (we've got nothing better to report)
    raise TimeoutExpiredError(self._format_msg('Timeout expired'), call_id=self.meta.id)