From 577c78c9919478305154919e4011cc55469d7815 Mon Sep 17 00:00:00 2001 From: Dolph Mathews Date: Tue, 11 Sep 2012 15:38:22 -0500 Subject: [PATCH] v3 Project CRUD Change-Id: I027dbba3a0573fde590295be5b31e3701d8c01f5 --- keystoneclient/v3/client.py | 2 + keystoneclient/v3/projects.py | 80 +++++++++++++++++++++++++++++++++++ tests/v3/test_projects.py | 21 +++++++++ 3 files changed, 103 insertions(+) create mode 100644 keystoneclient/v3/projects.py create mode 100644 tests/v3/test_projects.py diff --git a/keystoneclient/v3/client.py b/keystoneclient/v3/client.py index f2ea9b59e..1aac8d4ce 100644 --- a/keystoneclient/v3/client.py +++ b/keystoneclient/v3/client.py @@ -19,6 +19,7 @@ from keystoneclient.v2_0 import client from keystoneclient.v3 import endpoints from keystoneclient.v3 import domains from keystoneclient.v3 import policies +from keystoneclient.v3 import projects from keystoneclient.v3 import roles from keystoneclient.v3 import services @@ -65,6 +66,7 @@ class Client(client.Client): self.endpoints = endpoints.EndpointManager(self) self.domains = domains.DomainManager(self) self.policies = policies.PolicyManager(self) + self.projects = projects.ProjectManager(self) self.roles = roles.RoleManager(self) self.services = services.ServiceManager(self) diff --git a/keystoneclient/v3/projects.py b/keystoneclient/v3/projects.py new file mode 100644 index 000000000..a5ebac5ee --- /dev/null +++ b/keystoneclient/v3/projects.py @@ -0,0 +1,80 @@ +# Copyright 2011 OpenStack LLC. +# Copyright 2011 Nebula, Inc. +# All Rights Reserved. +# +# 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 Project(base.Resource): + """Represents an Identity project. + + Attributes: + * id: a uuid that identifies the project + * name: project name + * description: project description + * enabled: boolean to indicate if project is enabled + + """ + def update(self, name=None, description=None, enabled=None): + kwargs = { + 'name': name if name is not None else self.name, + 'description': (description + if description is not None + else self.description), + 'enabled': enabled if enabled is not None else self.enabled, + } + + try: + retval = self.manager.update(self.id, **kwargs) + self = retval + except Exception: + retval = None + + return retval + + +class ProjectManager(base.CrudManager): + """Manager class for manipulating Identity projects.""" + resource_class = Project + collection_key = 'projects' + key = 'project' + + def create(self, name, domain, description=None, enabled=True): + return super(ProjectManager, self).create( + domain_id=base.getid(domain), + name=name, + description=description, + enabled=enabled) + + def list(self, domain=None): + return super(ProjectManager, self).list( + domain_id=base.getid(domain)) + + def get(self, project): + return super(ProjectManager, self).get( + project_id=base.getid(project)) + + def update(self, project, name=None, domain=None, description=None, + enabled=None): + return super(ProjectManager, self).update( + project_id=base.getid(project), + domain_id=base.getid(domain), + name=name, + description=description, + enabled=enabled) + + def delete(self, project): + return super(ProjectManager, self).delete( + project_id=base.getid(project)) diff --git a/tests/v3/test_projects.py b/tests/v3/test_projects.py new file mode 100644 index 000000000..73ce207ef --- /dev/null +++ b/tests/v3/test_projects.py @@ -0,0 +1,21 @@ +import uuid + +from keystoneclient.v3 import projects +from tests.v3 import utils + + +class ProjectTests(utils.TestCase, utils.CrudTests): + def setUp(self): + super(ProjectTests, self).setUp() + self.additionalSetUp() + self.key = 'project' + self.collection_key = 'projects' + self.model = projects.Project + self.manager = self.client.projects + + def new_ref(self, **kwargs): + kwargs = super(ProjectTests, self).new_ref(**kwargs) + kwargs.setdefault('domain_id', uuid.uuid4().hex) + kwargs.setdefault('enabled', True) + kwargs.setdefault('name', uuid.uuid4().hex) + return kwargs