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