Skip to content

Commit cb43eb9

Browse files
authored
Merge pull request #1 from criteo-forks/pr76
Include PR coderanger#76, allow partial search
2 parents 216cbb2 + d810b5f commit cb43eb9

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

chef/search.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,20 +44,36 @@ class Search(collections.Sequence):
4444
print row.object.name
4545
4646
.. versionadded:: 0.1
47+
48+
You can also do partial searches if you are using chef server >= 12.
49+
50+
Example::
51+
keys = {
52+
'name' : ['name'],
53+
'ip' : ['ipaddress'],
54+
'kernel_name' : ['kernel', 'name']
55+
}
56+
57+
for row in Search('node', 'roles:app', filter_result=keys):
58+
print row['data']['kernel_name']
4759
"""
4860

4961
url = '/search'
5062

51-
def __init__(self, index, q='*:*', rows=1000, start=0, api=None):
63+
def __init__(self, index, q='*:*', rows=1000, start=0, api=None, filter_result=None):
5264
self.name = index
5365
self.api = api or ChefAPI.get_global()
5466
self._args = dict(q=q, rows=rows, start=start)
5567
self.url = self.__class__.url + '/' + self.name + '?' + six.moves.urllib.parse.urlencode(self._args)
68+
self._filter_result = filter_result
5669

5770
@property
5871
def data(self):
5972
if not hasattr(self, '_data'):
60-
self._data = self.api[self.url]
73+
if not self._filter_result:
74+
self._data = self.api[self.url]
75+
else:
76+
self._data = self.api.api_request('POST', self.url, data=self._filter_result)
6177
return self._data
6278

6379
@property

0 commit comments

Comments
 (0)