-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathscalaris_dict.py
49 lines (46 loc) · 1.39 KB
/
scalaris_dict.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
import json
import urllib2
import base64
class scalaris_dict:
def __init__(self, url):
"""url should point to jsonrpc.yaws"""
self._url = url
def _request(self, method, *params):
msg = json.dumps({
'version': '1.1',
'method': method,
'params': params,
'id': 0})
headers = {"Content-type": 'application/json'}
request = urllib2.Request(self._url, msg, headers)
fh = urllib2.urlopen(request)
return json.loads(fh.read())
def __setitem__(self, key, value):
value = base64.encodestring(value)
key = base64.encodestring(key)
ret = self._request('write', key, value)
assert ret['result'] == "ok"
def __getitem__(self, key):
key = base64.encodestring(key)
value = str(self._request('read', key)['result'])
value = base64.decodestring(value)
return value
def __delitem__(self, key):
"""WARNING: keys may reappear in seldom cases!
Read: http://groups.google.com/group/scalaris/browse_thread/thread/ff1d9237e218799?pli=1
"""
key = base64.encodestring(key)
ret = self._request('delete', key)
assert 'ok' in ret['result']
def __contains__(self, key):
key = base64.encodestring(key)
result = self._request('read', key)['result']
if 'failure' in result and result['failure'] == 'not_found':
return False
return True
if __name__ == "__main__":
d = sdict('http://localhost:8000/jsonrpc.yaws')
d['blub'] = "grins"
del d['blub']
print 'blubb' in d
print 'blub' in d