dev: 添加配置文件

This commit is contained in:
Julian Freeman
2024-07-19 12:08:40 -04:00
parent aa4d88b980
commit 631127377a
7 changed files with 117 additions and 54 deletions

73
lib/config_utils.py Normal file
View File

@@ -0,0 +1,73 @@
# coding: utf8
import os
import sys
import json
from pathlib import Path
def path_not_exist(path: str | Path) -> bool:
"""
判断目标路径是否存在
如果参数为空或者 None亦认为不存在
:param path: 目标路径
:return:
"""
if isinstance(path, str):
return len(path) == 0 or not Path(path).exists()
elif isinstance(path, Path):
return not path.exists()
else:
return True
def get_data_dir() -> str:
plat = sys.platform
if plat == "win32":
data_dir = os.path.expandvars("%appdata%")
elif plat == "darwin":
data_dir = os.path.expanduser("~/Library/Application Support")
else:
raise OSError("Unsupported platform")
return data_dir
def get_app_dir(org_name: str, app_name: str) -> Path:
data_dir = get_data_dir()
app_dir = Path(data_dir, org_name, app_name)
if not app_dir.exists():
app_dir.mkdir(parents=True, exist_ok=True)
return app_dir
def get_config_path(org_name: str, app_name: str) -> Path:
data_dir = get_app_dir(org_name, app_name)
return Path(data_dir, "config.json")
def read_config(org_name: str, app_name: str) -> dict:
config_path = get_config_path(org_name, app_name)
if not config_path.exists():
config = {
"table_name": "entries",
"button_min_width": 120,
"last_db_path": "",
"loaded_memory": {}
}
config_path.write_text(json.dumps(config, ensure_ascii=False, indent=4), encoding="utf-8")
return config
else:
return json.loads(config_path.read_text(encoding="utf-8"))
def write_config(config: dict, org_name: str, app_name: str):
config_path = get_config_path(org_name, app_name)
config_path.write_text(json.dumps(config, ensure_ascii=False, indent=4), encoding="utf-8")
def get_default_db_path(config: dict, org_name: str, app_name: str) -> str:
if path_not_exist(config["last_db_path"]):
app_dir = get_app_dir(org_name, app_name)
return str(app_dir / f"default.db")
return config["last_db_path"]

View File

@@ -1,4 +0,0 @@
# coding: utf8
table_name = "entries"
button_min_width = 120

View File

@@ -1,8 +1,8 @@
# coding: utf8
from os import PathLike
from pykeepass import PyKeePass
from .Sqlite3Helper import Sqlite3Worker, BlobType, Column
from .global_config import table_name
from lib.db_columns_def import all_columns
from .Sqlite3Helper import Sqlite3Worker, BlobType
def trim_str(value):
@@ -28,7 +28,7 @@ def blob_fy(value: str) -> BlobType:
def read_kps_to_db(kps_file: str | PathLike[str], password: str,
columns: list[Column], sqh: Sqlite3Worker) -> PyKeePass:
table_name: str, sqh: Sqlite3Worker) -> PyKeePass:
kp = PyKeePass(kps_file, password=password)
values = []
@@ -44,5 +44,5 @@ def read_kps_to_db(kps_file: str | PathLike[str], password: str,
blob_fy("::".join([kps_file] + entry.path[:-1])),
])
sqh.insert_into(table_name, columns, values)
sqh.insert_into(table_name, all_columns[1:], values)
return kp