forked from samuelchen/saeutils
-
Notifications
You must be signed in to change notification settings - Fork 0
/
sae_storage.py
86 lines (70 loc) · 2.64 KB
/
sae_storage.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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/usr/bin/env python
# coding: utf-8
__author__ = 'Samuel Chen <samuel.net@gmail.com>'
'''
SAE storage bridges for pyutils Wrapper
Created on 3/11/2015
'''
from sae.storage import Bucket, Connection
class SAEStorageKVDB(object):
'''
A bridge for pyutils kvdb wrapper to access sae storage like a kvdb.
e.g.
from pyutils import KVDBWrapper
from sae_storage import SAEStorageKVDB
kvclient = KVDBWrapper(SAEStorageKVDB, bucket='mybucket', accesskey='xxx', secretkey='yyy', account='myapp', prefix='PRE:', ...)
kvclient.set(key,value)
kvclient.get(key)
'''
def __init__(self, **kwargs):
bucket = kwargs['bucket'] if 'bucket' in kwargs else ''
accesskey = kwargs['accesskey'] if 'accesskey' in kwargs else ''
secretkey = kwargs['secretkey'] if 'secretkey' in kwargs else ''
account = kwargs['account'] if 'account' in kwargs else '' # app name
retries = long(kwargs['retries']) if 'retries' in kwargs else 3 # app name
self.prefix = kwargs['prefix'] if 'prefix' in kwargs else ''
if accesskey and secretkey and account:
conn = Connection(accesskey, secretkey, account, retries)
self.kv = conn.get_bucket(bucket)
else:
self.kv = Bucket(bucket)
def info(self):
return self.kv.stat()
def get(self, key, **kwargs):
k = self.prefix + key
return self.kv.get_object(k, **kwargs)
def set(self, key, value, **kwargs):
k = self.prefix + key
return self.kv.put_object(k, value, **kwargs)
def delete(self, key, **kwargs):
k = self.prefix + key
return self.kv.delete_object(k, **kwargs)
def exist(self, key, **kwargs):
k = self.prefix + key
rc = False
st = self.kv.stat_object(k)
if st: rc = True
return rc
def scan(self, cursor=None, count=100, **kwargs):
'''
Retrieve keys by given arguments
:param kwargs:
'count' for retrieve count;
'cursor' is the key for next time retrieve
:return:
'''
return self.kv.c(prefix=self.prefix, marker=cursor, limit=count, **kwargs)
def scanv(self, cursor=None, count=100, **kwargs):
'''
Retrieve key-values by given arguments
:param kwargs:
'count' for retrieve count;
'cursor' is the key for next time retrieve
:return:
'''
return self.kv.list(prefix=self.prefix, marker=cursor, limit=count, **kwargs)
def mget(self, keys, **kwargs):
for key in keys:
k = self.prefix + key
val = self.get(k, **kwargs)
yield val