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:
		 Divyesh Khandeshi
					Divyesh Khandeshi
				
			
				
					committed by
					
						 Saju Madhavan
						Saju Madhavan
					
				
			
			
				
	
			
			
			 Saju Madhavan
						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