Consistently support kwargs across all v3 CRUD Manager ops
Co-Authored-By: Saju Madhavan <sajuptpm@gmail.com> Closes-Bug: 1047867 Implements: blueprint extensible-crud-manager-operations Change-Id: I64e11bcf3797eb84e4695605daea9749259d78ec
This commit is contained in:

committed by
Saju Madhavan

parent
19d0396224
commit
6cb1cd8c5a
@@ -19,6 +19,7 @@ import httpretty
|
||||
import mock
|
||||
from mox3 import mox
|
||||
import requests
|
||||
import six
|
||||
from six.moves.urllib import parse as urlparse
|
||||
import testtools
|
||||
|
||||
@@ -78,6 +79,13 @@ class TestCase(testtools.TestCase):
|
||||
expected = urlparse.parse_qs(qs)
|
||||
self.assertEqual(expected, httpretty.last_request().querystring)
|
||||
|
||||
def assertQueryStringContains(self, **kwargs):
|
||||
qs = httpretty.last_request().querystring
|
||||
|
||||
for k, v in six.iteritems(kwargs):
|
||||
self.assertIn(k, qs)
|
||||
self.assertIn(v, qs[k])
|
||||
|
||||
def assertRequestHeaderEqual(self, name, val):
|
||||
"""Verify that the last request made contains a header and its value
|
||||
|
||||
|
@@ -154,6 +154,7 @@ class CrudTests(object):
|
||||
|
||||
def new_ref(self, **kwargs):
|
||||
kwargs.setdefault('id', uuid.uuid4().hex)
|
||||
kwargs.setdefault(uuid.uuid4().hex, uuid.uuid4().hex)
|
||||
return kwargs
|
||||
|
||||
def encode(self, entity):
|
||||
@@ -223,10 +224,7 @@ class CrudTests(object):
|
||||
ref[attr],
|
||||
'Expected different %s' % attr)
|
||||
|
||||
@httpretty.activate
|
||||
def test_list(self, ref_list=None, expected_path=None, **filter_kwargs):
|
||||
ref_list = ref_list or [self.new_ref(), self.new_ref()]
|
||||
|
||||
def _get_expected_path(self, expected_path=None):
|
||||
if not expected_path:
|
||||
if self.path_prefix:
|
||||
expected_path = 'v3/%s/%s' % (self.path_prefix,
|
||||
@@ -234,6 +232,13 @@ class CrudTests(object):
|
||||
else:
|
||||
expected_path = 'v3/%s' % self.collection_key
|
||||
|
||||
return expected_path
|
||||
|
||||
@httpretty.activate
|
||||
def test_list(self, ref_list=None, expected_path=None, **filter_kwargs):
|
||||
ref_list = ref_list or [self.new_ref(), self.new_ref()]
|
||||
expected_path = self._get_expected_path(expected_path)
|
||||
|
||||
httpretty.register_uri(httpretty.GET,
|
||||
urlparse.urljoin(self.TEST_URL, expected_path),
|
||||
body=jsonutils.dumps(self.encode(ref_list)))
|
||||
@@ -242,6 +247,19 @@ class CrudTests(object):
|
||||
self.assertEqual(len(ref_list), len(returned_list))
|
||||
[self.assertTrue(isinstance(r, self.model)) for r in returned_list]
|
||||
|
||||
@httpretty.activate
|
||||
def test_list_params(self):
|
||||
ref_list = [self.new_ref()]
|
||||
filter_kwargs = {uuid.uuid4().hex: uuid.uuid4().hex}
|
||||
expected_path = self._get_expected_path()
|
||||
|
||||
httpretty.register_uri(httpretty.GET,
|
||||
urlparse.urljoin(self.TEST_URL, expected_path),
|
||||
body=jsonutils.dumps(self.encode(ref_list)))
|
||||
|
||||
self.manager.list(**filter_kwargs)
|
||||
self.assertQueryStringContains(**filter_kwargs)
|
||||
|
||||
@httpretty.activate
|
||||
def test_find(self, ref=None):
|
||||
ref = ref or self.new_ref()
|
||||
|
@@ -38,7 +38,8 @@ class TrustManager(base.CrudManager):
|
||||
base_url = '/OS-TRUST'
|
||||
|
||||
def create(self, trustee_user, trustor_user, role_names=None,
|
||||
project=None, impersonation=False, expires_at=None):
|
||||
project=None, impersonation=False, expires_at=None,
|
||||
**kwargs):
|
||||
"""Create a Trust.
|
||||
:param string trustee_user: user who is capable of consuming the trust
|
||||
:param string trustor_user: user who's authorization is being delegated
|
||||
@@ -65,17 +66,19 @@ class TrustManager(base.CrudManager):
|
||||
project_id=base.getid(project),
|
||||
roles=roles,
|
||||
trustee_user_id=base.getid(trustee_user),
|
||||
trustor_user_id=base.getid(trustor_user))
|
||||
trustor_user_id=base.getid(trustor_user),
|
||||
**kwargs)
|
||||
|
||||
def update(self):
|
||||
raise exceptions.HTTPNotImplemented("Update not supported for trusts")
|
||||
|
||||
def list(self, trustee_user=None, trustor_user=None):
|
||||
def list(self, trustee_user=None, trustor_user=None, **kwargs):
|
||||
"""List Trusts."""
|
||||
trustee_user_id = base.getid(trustee_user)
|
||||
trustor_user_id = base.getid(trustor_user)
|
||||
return super(TrustManager, self).list(trustee_user_id=trustee_user_id,
|
||||
trustor_user_id=trustor_user_id)
|
||||
trustor_user_id=trustor_user_id,
|
||||
**kwargs)
|
||||
|
||||
def get(self, trust):
|
||||
"""Get a specific trust."""
|
||||
|
@@ -47,28 +47,35 @@ class CredentialManager(base.CrudManager):
|
||||
raise ValueError(
|
||||
"Credential requires blob to be specified")
|
||||
|
||||
def create(self, user, type, blob=None, data=None, project=None):
|
||||
def create(self, user, type, blob=None, data=None, project=None, **kwargs):
|
||||
return super(CredentialManager, self).create(
|
||||
user_id=base.getid(user),
|
||||
type=type,
|
||||
blob=self._get_data_blob(blob, data),
|
||||
project_id=base.getid(project))
|
||||
project_id=base.getid(project),
|
||||
**kwargs)
|
||||
|
||||
def get(self, credential):
|
||||
return super(CredentialManager, self).get(
|
||||
credential_id=base.getid(credential))
|
||||
|
||||
def list(self):
|
||||
return super(CredentialManager, self).list()
|
||||
def list(self, **kwargs):
|
||||
"""List credentials.
|
||||
|
||||
If ``**kwargs`` are provided, then filter credentials with
|
||||
attributes matching ``**kwargs``.
|
||||
"""
|
||||
return super(CredentialManager, self).list(**kwargs)
|
||||
|
||||
def update(self, credential, user, type=None, blob=None, data=None,
|
||||
project=None):
|
||||
project=None, **kwargs):
|
||||
return super(CredentialManager, self).update(
|
||||
credential_id=base.getid(credential),
|
||||
user_id=base.getid(user),
|
||||
type=type,
|
||||
blob=self._get_data_blob(blob, data),
|
||||
project_id=base.getid(project))
|
||||
project_id=base.getid(project),
|
||||
**kwargs)
|
||||
|
||||
def delete(self, credential):
|
||||
return super(CredentialManager, self).delete(
|
||||
|
@@ -33,25 +33,33 @@ class DomainManager(base.CrudManager):
|
||||
collection_key = 'domains'
|
||||
key = 'domain'
|
||||
|
||||
def create(self, name, description=None, enabled=True):
|
||||
def create(self, name, description=None, enabled=True, **kwargs):
|
||||
return super(DomainManager, self).create(
|
||||
name=name,
|
||||
description=description,
|
||||
enabled=enabled)
|
||||
enabled=enabled,
|
||||
**kwargs)
|
||||
|
||||
def get(self, domain):
|
||||
return super(DomainManager, self).get(
|
||||
domain_id=base.getid(domain))
|
||||
|
||||
def list(self):
|
||||
return super(DomainManager, self).list()
|
||||
def list(self, **kwargs):
|
||||
"""List domains.
|
||||
|
||||
def update(self, domain, name=None, description=None, enabled=True):
|
||||
``**kwargs`` allows filter criteria to be passed where
|
||||
supported by the server.
|
||||
"""
|
||||
return super(DomainManager, self).list(**kwargs)
|
||||
|
||||
def update(self, domain, name=None,
|
||||
description=None, enabled=True, **kwargs):
|
||||
return super(DomainManager, self).update(
|
||||
domain_id=base.getid(domain),
|
||||
name=name,
|
||||
description=description,
|
||||
enabled=enabled)
|
||||
enabled=enabled,
|
||||
**kwargs)
|
||||
|
||||
def delete(self, domain):
|
||||
return super(DomainManager, self).delete(
|
||||
|
@@ -49,11 +49,12 @@ class GroupManager(base.CrudManager):
|
||||
collection_key = 'groups'
|
||||
key = 'group'
|
||||
|
||||
def create(self, name, domain=None, description=None):
|
||||
def create(self, name, domain=None, description=None, **kwargs):
|
||||
return super(GroupManager, self).create(
|
||||
name=name,
|
||||
domain_id=base.getid(domain),
|
||||
description=description)
|
||||
description=description,
|
||||
**kwargs)
|
||||
|
||||
def list(self, user=None, domain=None, **kwargs):
|
||||
"""List groups.
|
||||
@@ -77,11 +78,12 @@ class GroupManager(base.CrudManager):
|
||||
return super(GroupManager, self).get(
|
||||
group_id=base.getid(group))
|
||||
|
||||
def update(self, group, name=None, description=None):
|
||||
def update(self, group, name=None, description=None, **kwargs):
|
||||
return super(GroupManager, self).update(
|
||||
group_id=base.getid(group),
|
||||
name=name,
|
||||
description=description)
|
||||
description=description,
|
||||
**kwargs)
|
||||
|
||||
def delete(self, group):
|
||||
return super(GroupManager, self).delete(
|
||||
|
@@ -47,23 +47,30 @@ class PolicyManager(base.CrudManager):
|
||||
collection_key = 'policies'
|
||||
key = 'policy'
|
||||
|
||||
def create(self, blob, type='application/json'):
|
||||
def create(self, blob, type='application/json', **kwargs):
|
||||
return super(PolicyManager, self).create(
|
||||
blob=blob,
|
||||
type=type)
|
||||
type=type,
|
||||
**kwargs)
|
||||
|
||||
def get(self, policy):
|
||||
return super(PolicyManager, self).get(
|
||||
policy_id=base.getid(policy))
|
||||
|
||||
def list(self):
|
||||
return super(PolicyManager, self).list()
|
||||
def list(self, **kwargs):
|
||||
"""List policies.
|
||||
|
||||
def update(self, entity, blob=None, type=None):
|
||||
``**kwargs`` allows filter criteria to be passed where
|
||||
supported by the server.
|
||||
"""
|
||||
return super(PolicyManager, self).list(**kwargs)
|
||||
|
||||
def update(self, entity, blob=None, type=None, **kwargs):
|
||||
return super(PolicyManager, self).update(
|
||||
policy_id=base.getid(entity),
|
||||
blob=blob,
|
||||
type=type)
|
||||
type=type,
|
||||
**kwargs)
|
||||
|
||||
def delete(self, policy):
|
||||
return super(PolicyManager, self).delete(
|
||||
|
@@ -72,9 +72,10 @@ class RoleManager(base.CrudManager):
|
||||
msg = 'Must specify either a user or group'
|
||||
raise exceptions.ValidationError(msg)
|
||||
|
||||
def create(self, name):
|
||||
def create(self, name, **kwargs):
|
||||
return super(RoleManager, self).create(
|
||||
name=name)
|
||||
name=name,
|
||||
**kwargs)
|
||||
|
||||
def get(self, role):
|
||||
return super(RoleManager, self).get(
|
||||
@@ -101,12 +102,13 @@ class RoleManager(base.CrudManager):
|
||||
domain, project),
|
||||
**kwargs)
|
||||
|
||||
return super(RoleManager, self).list()
|
||||
return super(RoleManager, self).list(**kwargs)
|
||||
|
||||
def update(self, role, name=None):
|
||||
def update(self, role, name=None, **kwargs):
|
||||
return super(RoleManager, self).update(
|
||||
role_id=base.getid(role),
|
||||
name=name)
|
||||
name=name,
|
||||
**kwargs)
|
||||
|
||||
def delete(self, role):
|
||||
return super(RoleManager, self).delete(
|
||||
|
@@ -46,7 +46,7 @@ class UserManager(base.CrudManager):
|
||||
|
||||
def create(self, name, domain=None, project=None, password=None,
|
||||
email=None, description=None, enabled=True,
|
||||
default_project=None):
|
||||
default_project=None, **kwargs):
|
||||
"""Create a user.
|
||||
|
||||
.. warning::
|
||||
@@ -67,7 +67,8 @@ class UserManager(base.CrudManager):
|
||||
password=password,
|
||||
email=email,
|
||||
description=description,
|
||||
enabled=enabled)
|
||||
enabled=enabled,
|
||||
**kwargs)
|
||||
|
||||
def list(self, project=None, domain=None, group=None, default_project=None,
|
||||
**kwargs):
|
||||
@@ -107,7 +108,7 @@ class UserManager(base.CrudManager):
|
||||
|
||||
def update(self, user, name=None, domain=None, project=None, password=None,
|
||||
email=None, description=None, enabled=None,
|
||||
default_project=None):
|
||||
default_project=None, **kwargs):
|
||||
"""Update a user.
|
||||
|
||||
.. warning::
|
||||
@@ -129,7 +130,8 @@ class UserManager(base.CrudManager):
|
||||
password=password,
|
||||
email=email,
|
||||
description=description,
|
||||
enabled=enabled)
|
||||
enabled=enabled,
|
||||
**kwargs)
|
||||
|
||||
def add_to_group(self, user, group):
|
||||
self._require_user_and_group(user, group)
|
||||
|
Reference in New Issue
Block a user