diff --git a/keystoneclient/v3/client.py b/keystoneclient/v3/client.py index 1aac8d4ce..75b32630a 100644 --- a/keystoneclient/v3/client.py +++ b/keystoneclient/v3/client.py @@ -22,6 +22,7 @@ from keystoneclient.v3 import policies from keystoneclient.v3 import projects from keystoneclient.v3 import roles from keystoneclient.v3 import services +from keystoneclient.v3 import users _logger = logging.getLogger(__name__) @@ -69,6 +70,7 @@ class Client(client.Client): self.projects = projects.ProjectManager(self) self.roles = roles.RoleManager(self) self.services = services.ServiceManager(self) + self.users = users.UserManager(self) # NOTE(gabriel): If we have a pre-defined endpoint then we can # get away with lazy auth. Otherwise auth immediately. diff --git a/keystoneclient/v3/users.py b/keystoneclient/v3/users.py new file mode 100644 index 000000000..a8c1c4b38 --- /dev/null +++ b/keystoneclient/v3/users.py @@ -0,0 +1,70 @@ +# 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 User(base.Resource): + """Represents an Identity user. + + Attributes: + * id: a uuid that identifies the user + + """ + pass + + +class UserManager(base.CrudManager): + """Manager class for manipulating Identity users.""" + resource_class = User + collection_key = 'users' + key = 'user' + + def create(self, name, domain=None, project=None, password=None, + email=None, description=None, enabled=True): + return super(UserManager, self).create( + name=name, + domain_id=base.getid(domain), + project_id=base.getid(project), + password=password, + email=email, + description=description, + enabled=enabled) + + def list(self, project=None, domain=None): + return super(UserManager, self).list( + domain_id=base.getid(domain), + project_id=base.getid(project)) + + def get(self, user): + return super(UserManager, self).get( + user_id=base.getid(user)) + + def update(self, user, name=None, domain=None, project=None, password=None, + email=None, description=None, enabled=None): + return super(UserManager, self).update( + user_id=base.getid(user), + name=name, + domain_id=base.getid(domain), + project_id=base.getid(project), + password=password, + email=email, + description=description, + enabled=enabled) + + def delete(self, user): + return super(UserManager, self).delete( + user_id=base.getid(user)) diff --git a/tests/v3/test_users.py b/tests/v3/test_users.py new file mode 100644 index 000000000..ee9f9d875 --- /dev/null +++ b/tests/v3/test_users.py @@ -0,0 +1,23 @@ +import uuid + +from keystoneclient.v3 import users +from tests.v3 import utils + + +class UserTests(utils.TestCase, utils.CrudTests): + def setUp(self): + super(UserTests, self).setUp() + self.additionalSetUp() + self.key = 'user' + self.collection_key = 'users' + self.model = users.User + self.manager = self.client.users + + def new_ref(self, **kwargs): + kwargs = super(UserTests, self).new_ref(**kwargs) + kwargs.setdefault('description', uuid.uuid4().hex) + kwargs.setdefault('domain_id', uuid.uuid4().hex) + kwargs.setdefault('enabled', True) + kwargs.setdefault('name', uuid.uuid4().hex) + kwargs.setdefault('project_id', uuid.uuid4().hex) + return kwargs