Add CRUD operations for Identity Providers.
Add relevant methods for adding, updating, listing, getting, and deleting Identity Provider objects. Change-Id: Ib77781b507d2c06c368a1877eb716ec7fe2d88e4 Implements: blueprint federation-crud-operations
This commit is contained in:
		
							
								
								
									
										86
									
								
								keystoneclient/tests/v3/test_federation.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								keystoneclient/tests/v3/test_federation.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,86 @@ | ||||
| # Licensed under the Apache License, Version 2.0 (the "License"); you may | ||||
| # not use this file except in compliance with the License. You may obtain | ||||
| # a copy of the License at | ||||
| # | ||||
| #      http://www.apache.org/licenses/LICENSE-2.0 | ||||
| # | ||||
| # Unless required by applicable law or agreed to in writing, software | ||||
| # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | ||||
| # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | ||||
| # License for the specific language governing permissions and limitations | ||||
| # under the License. | ||||
|  | ||||
| import uuid | ||||
|  | ||||
| import httpretty | ||||
|  | ||||
| from keystoneclient.tests.v3 import utils | ||||
| from keystoneclient.v3.contrib.federation import identity_providers | ||||
|  | ||||
|  | ||||
| class IdentityProviderTests(utils.TestCase, utils.CrudTests): | ||||
|     def setUp(self): | ||||
|         super(IdentityProviderTests, self).setUp() | ||||
|         self.key = 'identity_provider' | ||||
|         self.collection_key = 'identity_providers' | ||||
|         self.model = identity_providers.IdentityProvider | ||||
|         self.manager = self.client.federation.identity_providers | ||||
|         self.path_prefix = 'OS-FEDERATION' | ||||
|  | ||||
|     def new_ref(self, **kwargs): | ||||
|         kwargs.setdefault('id', uuid.uuid4().hex) | ||||
|         kwargs.setdefault('description', uuid.uuid4().hex) | ||||
|         kwargs.setdefault('enabled', True) | ||||
|         return kwargs | ||||
|  | ||||
|     def test_positional_parameters_expect_fail(self): | ||||
|         """Ensure CrudManager raises TypeError exceptions. | ||||
|  | ||||
|         After passing wrong number of positional arguments | ||||
|         an exception should be raised. | ||||
|  | ||||
|         Operations to be tested: | ||||
|             * create() | ||||
|             * get() | ||||
|             * list() | ||||
|             * delete() | ||||
|             * update() | ||||
|  | ||||
|         """ | ||||
|         POS_PARAM_1 = uuid.uuid4().hex | ||||
|         POS_PARAM_2 = uuid.uuid4().hex | ||||
|         POS_PARAM_3 = uuid.uuid4().hex | ||||
|  | ||||
|         PARAMETERS = { | ||||
|             'create': (POS_PARAM_1, POS_PARAM_2), | ||||
|             'get': (POS_PARAM_1, POS_PARAM_2), | ||||
|             'list': (POS_PARAM_1, POS_PARAM_2), | ||||
|             'update': (POS_PARAM_1, POS_PARAM_2, POS_PARAM_3), | ||||
|             'delete': (POS_PARAM_1, POS_PARAM_2) | ||||
|         } | ||||
|  | ||||
|         for f_name, args in PARAMETERS.items(): | ||||
|             self.assertRaises(TypeError, getattr(self.manager, f_name), | ||||
|                               *args) | ||||
|  | ||||
|     @httpretty.activate | ||||
|     def test_create(self, ref=None, req_ref=None): | ||||
|         ref = ref or self.new_ref() | ||||
|  | ||||
|         # req_ref argument allows you to specify a different | ||||
|         # signature for the request when the manager does some | ||||
|         # conversion before doing the request (e.g converting | ||||
|         # from datetime object to timestamp string) | ||||
|         req_ref = (req_ref or ref).copy() | ||||
|         req_ref.pop('id') | ||||
|  | ||||
|         self.stub_entity(httpretty.PUT, entity=ref, id=ref['id'], status=201) | ||||
|  | ||||
|         returned = self.manager.create(**ref) | ||||
|         self.assertIsInstance(returned, self.model) | ||||
|         for attr in req_ref: | ||||
|             self.assertEqual( | ||||
|                 getattr(returned, attr), | ||||
|                 req_ref[attr], | ||||
|                 'Expected different %s' % attr) | ||||
|         self.assertEntityRequestBodyIs(req_ref) | ||||
| @@ -19,6 +19,7 @@ from keystoneclient.auth.identity import v3 as v3_auth | ||||
| from keystoneclient import exceptions | ||||
| from keystoneclient import httpclient | ||||
| from keystoneclient.openstack.common import jsonutils | ||||
| from keystoneclient.v3.contrib import federation | ||||
| from keystoneclient.v3.contrib import trusts | ||||
| from keystoneclient.v3 import credentials | ||||
| from keystoneclient.v3 import domains | ||||
| @@ -95,6 +96,7 @@ class Client(httpclient.HTTPClient): | ||||
|         self.credentials = credentials.CredentialManager(self) | ||||
|         self.endpoints = endpoints.EndpointManager(self) | ||||
|         self.domains = domains.DomainManager(self) | ||||
|         self.federation = federation.FederationManager(self) | ||||
|         self.groups = groups.GroupManager(self) | ||||
|         self.policies = policies.PolicyManager(self) | ||||
|         self.projects = projects.ProjectManager(self) | ||||
|   | ||||
							
								
								
									
										13
									
								
								keystoneclient/v3/contrib/federation/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								keystoneclient/v3/contrib/federation/__init__.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| #    Licensed under the Apache License, Version 2.0 (the "License"); you may | ||||
| #    not use this file except in compliance with the License. You may obtain | ||||
| #    a copy of the License at | ||||
| # | ||||
| #         http://www.apache.org/licenses/LICENSE-2.0 | ||||
| # | ||||
| #    Unless required by applicable law or agreed to in writing, software | ||||
| #    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | ||||
| #    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | ||||
| #    License for the specific language governing permissions and limitations | ||||
| #    under the License. | ||||
|  | ||||
| from keystoneclient.v3.contrib.federation.core import *  # flake8: noqa | ||||
							
								
								
									
										19
									
								
								keystoneclient/v3/contrib/federation/core.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								keystoneclient/v3/contrib/federation/core.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| #    Licensed under the Apache License, Version 2.0 (the "License"); you may | ||||
| #    not use this file except in compliance with the License. You may obtain | ||||
| #    a copy of the License at | ||||
| # | ||||
| #         http://www.apache.org/licenses/LICENSE-2.0 | ||||
| # | ||||
| #    Unless required by applicable law or agreed to in writing, software | ||||
| #    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | ||||
| #    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | ||||
| #    License for the specific language governing permissions and limitations | ||||
| #    under the License. | ||||
|  | ||||
| from keystoneclient.v3.contrib.federation import identity_providers | ||||
|  | ||||
|  | ||||
| class FederationManager(object): | ||||
|     def __init__(self, api): | ||||
|         self.identity_providers = identity_providers.IdentityProviderManager( | ||||
|             api) | ||||
							
								
								
									
										100
									
								
								keystoneclient/v3/contrib/federation/identity_providers.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								keystoneclient/v3/contrib/federation/identity_providers.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,100 @@ | ||||
| #    Licensed under the Apache License, Version 2.0 (the "License"); you may | ||||
| #    not use this file except in compliance with the License. You may obtain | ||||
| #    a copy of the License at | ||||
| # | ||||
| #         http://www.apache.org/licenses/LICENSE-2.0 | ||||
| # | ||||
| #    Unless required by applicable law or agreed to in writing, software | ||||
| #    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | ||||
| #    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | ||||
| #    License for the specific language governing permissions and limitations | ||||
| #    under the License. | ||||
|  | ||||
| from keystoneclient import base | ||||
| from keystoneclient import utils | ||||
|  | ||||
|  | ||||
| class IdentityProvider(base.Resource): | ||||
|     """Object representing Identity Provider container | ||||
|  | ||||
|     Attributes: | ||||
|         * id: user-defined unique string identifying Identity Provider. | ||||
|  | ||||
|     """ | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class IdentityProviderManager(base.CrudManager): | ||||
|     """Manager class for manipulating Identity Providers.""" | ||||
|  | ||||
|     resource_class = IdentityProvider | ||||
|     collection_key = 'identity_providers' | ||||
|     key = 'identity_provider' | ||||
|     base_url = 'OS-FEDERATION' | ||||
|  | ||||
|     def _build_url_and_put(self, **kwargs): | ||||
|         url = self.build_url(dict_args_in_out=kwargs) | ||||
|         body = {self.key: kwargs} | ||||
|         return self._update(url, body=body, response_key=self.key, | ||||
|                             method='PUT') | ||||
|  | ||||
|     @utils.positional.method(0) | ||||
|     def create(self, id, **kwargs): | ||||
|         """Create Identity Provider object. | ||||
|  | ||||
|         Utilize Keystone URI: | ||||
|         PUT /OS-FEDERATION/identity_providers/$identity_provider | ||||
|  | ||||
|         :param id: unique id of the identity provider. | ||||
|  | ||||
|         """ | ||||
|         return self._build_url_and_put(identity_provider_id=id, | ||||
|                                        **kwargs) | ||||
|  | ||||
|     def get(self, identity_provider): | ||||
|         """Fetch Identity Provider object | ||||
|  | ||||
|         Utilize Keystone URI: | ||||
|         GET /OS-FEDERATION/identity_providers/$identity_provider | ||||
|  | ||||
|         :param identity_provider: an object with identity_provider_id | ||||
|                                   stored inside. | ||||
|  | ||||
|         """ | ||||
|         return super(IdentityProviderManager, self).get( | ||||
|             identity_provider_id=base.getid(identity_provider)) | ||||
|  | ||||
|     def list(self, **kwargs): | ||||
|         """List all Identity Providers. | ||||
|  | ||||
|         Utilize Keystone URI: | ||||
|         GET /OS-FEDERATION/identity_providers | ||||
|  | ||||
|         """ | ||||
|         return super(IdentityProviderManager, self).list(**kwargs) | ||||
|  | ||||
|     def update(self, identity_provider, **kwargs): | ||||
|         """Update Identity Provider object. | ||||
|  | ||||
|         Utilize Keystone URI: | ||||
|         PATCH /OS-FEDERATION/identity_providers/$identity_provider | ||||
|  | ||||
|         :param identity_provider: an object with identity_provider_id | ||||
|                                   stored inside. | ||||
|  | ||||
|         """ | ||||
|         return super(IdentityProviderManager, self).update( | ||||
|             identity_provider_id=base.getid(identity_provider), **kwargs) | ||||
|  | ||||
|     def delete(self, identity_provider): | ||||
|         """Delete Identity Provider object. | ||||
|  | ||||
|         Utilize Keystone URI: | ||||
|         DELETE /OS-FEDERATION/identity_providers/$identity_provider | ||||
|  | ||||
|         :param identity_provider: an object with identity_provider_id | ||||
|                                   stored inside. | ||||
|  | ||||
|         """ | ||||
|         return super(IdentityProviderManager, self).delete( | ||||
|             identity_provider_id=base.getid(identity_provider)) | ||||
		Reference in New Issue
	
	Block a user
	 Marek Denis
					Marek Denis