diff --git a/keystoneclient/tests/v3/test_regions.py b/keystoneclient/tests/v3/test_regions.py new file mode 100644 index 000000000..c539aa75c --- /dev/null +++ b/keystoneclient/tests/v3/test_regions.py @@ -0,0 +1,33 @@ +# 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 + + +from keystoneclient.tests.v3 import utils +from keystoneclient.v3 import regions + + +class RegionTests(utils.TestCase, utils.CrudTests): + def setUp(self): + super(RegionTests, self).setUp() + self.key = 'region' + self.collection_key = 'regions' + self.model = regions.Region + self.manager = self.client.regions + + def new_ref(self, **kwargs): + kwargs = super(RegionTests, self).new_ref(**kwargs) + kwargs.setdefault('enabled', True) + kwargs.setdefault('id', uuid.uuid4().hex) + return kwargs diff --git a/keystoneclient/v3/client.py b/keystoneclient/v3/client.py index 32ec90c72..a9053ba2c 100644 --- a/keystoneclient/v3/client.py +++ b/keystoneclient/v3/client.py @@ -29,6 +29,7 @@ from keystoneclient.v3 import endpoints from keystoneclient.v3 import groups from keystoneclient.v3 import policies from keystoneclient.v3 import projects +from keystoneclient.v3 import regions from keystoneclient.v3 import roles from keystoneclient.v3 import services from keystoneclient.v3 import users @@ -103,6 +104,7 @@ class Client(httpclient.HTTPClient): self.oauth1 = oauth1.create_oauth_manager(self) self.policies = policies.PolicyManager(self) self.projects = projects.ProjectManager(self) + self.regions = regions.RegionManager(self) self.roles = roles.RoleManager(self) self.services = services.ServiceManager(self) self.users = users.UserManager(self) diff --git a/keystoneclient/v3/regions.py b/keystoneclient/v3/regions.py new file mode 100644 index 000000000..de925e34d --- /dev/null +++ b/keystoneclient/v3/regions.py @@ -0,0 +1,90 @@ +# 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 + + +class Region(base.Resource): + """Represents a Catalog region. + + Attributes: + * id: a string that identifies the region. + * description: a string that describes the region. Optional. + * parent_region_id: string that is the id field for an pre-existing + region in the backend. Allows for hierarchical region + organization + * enabled: determines whether the endpoint appears in the catalog. + Defaults to True + """ + pass + + +class RegionManager(base.CrudManager): + """Manager class for manipulating Identity endpoints.""" + resource_class = Region + collection_key = 'regions' + key = 'region' + + def create(self, id=None, description=None, enabled=True, + parent_region=None, **kwargs): + """Create a Catalog region. + + :param id: a string that identifies the region. If not specified + a unique identifier will be assigned to the region. + :param description: a string that describes the region. + :param parent_region: string that is the id field for a + pre-existing region in the backend. Allows for hierarchical + region organization. + :param enabled: determines whether the endpoint appears in the + catalog. + + """ + return super(RegionManager, self).create( + id=id, description=description, enabled=enabled, + parent_region_id=base.getid(parent_region), **kwargs) + + def get(self, region): + return super(RegionManager, self).get( + region_id=base.getid(region)) + + def list(self, **kwargs): + """List regions. + + If ``**kwargs`` are provided, then filter regions with + attributes matching ``**kwargs``. + """ + return super(RegionManager, self).list( + **kwargs) + + def update(self, region, description=None, enabled=True, + parent_region=None, **kwargs): + """Update a Catalog region. + + :param region: a string that identifies the region. + :param description: a string that describes the region. + :param parent_region: string that is the id field for a + pre-existing region in the backend. Allows for hierarchical + region organization. + :param enabled: determines whether the endpoint appears in the + catalog. Defaults to True + + """ + return super(RegionManager, self).update( + region_id=base.getid(region), + description=description, + enabled=enabled, + parent_region_id=base.getid(parent_region), + **kwargs) + + def delete(self, region): + return super(RegionManager, self).delete( + region_id=base.getid(region))