'Returns an iterator of items from a json listing.  Assumes listing has
\'name\' key defined and uses markers.
:param path: Path to do GET on.
:param marker: Prefix of first desired item, defaults to \'\'.
:param end_marker: Last item returned will be \'less\' than this,
defaults to \'\'.
:param acceptable_statuses: List of status for valid responses,
defaults to (2, HTTP_NOT_FOUND).
:raises UnexpectedResponse: Exception raised when requests fail
to get a response with an acceptable status
:raises Exception: Exception is raised when code fails in an
unexpected way.'

def _iter_items(self, path, marker='', end_marker='', acceptable_statuses=(2, HTTP_NOT_FOUND)):

    while True:
        resp = self.make_request('GET', ('%s?format=json&marker=%s&end_marker=%s' % (path, quote(marker), quote(end_marker))), {}, acceptable_statuses)
        if (not (resp.status_int == 200)):
            if (resp.status_int >= HTTP_MULTIPLE_CHOICES):
                ''.join(resp.app_iter)
            break
        data = json.loads(resp.body)
        if (not data):
            break
        for item in data:
            (yield item)
        marker = data[(-1)]['name'].encode('utf8')
