|
@@ -1,10 +1,23 @@
|
|
|
# from Controller import kbc_config
|
|
|
-import Alt
|
|
|
-import tomlkit, sqlite3
|
|
|
+import kbc_alt
|
|
|
+import kbc_toml
|
|
|
+import kbc_sqlite
|
|
|
|
|
|
|
|
|
-# ----- Operating Cursor -----
|
|
|
-oc = {
|
|
|
+# ------ Basics ------
|
|
|
+def get_app_config(returnDict:bool=True):
|
|
|
+ tomls = kbc_toml.MatchTomlTable("dev.toml", "app_config", "dict")
|
|
|
+ global app_config
|
|
|
+ app_config = tomls["app_config"]
|
|
|
+
|
|
|
+ if returnDict == True:
|
|
|
+ return app_config
|
|
|
+
|
|
|
+
|
|
|
+# ----- Core Function -----
|
|
|
+def Translator():
|
|
|
+ global oc
|
|
|
+ oc = {
|
|
|
"dt":str, # DBType
|
|
|
"dp":str, # DBPath
|
|
|
|
|
@@ -18,181 +31,10 @@ oc = {
|
|
|
"tp_to":list, # ~ after command parameter "to"
|
|
|
"tp_attr":str # ~ like "-name" in "edit -name oldName to newName"
|
|
|
}
|
|
|
-# some thoughts:
|
|
|
-# class oc():
|
|
|
-# def get_oc(), def move_oc()
|
|
|
-
|
|
|
-
|
|
|
-# ----- Toml Methods -----
|
|
|
-def GetTomlDoc(tomlName:str):
|
|
|
- try:
|
|
|
- with open(tomlName, "rb") as t:
|
|
|
- doc = tomlkit.load(t)
|
|
|
-
|
|
|
- if doc == {}:
|
|
|
- input("error 0: could not found correct config file")
|
|
|
- exit()
|
|
|
-
|
|
|
- return doc
|
|
|
-
|
|
|
- except FileNotFoundError:
|
|
|
- input("error 0: could not found correct config file")
|
|
|
- exit()
|
|
|
-
|
|
|
-
|
|
|
-def MatchTomlKey(tomlName:str, key:str, table:str="none") -> str:
|
|
|
- doc = GetTomlDoc(tomlName)
|
|
|
-
|
|
|
- if table == "none":
|
|
|
- return str(doc.item(key))
|
|
|
-
|
|
|
- elif table != "none":
|
|
|
- d = doc.unwrap()
|
|
|
- return str(d[table][key])
|
|
|
-
|
|
|
-
|
|
|
-# no differernt between ↑ MatchTomlKey() ↑ except receives and returns in list
|
|
|
-def MatchTomlKeys(tomlName:str, keys:list, table:str="none") -> list:
|
|
|
- doc = GetTomlDoc(tomlName)
|
|
|
-
|
|
|
- if table == "none":
|
|
|
- # rl == 'r'eturn 'l'ist
|
|
|
- rl = []
|
|
|
-
|
|
|
- for key in keys:
|
|
|
- try:
|
|
|
- rl.append(doc.item(key))
|
|
|
- except:
|
|
|
- pass
|
|
|
-
|
|
|
- return rl
|
|
|
-
|
|
|
-
|
|
|
- elif table != "none":
|
|
|
- rl = []
|
|
|
- d = doc.unwrap()
|
|
|
-
|
|
|
- for key in keys:
|
|
|
- try:
|
|
|
- rl.append(d[table][key])
|
|
|
- except:
|
|
|
- pass
|
|
|
-
|
|
|
- return rl
|
|
|
-
|
|
|
-
|
|
|
-def MatchTomlTable(tomlName:str, tableName:str, returnType:str="list"):
|
|
|
- d = GetTomlDoc(tomlName).unwrap()
|
|
|
-
|
|
|
- if returnType == "list":
|
|
|
- return list(d.get(tableName).values())
|
|
|
-
|
|
|
- elif returnType == "dict":
|
|
|
- return d
|
|
|
-
|
|
|
-
|
|
|
-# ----- Sqlite Methods -----
|
|
|
-def Exec_one(dbPath:str, commands:list):
|
|
|
- con = sqlite3.connect(dbPath)
|
|
|
- cur = con.cursor()
|
|
|
-
|
|
|
- cur.execute(commands)
|
|
|
- con.commit()
|
|
|
- re = cur.fetchall()
|
|
|
- cur.close()
|
|
|
- con.close()
|
|
|
-
|
|
|
- return re
|
|
|
-
|
|
|
-
|
|
|
-def IsExist(dbPath:str, tableName:str, itemName:str, returnBool:bool=True):
|
|
|
- # [todo 4] 这里面的.capitalize()后面需要根据config.toml里面的内容判断
|
|
|
- # 可能也不用, 因为KBCLEV的表名和本身并无关系
|
|
|
- tableName = tableName.capitalize()
|
|
|
-
|
|
|
- sqls = "SELECT name FROM {table} WHERE name='{name}'".format(table=tableName, name=itemName)
|
|
|
- ie = Exec_one(dbPath, sqls)
|
|
|
-
|
|
|
- if ie != [] and returnBool == False:
|
|
|
- return ie
|
|
|
-
|
|
|
- elif ie != [] and returnBool == True:
|
|
|
- return True
|
|
|
-
|
|
|
- elif ie == []:
|
|
|
- return False
|
|
|
-
|
|
|
- else:
|
|
|
- # Alt.Err(errCode)
|
|
|
- print("err <Code>: unexpected error in existence check")
|
|
|
-
|
|
|
-
|
|
|
-# ----- Record_main(DB record as a class) -----
|
|
|
-class RM():
|
|
|
- def __init__(self, type:str="", name:str="", dscrp:str="", creator:str="", relatedBoard:str="", relatedClass:str="", status:int=10) -> None:
|
|
|
- self.id = "null"
|
|
|
- self.type = type
|
|
|
- self.name = name
|
|
|
- self.dscrp = dscrp
|
|
|
- self.creator = creator
|
|
|
- self.createdTime = "datetime('now')"
|
|
|
- self.relatedBoard = relatedBoard
|
|
|
- self.relatedClass = relatedClass
|
|
|
- self.status = status
|
|
|
-
|
|
|
-
|
|
|
- def select(self, selectColumn:str="name", aliveOnly:bool=True):
|
|
|
- if aliveOnly == True:
|
|
|
- sqls = "SELECT {sc} FROM compact_main WHERE type='{s.type}' AND name='{s.name}' AND realatedBoard='{s.relatedBoard}' AND relatedClass='{s.relatedClass}' AND status={s.status};".format(sc=selectColumn, s=self)
|
|
|
- elif aliveOnly == False:
|
|
|
- sqls = "SELECT {sc} FROM compact_main WHERE type='{s.type}' AND name='{s.name}' AND realatedBoard='{s.relatedBoard}' AND relatedClass='{s.relatedClass}';".format(sc=selectColumn, s=self)
|
|
|
-
|
|
|
- return sqls
|
|
|
-
|
|
|
-
|
|
|
- def add(self):
|
|
|
- sqls = "INSERT INTO compact_main VALUES({a.id}, '{a.type}', '{a.name}', '{a.dscrp}', '{a.creator}', '{a.createdTime}', '{a.relatedBoard}', '{a.relatedClass}', {a.status});".format(a=self)
|
|
|
-
|
|
|
- return sqls
|
|
|
-
|
|
|
-
|
|
|
- def delete(self): # 1. withStatus:int=10? 2. withStatement >= or > or <?
|
|
|
- sqls = "UPDATE compact_main SET status=-10 WHERE type='{d.type}' AND name='{d.name}' AND relatedBoard='{d.relatedBoard}' AND relatedClass='{d.relatedClass}';".format(d=self)
|
|
|
-
|
|
|
- return sqls
|
|
|
-
|
|
|
-
|
|
|
- def edit(self):
|
|
|
- pass
|
|
|
-
|
|
|
- def move(self):
|
|
|
- pass
|
|
|
-
|
|
|
- def back(self):
|
|
|
- pass
|
|
|
-
|
|
|
- def export():
|
|
|
- pass
|
|
|
-
|
|
|
-
|
|
|
-# ----- Record_log_action(DB record as a class) -----
|
|
|
-class RLA():
|
|
|
- pass
|
|
|
-
|
|
|
-
|
|
|
-def GenModel():
|
|
|
- # model IE?
|
|
|
- # over write?
|
|
|
- # exec
|
|
|
- pass
|
|
|
-
|
|
|
-
|
|
|
-# ----- Interactions Handler(with other .py) -----
|
|
|
-def Handler():
|
|
|
- pass
|
|
|
+ # some thoughts:
|
|
|
+ # class oc():
|
|
|
+ # def get_oc(), def move_oc()
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
- asd = RM("board", "KB", "", "n.HE", "", "", )
|
|
|
- print(asd.select())
|
|
|
- input("hold: ")
|
|
|
+ pass
|