def _data_from_response(self, resp_body, key=None):
        """
        This works for most API responses, but some don't structure their
        listing responses the same way, so overriding this method allows
        subclasses to handle extraction for those outliers.
        """
        if key:
            data = resp_body.get(key)
        else:
            data = resp_body.get(self.plural_response_key, resp_body)
        # NOTE(ja): some services, such as keystone returns values as list as
        # {"values": [ ... ]} unlike other services which just return the
        # list.
        if isinstance(data, dict):
            try:
                data = data["values"]
            except KeyError:
                pass
        return data
This works for most API responses, but some don't structure their
        listing responses the same way, so overriding this method allows
        subclasses to handle extraction for those outliers.