@@ -275,8 +275,9 @@ def bucket(self, name, bucket_type='default'):
275
275
raise TypeError ('bucket_type must be a string '
276
276
'or riak.bucket.BucketType' )
277
277
278
- return self ._buckets .setdefault ((bucket_type , name ),
279
- RiakBucket (self , name , bucket_type ))
278
+ b = RiakBucket (self , name , bucket_type )
279
+ return self ._setdefault_handle_none (
280
+ self ._buckets , (bucket_type , name ), b )
280
281
281
282
def bucket_type (self , name ):
282
283
"""
@@ -291,12 +292,9 @@ def bucket_type(self, name):
291
292
if not isinstance (name , string_types ):
292
293
raise TypeError ('BucketType name must be a string' )
293
294
294
- if name in self ._bucket_types :
295
- return self ._bucket_types [name ]
296
- else :
297
- btype = BucketType (self , name )
298
- self ._bucket_types [name ] = btype
299
- return btype
295
+ btype = BucketType (self , name )
296
+ return self ._setdefault_handle_none (
297
+ self ._bucket_types , name , btype )
300
298
301
299
def table (self , name ):
302
300
"""
@@ -390,6 +388,16 @@ def _error_rate(node):
390
388
else :
391
389
return random .choice (good )
392
390
391
+ def _setdefault_handle_none (self , wvdict , key , value ):
392
+ # TODO FIXME FUTURE
393
+ # This is a workaround for Python issue 19542
394
+ # http://bugs.python.org/issue19542
395
+ rv = wvdict .setdefault (key , value )
396
+ if rv is None :
397
+ return value
398
+ else :
399
+ return rv
400
+
393
401
@lazy_property
394
402
def _multiget_pool (self ):
395
403
if self ._multiget_pool_size :
0 commit comments