Revert "Support `truncated` flag returned by identity service"
This reverts commit 870be44c0e
.
This change breaks end users of the library. See:
http://logs.openstack.org/50/285450/1/check/gate-shade-dsvm-functional-keystone2/d1093b5/console.html#_2016-02-26_20_49_32_928
For an example of a consumer of the library being broken.
Change-Id: I1912003afb89579eb869767db7a411c451bc9806
This commit is contained in:
parent
870be44c0e
commit
b4b168bdbf
|
@ -76,36 +76,6 @@ def filter_kwargs(f):
|
|||
return func
|
||||
|
||||
|
||||
class TruncatedList(list):
|
||||
"""List with attribute `truncated`.
|
||||
|
||||
The main purpose of this class is to handle flag `truncated` returned
|
||||
by Identity Service. It subclasses standard Python list and overrides
|
||||
only equality operators.
|
||||
|
||||
:param bool truncated: whether the list is truncated or not.
|
||||
"""
|
||||
def __init__(self, collection, truncated=False):
|
||||
super(TruncatedList, self).__init__(collection)
|
||||
self.truncated = truncated
|
||||
|
||||
def __eq__(self, other):
|
||||
"""Compare this list with another one.
|
||||
|
||||
Two TruncatedLists are equal if the lists they carry are equal
|
||||
and their attributes `truncated` are equal.
|
||||
|
||||
If another value has not attribute `truncated`, it is assumed to
|
||||
be False.
|
||||
"""
|
||||
values_eq = super(TruncatedList, self).__eq__(other)
|
||||
truncated_eq = self.truncated == getattr(other, 'truncated', False)
|
||||
return values_eq and truncated_eq
|
||||
|
||||
def __ne__(self, other):
|
||||
return not self.__eq__(other)
|
||||
|
||||
|
||||
class Manager(object):
|
||||
"""Basic manager type providing common operations.
|
||||
|
||||
|
@ -147,8 +117,6 @@ class Manager(object):
|
|||
:param body: data that will be encoded as JSON and passed in POST
|
||||
request (GET will be sent by default)
|
||||
:param kwargs: Additional arguments will be passed to the request.
|
||||
:returns: list of objects with indication of truncation
|
||||
:rtype: :py:class:`keystoneclient.base.TruncatedList`
|
||||
"""
|
||||
if body:
|
||||
resp, body = self.client.post(url, body=body, **kwargs)
|
||||
|
@ -159,7 +127,6 @@ class Manager(object):
|
|||
obj_class = self.resource_class
|
||||
|
||||
data = body[response_key]
|
||||
truncated = body.get('truncated', False)
|
||||
# NOTE(ja): keystone returns values as list as {'values': [ ... ]}
|
||||
# unlike other services which just return the list...
|
||||
try:
|
||||
|
@ -167,8 +134,7 @@ class Manager(object):
|
|||
except (KeyError, TypeError):
|
||||
pass
|
||||
|
||||
objects = [obj_class(self, res, loaded=True) for res in data if res]
|
||||
return TruncatedList(objects, truncated=truncated)
|
||||
return [obj_class(self, res, loaded=True) for res in data if res]
|
||||
|
||||
def _get(self, url, response_key, **kwargs):
|
||||
"""Get an object from collection.
|
||||
|
|
|
@ -180,29 +180,3 @@ class ManagerTest(utils.TestCase):
|
|||
management=True)
|
||||
put_mock.assert_called_once_with(self.url, management=True, body=None)
|
||||
self.assertEqual(rsrc.hi, 1)
|
||||
|
||||
|
||||
class TruncatedListTest(utils.TestCase):
|
||||
"""Test that TruncatedList will not break existing checks
|
||||
|
||||
A lot of code assumes that the value returned from list() is a python
|
||||
list, not an iterable object. Because of that, they perform various
|
||||
list-specific checks. This code should not be broken.
|
||||
"""
|
||||
|
||||
def test_eq(self):
|
||||
# flag `truncated` doesn't affect the check if it's False
|
||||
self.assertEqual([], base.TruncatedList([], truncated=False))
|
||||
self.assertEqual([1, 2, 3], base.TruncatedList([1, 2, 3],
|
||||
truncated=False))
|
||||
|
||||
# flag `truncated` affects the check if it's True
|
||||
self.assertNotEqual([], base.TruncatedList([], truncated=True))
|
||||
self.assertNotEqual([1, 2, 3], base.TruncatedList([1, 2, 3],
|
||||
truncated=True))
|
||||
|
||||
# flag `truncated` affects the equality check
|
||||
self.assertNotEqual(base.TruncatedList([], truncated=True),
|
||||
base.TruncatedList([], truncated=False))
|
||||
self.assertNotEqual(base.TruncatedList([1, 2, 3], truncated=True),
|
||||
base.TruncatedList([1, 2, 3], truncated=False))
|
||||
|
|
|
@ -192,16 +192,11 @@ class CrudTests(object):
|
|||
kwargs.setdefault(uuid.uuid4().hex, uuid.uuid4().hex)
|
||||
return kwargs
|
||||
|
||||
def encode(self, entity, truncated=None):
|
||||
encoded = {}
|
||||
if truncated is not None:
|
||||
encoded['truncated'] = truncated
|
||||
def encode(self, entity):
|
||||
if isinstance(entity, dict):
|
||||
encoded[self.key] = entity
|
||||
return encoded
|
||||
return {self.key: entity}
|
||||
if isinstance(entity, list):
|
||||
encoded[self.collection_key] = entity
|
||||
return encoded
|
||||
return {self.collection_key: entity}
|
||||
raise NotImplementedError('Are you sure you want to encode that?')
|
||||
|
||||
def stub_entity(self, method, parts=None, entity=None, id=None, **kwargs):
|
||||
|
@ -292,22 +287,14 @@ class CrudTests(object):
|
|||
|
||||
self.assertRaises(TypeError, self.manager.list, **filter_kwargs)
|
||||
|
||||
def _test_list(self, ref_list=None, expected_path=None,
|
||||
expected_query=None, truncated=None, **filter_kwargs):
|
||||
def test_list(self, ref_list=None, expected_path=None,
|
||||
expected_query=None, **filter_kwargs):
|
||||
ref_list = ref_list or [self.new_ref(), self.new_ref()]
|
||||
expected_path = self._get_expected_path(expected_path)
|
||||
|
||||
# We want to catch all cases: when `truncated` is not returned by the
|
||||
# server, when it's False and when it's True.
|
||||
# Attribute `truncated` of the returned list-like object should exist
|
||||
# in all these cases. It should be False if the server returned a list
|
||||
# without the flag.
|
||||
expected_truncated = False
|
||||
if truncated:
|
||||
expected_truncated = truncated
|
||||
|
||||
self.requests_mock.get(urlparse.urljoin(self.TEST_URL, expected_path),
|
||||
json=self.encode(ref_list, truncated=truncated))
|
||||
json=self.encode(ref_list))
|
||||
|
||||
returned_list = self.manager.list(**filter_kwargs)
|
||||
self.assertEqual(len(ref_list), len(returned_list))
|
||||
[self.assertIsInstance(r, self.model) for r in returned_list]
|
||||
|
@ -326,20 +313,6 @@ class CrudTests(object):
|
|||
for key in qs_args:
|
||||
self.assertIn(key, qs_args_expected)
|
||||
|
||||
self.assertEqual(expected_truncated, returned_list.truncated)
|
||||
|
||||
def test_list(self, ref_list=None, expected_path=None,
|
||||
expected_query=None, **filter_kwargs):
|
||||
# test simple list, without any truncation
|
||||
self._test_list(ref_list, expected_path, expected_query,
|
||||
**filter_kwargs)
|
||||
# test when a server returned a list with truncated=False
|
||||
self._test_list(ref_list, expected_path, expected_query,
|
||||
truncated=False, **filter_kwargs)
|
||||
# test when a server returned a list with truncated=True
|
||||
self._test_list(ref_list, expected_path, expected_query,
|
||||
truncated=True, **filter_kwargs)
|
||||
|
||||
def test_list_params(self):
|
||||
ref_list = [self.new_ref()]
|
||||
filter_kwargs = {uuid.uuid4().hex: uuid.uuid4().hex}
|
||||
|
|
Loading…
Reference in New Issue