Skip to content

Commit 0f82867

Browse files
committed
Merge pull request basho#387 from basho/sdc-gh365-delete-datatypes
Allow datatypes to be deleted directly. Closes basho#365 Reviewed-by: javajolt
2 parents 1705838 + a26092f commit 0f82867

File tree

4 files changed

+45
-3
lines changed

4 files changed

+45
-3
lines changed

riak/datatypes/datatype.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,17 @@ def reload(self, **params):
104104
self._set_value(value)
105105
return self
106106

107+
def delete(self, **params):
108+
"""
109+
Deletes the datatype from Riak. See :meth:`RiakClient.delete()
110+
<riak.client.RiakClient.delete>` for options.
111+
"""
112+
self.clear()
113+
self._context = None
114+
self._set_value(self._default_value())
115+
self.bucket._client.delete(self, **params)
116+
return self
117+
107118
def update(self, **params):
108119
"""
109120
Sends locally staged mutations to Riak.

riak/tests/test_datatypes.py

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
else:
66
import unittest
77

8-
from riak import RiakBucket, BucketType
8+
from riak import RiakBucket, BucketType, RiakObject
99
import riak.datatypes as datatypes
1010
from . import SKIP_DATATYPES
1111
from riak.tests import test_six
@@ -450,3 +450,30 @@ def test_dt_map_return_body_true_default(self):
450450
mymap.store()
451451

452452
self.assertEqual(mymap.value, {})
453+
454+
@unittest.skipIf(SKIP_DATATYPES, 'SKIP_DATATYPES is set')
455+
def test_delete_datatype(self):
456+
ctype = self.client.bucket_type('pytest-counters')
457+
cbucket = ctype.bucket(self.bucket_name)
458+
counter = cbucket.new(self.key_name)
459+
counter.increment(5)
460+
counter.store()
461+
462+
stype = self.client.bucket_type('pytest-sets')
463+
sbucket = stype.bucket(self.bucket_name)
464+
set_ = sbucket.new(self.key_name)
465+
set_.add("Brett")
466+
set_.store()
467+
468+
mtype = self.client.bucket_type('pytest-maps')
469+
mbucket = mtype.bucket(self.bucket_name)
470+
map_ = mbucket.new(self.key_name)
471+
map_.sets['people'].add('Sean')
472+
map_.store()
473+
474+
for t in [counter, set_, map_]:
475+
t.delete()
476+
obj = RiakObject(self.client, t.bucket, t.key)
477+
self.client.get(obj)
478+
self.assertFalse(obj.exists,
479+
"{0} exists after deletion".format(t.type_name))

riak/transports/http/transport.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,9 @@ def delete(self, robj, rw=None, r=None, w=None, dw=None, pr=None, pw=None,
188188

189189
url = self.object_path(robj.bucket.name, robj.key,
190190
bucket_type=bucket_type, **params)
191-
if self.tombstone_vclocks() and robj.vclock is not None:
191+
use_vclocks = (self.tombstone_vclocks() and hasattr(robj, 'vclock')
192+
and robj.vclock is not None)
193+
if use_vclocks:
192194
headers['X-Riak-Vclock'] = robj.vclock.encode('base64')
193195
response = self._request('DELETE', url, headers)
194196
self.check_http_code(response[0], [204, 404])

riak/transports/pbc/transport.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,9 @@ def delete(self, robj, rw=None, r=None, w=None, dw=None, pr=None, pw=None,
252252
if self.client_timeouts() and timeout:
253253
req.timeout = timeout
254254

255-
if self.tombstone_vclocks() and robj.vclock:
255+
use_vclocks = (self.tombstone_vclocks() and hasattr(robj, 'vclock')
256+
and robj.vclock)
257+
if use_vclocks:
256258
req.vclock = robj.vclock.encode('binary')
257259

258260
bucket = robj.bucket

0 commit comments

Comments
 (0)