Skip to content

Instantly share code, notes, and snippets.

@spikeekips
Created December 28, 2018 06:14
Show Gist options
  • Save spikeekips/cc007f925435a13650f9c5a587b8e0e5 to your computer and use it in GitHub Desktop.
Save spikeekips/cc007f925435a13650f9c5a587b8e0e5 to your computer and use it in GitHub Desktop.
import requests
import sys # noqa
import base64
from pprint import pprint # noqa
import json
import plyvel
def panic(*err):
print('> error:', err)
sys.exit(1)
def print_response(response):
if response.status_code != 200:
print(response)
sys.exit()
print(response)
js = response.json()
return js
db = plyvel.DB('/tmp/testdb/', create_if_missing=True)
url = 'http://localhost:54321/jsonrpc'
headers = {'content-type': 'application/json'}
# DB.OpenSnapshot method
print('-' * 30, 'DB.OpenSnapshot')
payload = {
'method': 'DB.OpenSnapshot',
'params': (),
'id': 1,
}
response = requests.post(url, data=json.dumps(payload), headers=headers)
js = print_response(response)
snapshot = js['result']['snapshot']
print("> snapshot: %s" % snapshot)
# DB.GetIterator method; all
n = 0
cursor = None
limit = 1000000000000000000
while True:
payload = {
'method': 'DB.GetIterator',
'params': (dict(
snapshot=snapshot,
prefix='',
options=dict(
limit=limit,
reverse=False,
cursor=base64.b64encode(cursor).decode('utf-8') if cursor is not None else None,
),
),),
'id': 1,
}
response = requests.post(url, data=json.dumps(payload), headers=headers)
js = print_response(response)
err = js['error']
if err is not None:
panic(err)
result = js['result']['items']
limit = js['result']['limit']
for i in result:
key = base64.b64decode(i['Key'])
v = base64.b64decode(i['Value'])
db.put(key, v)
n += 1
print("> len:", len(result))
if len(result) < limit:
break
print('> cursor:', key)
cursor = key
# DB.ReleaseSnapshot method
print('-' * 30, 'DB.ReleaseSnapshot')
payload = {
'method': 'DB.ReleaseSnapshot',
'params': (dict(snapshot=snapshot,),),
'id': 1,
}
response = requests.post(url, data=json.dumps(payload), headers=headers)
js = print_response(response)
print("> release snapshot: %s" % js)
print('> total:', n)
db.close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment