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

View File

@@ -4,8 +4,14 @@ try:
except Exception:
from yaml import SafeLoader
from os.path import join, relpath
from typing import List
from typing import List, Union
from game_backuper.file import listdirs
from collections import namedtuple
ConfigNormalFile = namedtuple('ConfigNormalFile', ['name', 'full_path'])
ConfigLeveldb = namedtuple('ConfigLeveldb', ['name', 'full_path', 'domains'])
ConfigResult = Union[ConfigNormalFile, ConfigLeveldb]
class Program:
@@ -30,7 +36,7 @@ class Program:
self._files = None
@property
def files(self) -> List[str]:
def files(self) -> List[ConfigResult]:
ke = 'files'
if ke not in self.data or not isinstance(self.data[ke], list):
raise ValueError('Files is needed and should be a list.')
@@ -41,14 +47,25 @@ class Program:
for i in self.data[ke]:
b = self.base
if isinstance(i, str):
r.append((i, join(b, i)))
r.append(ConfigNormalFile(i, join(b, i)))
elif isinstance(i, dict):
t = i['type']
if t == 'path':
bp = join(b, i['path'])
ll = listdirs(bp)
for ii in ll:
r.append((relpath(ii, b), ii))
r.append(ConfigNormalFile(relpath(ii, b), ii))
elif t == 'leveldb':
p = join(b, i['path'])
dms = None
if 'domains' in i and isinstance(i['domains'], list):
dms = []
for ii in i['domains']:
if isinstance(ii, str) and len(ii) > 0:
dms.append(ii.encode())
if len(dms) == 0:
dms = None
r.append(ConfigLeveldb(i['path'], p, dms))
return r
@property