add list and list_leveldb_key

This commit is contained in:
2021-09-07 07:48:07 +08:00
parent 829b2f9bc2
commit 5db7793fb1
2 changed files with 42 additions and 7 deletions

View File

@@ -7,7 +7,7 @@ from game_backuper.config import (
)
from game_backuper.cml import Opts, OptAction
from threading import Thread
from os.path import exists, join
from os.path import exists, join, isdir
from os import mkdir, remove
from game_backuper.file import new_file, copy_file, File, mkdir_for_file
from game_backuper.filetype import FileType
@@ -46,7 +46,7 @@ class BackupTask(Thread):
elif isinstance(f, ConfigLeveldb):
from game_backuper.leveldb import have_leveldb
if not have_leveldb:
raise ValueError('Leveldb is not supported.')
raise NotImplementedError('Leveldb is not supported.')
if not exists(f.full_path):
continue
from game_backuper.leveldb import (
@@ -93,9 +93,26 @@ class Backuper:
t = BackupTask(prog, self.db, self.conf)
self.tasks.append(t)
t.start()
elif self.opts.action == OptAction.LIST:
print(prog.name)
def run(self):
if self.opts.programs_list is None:
if self.opts.action == OptAction.LIST_LEVELDB_KEY:
from game_backuper.leveldb import have_leveldb
if not have_leveldb:
raise NotImplementedError('Leveldb is not supported.')
from game_backuper.leveldb import list_leveldb_entries
for db in self.opts.programs_list:
if exists(db):
if isdir(db):
print(f'Keys in "{db}":')
for i in list_leveldb_entries(db):
print(i)
else:
raise FileExistsError(f'"{db}" should be a directory.')
else:
raise FileNotFoundError(f'Can not find "{db}"')
elif self.opts.programs_list is None:
for prog in self.conf.progs:
self.deal_prog(prog)
else:

View File

@@ -13,6 +13,8 @@ else:
class OptAction(IntEnum):
BACKUP = 0
RESTORE = 1
LIST = 2
LIST_LEVELDB_KEY = 3
@staticmethod
def from_str(v: str) -> IntEnum:
@@ -22,6 +24,10 @@ class OptAction(IntEnum):
return OptAction.BACKUP
elif t == 'restore':
return OptAction.RESTORE
elif t == 'list':
return OptAction.LIST
elif t == 'list_leveldb_key':
return OptAction.LIST_LEVELDB_KEY
else:
raise TypeError('Must be str.')
@@ -33,19 +39,26 @@ class Opts:
def __init__(self, cml: List[str]):
try:
r = getopt(cml, 'hc:', [])
r = getopt(cml, 'hc:', ['help', 'config='])
for i in r[0]:
if i[0] == '-h':
if i[0] == '-h' or i[0] == '--help':
self.print_help()
import sys
sys.exit(0)
elif i[0] == '-c':
elif i[0] == '-c' or i[0] == '--config':
self.config_file = i[1]
if len(r[1]) > 0:
cm = r[1]
re = OptAction.from_str(cm[0])
if re is not None:
self.action = re
if re == OptAction.LIST:
return
elif re == OptAction.LIST_LEVELDB_KEY:
if len(cm) == 1:
raise GetoptError('list_leveldb_key need at least one db_path.') # noqa: E501
self.programs_list = cm[1:]
return
li = cm if re is None else cm[1:]
if len(li) > 0:
self.programs_list = li
@@ -56,4 +69,9 @@ class Opts:
sys.exit(-1)
def print_help(self):
print('''game-backuper [options] [backup|restore] [game names]''')
print('''game-backuper [options] [backup|restore] [<game names> [...]]
game-backuper [options] list
game-backuper [options] list_leveldb_key [<db_path> [...]]
Options:
-h, --help Print help message.
-c, --config <path> Set config file.''')