Returns an iterator over the bases from the server in the form
        of consecutive strings. This command does not conform to the
        patterns of the other search and get requests, and is implemented
        differently.

def list_reference_bases(self, id_, start=0, end=None):
        """
        Returns an iterator over the bases from the server in the form
        of consecutive strings. This command does not conform to the
        patterns of the other search and get requests, and is implemented
        differently.
        """
        request = protocol.ListReferenceBasesRequest()
        request.start = pb.int(start)
        request.end = pb.int(end)
        request.reference_id = id_
        not_done = True
        # TODO We should probably use a StringIO here to make string buffering
        # a bit more efficient.
        bases_list = []
        while not_done:
            response = self._run_list_reference_bases_page_request(request)
            bases_list.append(response.sequence)
            not_done = bool(response.next_page_token)
            request.page_token = response.next_page_token
        return "".join(bases_list)