feat: 重构
This commit is contained in:
165
backend/manage.py
Normal file
165
backend/manage.py
Normal file
@@ -0,0 +1,165 @@
|
||||
"""AMT 数据库管理脚本 - 交互式管理 Tool 表"""
|
||||
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
|
||||
from peewee import SqliteDatabase, Model, CharField, TextField
|
||||
|
||||
db_path = os.path.join(os.path.dirname(__file__), "data.db")
|
||||
db = SqliteDatabase(db_path)
|
||||
|
||||
|
||||
class BaseModel(Model):
|
||||
class Meta:
|
||||
database = db
|
||||
|
||||
|
||||
class Tool(BaseModel):
|
||||
code = CharField(max_length=4, unique=True)
|
||||
step = TextField()
|
||||
desp = TextField(default="")
|
||||
|
||||
|
||||
def init_db():
|
||||
db.connect()
|
||||
db.create_tables([Tool])
|
||||
|
||||
|
||||
def list_tools():
|
||||
tools = Tool.select().order_by(Tool.code)
|
||||
if not tools:
|
||||
print("\n (空)")
|
||||
return
|
||||
print()
|
||||
for t in tools:
|
||||
print(f" [{t.code}] {t.desp or '(无描述)'}")
|
||||
|
||||
|
||||
def show_tool():
|
||||
code = input("输入 code: ").strip()
|
||||
tool = Tool.get_or_none(Tool.code == code)
|
||||
if tool is None:
|
||||
print(f" code {code} 不存在")
|
||||
return
|
||||
print(f"\n code: {tool.code}")
|
||||
print(f" desp: {tool.desp or '(无描述)'}")
|
||||
print(f" step:")
|
||||
print(json.dumps(json.loads(tool.step), indent=2, ensure_ascii=False))
|
||||
|
||||
|
||||
def add_tool():
|
||||
code = input("输入 code (4位数字): ").strip()
|
||||
if len(code) != 4 or not code.isdigit():
|
||||
print(" code 必须是4位数字")
|
||||
return
|
||||
if Tool.get_or_none(Tool.code == code):
|
||||
print(f" code {code} 已存在,请用编辑功能修改")
|
||||
return
|
||||
|
||||
desp = input("输入描述: ").strip()
|
||||
print("输入 step JSON (输入空行结束):")
|
||||
lines = []
|
||||
while True:
|
||||
line = input()
|
||||
if line == "":
|
||||
break
|
||||
lines.append(line)
|
||||
|
||||
raw = "\n".join(lines)
|
||||
try:
|
||||
parsed = json.loads(raw)
|
||||
except json.JSONDecodeError as e:
|
||||
print(f" JSON 解析失败: {e}")
|
||||
return
|
||||
|
||||
Tool.create(code=code, step=json.dumps(parsed, ensure_ascii=False), desp=desp)
|
||||
print(f" 已添加 [{code}]")
|
||||
|
||||
|
||||
def edit_tool():
|
||||
code = input("输入要编辑的 code: ").strip()
|
||||
tool = Tool.get_or_none(Tool.code == code)
|
||||
if tool is None:
|
||||
print(f" code {code} 不存在")
|
||||
return
|
||||
|
||||
print(f" 当前描述: {tool.desp or '(无描述)'}")
|
||||
desp = input("新描述 (回车跳过): ").strip()
|
||||
if desp:
|
||||
tool.desp = desp
|
||||
|
||||
print(f" 当前 step:")
|
||||
print(json.dumps(json.loads(tool.step), indent=2, ensure_ascii=False))
|
||||
choice = input("修改 step? (y/N): ").strip().lower()
|
||||
if choice == "y":
|
||||
print("输入新的 step JSON (输入空行结束):")
|
||||
lines = []
|
||||
while True:
|
||||
line = input()
|
||||
if line == "":
|
||||
break
|
||||
lines.append(line)
|
||||
raw = "\n".join(lines)
|
||||
try:
|
||||
parsed = json.loads(raw)
|
||||
except json.JSONDecodeError as e:
|
||||
print(f" JSON 解析失败: {e}")
|
||||
return
|
||||
tool.step = json.dumps(parsed, ensure_ascii=False)
|
||||
|
||||
tool.save()
|
||||
print(f" 已更新 [{code}]")
|
||||
|
||||
|
||||
def delete_tool():
|
||||
code = input("输入要删除的 code: ").strip()
|
||||
tool = Tool.get_or_none(Tool.code == code)
|
||||
if tool is None:
|
||||
print(f" code {code} 不存在")
|
||||
return
|
||||
|
||||
print(f" [{tool.code}] {tool.desp or '(无描述)'}")
|
||||
confirm = input("确认删除? (y/N): ").strip().lower()
|
||||
if confirm == "y":
|
||||
tool.delete_instance()
|
||||
print(f" 已删除 [{code}]")
|
||||
else:
|
||||
print(" 已取消")
|
||||
|
||||
|
||||
MENU = {
|
||||
"1": ("列出所有", list_tools),
|
||||
"2": ("查看详情", show_tool),
|
||||
"3": ("添加", add_tool),
|
||||
"4": ("编辑", edit_tool),
|
||||
"5": ("删除", delete_tool),
|
||||
}
|
||||
|
||||
|
||||
def main():
|
||||
init_db()
|
||||
print("=== AMT 数据库管理 ===")
|
||||
while True:
|
||||
print()
|
||||
for k, (label, _) in MENU.items():
|
||||
print(f" {k}. {label}")
|
||||
print(" q. 退出")
|
||||
|
||||
choice = input("\n> ").strip().lower()
|
||||
if choice == "q":
|
||||
break
|
||||
action = MENU.get(choice)
|
||||
if action:
|
||||
try:
|
||||
action[1]()
|
||||
except (KeyboardInterrupt, EOFError):
|
||||
print()
|
||||
else:
|
||||
print(" 无效选项")
|
||||
|
||||
db.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user