Skip to content

Commit de265fd

Browse files
Merge pull request #500 from splunk/DVPL-11856
update support for accelerated_field of kvstore
2 parents 6be3ddf + 054e249 commit de265fd

File tree

2 files changed

+38
-24
lines changed

2 files changed

+38
-24
lines changed

splunklib/client.py

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3709,24 +3709,31 @@ class KVStoreCollections(Collection):
37093709
def __init__(self, service):
37103710
Collection.__init__(self, service, 'storage/collections/config', item=KVStoreCollection)
37113711

3712-
def create(self, name, indexes = {}, fields = {}, **kwargs):
3712+
def __getitem__(self, item):
3713+
res = Collection.__getitem__(self, item)
3714+
for k, v in res.content.items():
3715+
if "accelerated_fields" in k:
3716+
res.content[k] = json.loads(v)
3717+
return res
3718+
3719+
def create(self, name, accelerated_fields={}, fields={}, **kwargs):
37133720
"""Creates a KV Store Collection.
37143721
37153722
:param name: name of collection to create
37163723
:type name: ``string``
3717-
:param indexes: dictionary of index definitions
3718-
:type indexes: ``dict``
3724+
:param accelerated_fields: dictionary of accelerated_fields definitions
3725+
:type accelerated_fields: ``dict``
37193726
:param fields: dictionary of field definitions
37203727
:type fields: ``dict``
37213728
:param kwargs: a dictionary of additional parameters specifying indexes and field definitions
37223729
:type kwargs: ``dict``
37233730
37243731
:return: Result of POST request
37253732
"""
3726-
for k, v in six.iteritems(indexes):
3733+
for k, v in six.iteritems(accelerated_fields):
37273734
if isinstance(v, dict):
37283735
v = json.dumps(v)
3729-
kwargs['index.' + k] = v
3736+
kwargs['accelerated_fields.' + k] = v
37303737
for k, v in six.iteritems(fields):
37313738
kwargs['field.' + k] = v
37323739
return self.post(name=name, **kwargs)
@@ -3740,18 +3747,20 @@ def data(self):
37403747
"""
37413748
return KVStoreCollectionData(self)
37423749

3743-
def update_index(self, name, value):
3744-
"""Changes the definition of a KV Store index.
3750+
def update_accelerated_field(self, name, value):
3751+
"""Changes the definition of a KV Store accelerated_field.
37453752
3746-
:param name: name of index to change
3753+
:param name: name of accelerated_fields to change
37473754
:type name: ``string``
3748-
:param value: new index definition
3749-
:type value: ``dict`` or ``string``
3755+
:param value: new accelerated_fields definition
3756+
:type value: ``dict``
37503757
37513758
:return: Result of POST request
37523759
"""
37533760
kwargs = {}
3754-
kwargs['index.' + name] = value if isinstance(value, six.string_types) else json.dumps(value)
3761+
if isinstance(value, dict):
3762+
value = json.dumps(value)
3763+
kwargs['accelerated_fields.' + name] = value
37553764
return self.post(**kwargs)
37563765

37573766
def update_field(self, name, value):

tests/test_kvstore_conf.py

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
# under the License.
1616

1717
from __future__ import absolute_import
18+
19+
import json
1820
from tests import testlib
1921
try:
2022
import unittest
@@ -42,13 +44,27 @@ def test_create_delete_collection(self):
4244
self.confs['test'].delete()
4345
self.assertTrue(not 'test' in self.confs)
4446

47+
def test_create_fields(self):
48+
self.confs.create('test', accelerated_fields={'ind1':{'a':1}}, fields={'a':'number1'})
49+
self.assertEqual(self.confs['test']['field.a'], 'number1')
50+
self.assertEqual(self.confs['test']['accelerated_fields.ind1'], {"a": 1})
51+
self.confs['test'].delete()
52+
4553
def test_update_collection(self):
4654
self.confs.create('test')
47-
self.confs['test'].post(**{'accelerated_fields.ind1': '{"a": 1}', 'field.a': 'number'})
55+
val = {"a": 1}
56+
self.confs['test'].post(**{'accelerated_fields.ind1': json.dumps(val), 'field.a': 'number'})
4857
self.assertEqual(self.confs['test']['field.a'], 'number')
49-
self.assertEqual(self.confs['test']['accelerated_fields.ind1'], '{"a": 1}')
58+
self.assertEqual(self.confs['test']['accelerated_fields.ind1'], {"a": 1})
5059
self.confs['test'].delete()
5160

61+
def test_update_accelerated_fields(self):
62+
self.confs.create('test', accelerated_fields={'ind1':{'a':1}})
63+
self.assertEqual(self.confs['test']['accelerated_fields.ind1'], {'a': 1})
64+
# update accelerated_field value
65+
self.confs['test'].update_accelerated_field('ind1', {'a': -1})
66+
self.assertEqual(self.confs['test']['accelerated_fields.ind1'], {'a': -1})
67+
self.confs['test'].delete()
5268

5369
def test_update_fields(self):
5470
self.confs.create('test')
@@ -77,17 +93,6 @@ def test_overlapping_collections(self):
7793
self.confs['test'].delete()
7894
self.confs['test'].delete()
7995

80-
"""
81-
def test_create_accelerated_fields_fields(self):
82-
self.confs.create('test', indexes={'foo': '{"foo": 1}', 'bar': {'bar': -1}}, **{'field.foo': 'string'})
83-
self.assertEqual(self.confs['test']['accelerated_fields.foo'], '{"foo": 1}')
84-
self.assertEqual(self.confs['test']['field.foo'], 'string')
85-
self.assertRaises(client.HTTPError, lambda: self.confs['test'].post(**{'accelerated_fields.foo': 'THIS IS INVALID'}))
86-
self.assertEqual(self.confs['test']['accelerated_fields.foo'], '{"foo": 1}')
87-
self.confs['test'].update_accelerated_fields('foo', '')
88-
self.assertEqual(self.confs['test']['accelerated_fields.foo'], None)
89-
"""
90-
9196
def tearDown(self):
9297
if ('test' in self.confs):
9398
self.confs['test'].delete()

0 commit comments

Comments
 (0)