From 6c84d7bf8567bfa3024cd38f80c01ed84768a89c Mon Sep 17 00:00:00 2001
From: Dolph Mathews <dolph.mathews@gmail.com>
Date: Tue, 11 Sep 2012 15:42:38 -0500
Subject: [PATCH] v3 Credential CRUD

Change-Id: I646ff7db3ccf827f912ebdb78fdf8d765d52c26c
---
 keystoneclient/v3/client.py      |  2 ++
 keystoneclient/v3/credentials.py | 57 ++++++++++++++++++++++++++++++++
 tests/v3/test_credentials.py     | 22 ++++++++++++
 3 files changed, 81 insertions(+)
 create mode 100644 keystoneclient/v3/credentials.py
 create mode 100644 tests/v3/test_credentials.py

diff --git a/keystoneclient/v3/client.py b/keystoneclient/v3/client.py
index 75b32630a..51672a738 100644
--- a/keystoneclient/v3/client.py
+++ b/keystoneclient/v3/client.py
@@ -16,6 +16,7 @@ import json
 import logging
 
 from keystoneclient.v2_0 import client
+from keystoneclient.v3 import credentials
 from keystoneclient.v3 import endpoints
 from keystoneclient.v3 import domains
 from keystoneclient.v3 import policies
@@ -64,6 +65,7 @@ class Client(client.Client):
         """ Initialize a new client for the Keystone v2.0 API. """
         super(Client, self).__init__(endpoint=endpoint, **kwargs)
 
+        self.credentials = credentials.CredentialManager(self)
         self.endpoints = endpoints.EndpointManager(self)
         self.domains = domains.DomainManager(self)
         self.policies = policies.PolicyManager(self)
diff --git a/keystoneclient/v3/credentials.py b/keystoneclient/v3/credentials.py
new file mode 100644
index 000000000..264c367e7
--- /dev/null
+++ b/keystoneclient/v3/credentials.py
@@ -0,0 +1,57 @@
+# 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 Credential(base.Resource):
+    """Represents an Identity credential.
+
+    Attributes:
+        * id: a uuid that identifies the credential
+
+    """
+    pass
+
+
+class CredentialManager(base.CrudManager):
+    """Manager class for manipulating Identity credentials."""
+    resource_class = Credential
+    collection_key = 'credentials'
+    key = 'credential'
+
+    def create(self, user, type, data, project=None):
+        return super(CredentialManager, self).create(
+            user_id=base.getid(user),
+            type=type,
+            data=data,
+            project_id=base.getid(project))
+
+    def get(self, credential):
+        return super(CredentialManager, self).get(
+            credential_id=base.getid(credential))
+
+    def update(self, credential, user, type=None, data=None, project=None):
+        return super(CredentialManager, self).update(
+            credential_id=base.getid(credential),
+            user_id=base.getid(user),
+            type=type,
+            data=data,
+            project_id=base.getid(project))
+
+    def delete(self, credential):
+        return super(CredentialManager, self).delete(
+            credential_id=base.getid(credential))
diff --git a/tests/v3/test_credentials.py b/tests/v3/test_credentials.py
new file mode 100644
index 000000000..180f680dd
--- /dev/null
+++ b/tests/v3/test_credentials.py
@@ -0,0 +1,22 @@
+import uuid
+
+from keystoneclient.v3 import credentials
+from tests.v3 import utils
+
+
+class CredentialTests(utils.TestCase, utils.CrudTests):
+    def setUp(self):
+        super(CredentialTests, self).setUp()
+        self.additionalSetUp()
+        self.key = 'credential'
+        self.collection_key = 'credentials'
+        self.model = credentials.Credential
+        self.manager = self.client.credentials
+
+    def new_ref(self, **kwargs):
+        kwargs = super(CredentialTests, self).new_ref(**kwargs)
+        kwargs.setdefault('data', uuid.uuid4().hex)
+        kwargs.setdefault('project_id', uuid.uuid4().hex)
+        kwargs.setdefault('type', uuid.uuid4().hex)
+        kwargs.setdefault('user_id', uuid.uuid4().hex)
+        return kwargs