/
pycassa_util.py
67 lines (59 loc) · 1.87 KB
/
pycassa_util.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
from pycassa import ColumnFamily
from itertools import islice
def get_all(self, key, column_count=100, yield_batch=False, **kwargs):
kwargs['key'] = key
kwargs['column_count'] = column_count
results = self.get(**kwargs)
result_count = len(results)
if yield_batch:
k = next(reversed(results))
yield results
else:
for k, v in results.iteritems():
yield k, v
while result_count == column_count:
kwargs['column_start'] = k
results = self.get(**kwargs)
result_count = len(results)
if result_count:
results.popitem(False)
if yield_batch:
k = next(reversed(results))
yield results
else:
for k, v in results.iteritems():
yield k, v
ColumnFamily.get_all = get_all
def get_columns(self, key, columns, column_count=100, yield_batch=False, **kwargs):
kwargs['key'] = key
kwargs['column_count'] = column_count
index = 0
while index < len(columns):
kwargs['columns'] = columns[index:index + column_count]
if yield_batch:
yield self.get(**kwargs)
else:
for k, v in self.get(**kwargs).iteritems():
yield k, v
index += column_count
ColumnFamily.get_columns = get_columns
def xmultiget(self, keys, buffer_size=0, *args, **kwargs):
buffer_size = buffer_size or self.buffer_size
key_iter = iter(keys)
key_batch = list(islice(key_iter, buffer_size))
while key_batch:
for k, v in self.multiget(key_batch, buffer_size=buffer_size, *args, **kwargs).iteritems():
yield k, v
key_batch = list(islice(key_iter, buffer_size))
ColumnFamily.xmultiget = xmultiget
def get_page(self, key, last_column=None, *args, **kwargs):
if last_column is None:
return self.get(key, *args, **kwargs)
else:
results = self.get(key, column_start=last_column, *args, **kwargs)
try:
del results[last_column]
except:
pass
return results
ColumnFamily.get_page = get_page