add basic support for leveldb

This commit is contained in:
2021-09-06 08:16:20 +08:00
parent 4ff3f7e1a3
commit 3c6dbfdd9d
7 changed files with 112 additions and 25 deletions

30
game_backuper/leveldb.py Normal file
View File

@@ -0,0 +1,30 @@
try:
from plyvel import DB
have_leveldb = True
from typing import List
except ImportError:
have_leveldb = False
if have_leveldb:
def list_leveldb_entries(db: str, dms: List[bytes] = None):
d = DB(db)
r = []
for i in d.iterator(include_value=False):
if isinstance(i, bytes):
if dms is None:
r.append(i)
else:
if i == b'VERSION':
r.append(i)
elif i.startswith(b'META:'):
dm = i[5:]
if dm in dms:
r.append(i)
elif i.startswith(b'_'):
dmi = i.find(b'\x00\x01')
dm = i[1:dmi]
if dm in dms:
r.append(i)
r.sort()
return r