Allow Multiple Filters of the Same Key
Before, the way filters were passed in would not allow filtering on the same key. For example: keystone.users.list(name__contains='test', name__contains='user') This fails because of how kwargs handles key/value pairs. This patch allows using multiple values for the same filter. Example: keystone.users.list(name__contains=['test', 'user']) Specifying the only one filter value is still functional as expected. Co-Authored-By: Jeffrey Augustine <ja224e@att.com> Partially-Implements: bp pci-dss-query-password-expired-users Change-Id: I89cecf7e18974e7860ba0925840d6264168eabcb
This commit is contained in:
parent
dcb719d0e5
commit
ef6ffa6516
|
@ -353,7 +353,10 @@ class CrudManager(Manager):
|
|||
return self._head(self.build_url(dict_args_in_out=kwargs))
|
||||
|
||||
def _build_query(self, params):
|
||||
return '?%s' % urllib.parse.urlencode(params) if params else ''
|
||||
if params is None:
|
||||
return ''
|
||||
else:
|
||||
return '?%s' % urllib.parse.urlencode(params, doseq=True)
|
||||
|
||||
def build_key_only_query(self, params_list):
|
||||
"""Build a query that does not include values, just keys.
|
||||
|
|
|
@ -76,6 +76,29 @@ class UsersTestCase(base.V3ClientTestCase):
|
|||
self.assertIn(user_one.entity, users)
|
||||
self.assertIn(user_two.entity, users)
|
||||
|
||||
def test_list_users_with_filters(self):
|
||||
suffix = uuid.uuid4().hex
|
||||
user1_ref = {
|
||||
'name': 'test_user' + suffix,
|
||||
'domain': self.project_domain_id,
|
||||
'default_project': self.project_id,
|
||||
'password': uuid.uuid4().hex,
|
||||
'description': uuid.uuid4().hex}
|
||||
|
||||
user2_ref = {
|
||||
'name': fixtures.RESOURCE_NAME_PREFIX + uuid.uuid4().hex,
|
||||
'domain': self.project_domain_id,
|
||||
'default_project': self.project_id,
|
||||
'password': uuid.uuid4().hex,
|
||||
'description': uuid.uuid4().hex}
|
||||
|
||||
user1 = self.client.users.create(**user1_ref)
|
||||
self.client.users.create(**user2_ref)
|
||||
|
||||
users = self.client.users.list(name__contains=['test_user', suffix])
|
||||
self.assertEqual(1, len(users))
|
||||
self.assertIn(user1, users)
|
||||
|
||||
def test_update_user(self):
|
||||
user = fixtures.User(self.client, self.project_domain_id)
|
||||
self.useFixture(user)
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
features:
|
||||
- |
|
||||
Added ability to filter on multiple values with the same parameter key.
|
||||
For example, we can now filter on user names that contain both ``test`` and
|
||||
``user`` using ``keystone.users.list(name__contains=['test', 'user'])``.
|
Loading…
Reference in New Issue