summaryrefslogtreecommitdiff
path: root/keystoneclient/base.py
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-06-06 13:11:21 +0000
committerGerrit Code Review <review@openstack.org>2013-06-06 13:11:21 +0000
commit2ec2e7ee31a9a7305d524bceaf2c10f89ef27f02 (patch)
tree210493cba71688151954d8660c3c457da99a7d0f /keystoneclient/base.py
parent4b90bc5c314fa52ece212451fbfec7ba7eced3b1 (diff)
parente7162cbbcc55ca8437a01464476b14d1d4ec6fc4 (diff)
downloadpython-keystoneclient-2ec2e7ee31a9a7305d524bceaf2c10f89ef27f02.tar.gz
Merge "Add find() method to CrudManager"
Diffstat (limited to 'keystoneclient/base.py')
-rw-r--r--keystoneclient/base.py22
1 files changed, 22 insertions, 0 deletions
diff --git a/keystoneclient/base.py b/keystoneclient/base.py
index c57ee62..d40c969 100644
--- a/keystoneclient/base.py
+++ b/keystoneclient/base.py
@@ -271,6 +271,28 @@ class CrudManager(Manager):
return self._delete(
self.build_url(**kwargs))
+ def find(self, base_url=None, **kwargs):
+ """
+ Find a single item with attributes matching ``**kwargs``.
+ """
+ kwargs = self._filter_kwargs(kwargs)
+
+ rl = self._list(
+ '%(base_url)s%(query)s' % {
+ 'base_url': self.build_url(base_url=base_url, **kwargs),
+ 'query': '?%s' % urllib.urlencode(kwargs) if kwargs else '',
+ },
+ self.collection_key)
+ num = len(rl)
+
+ if num == 0:
+ msg = "No %s matching %s." % (self.resource_class.__name__, kwargs)
+ raise exceptions.NotFound(404, msg)
+ elif num > 1:
+ raise exceptions.NoUniqueMatch
+ else:
+ return rl[0]
+
class Resource(object):
"""