123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- # from Controller import kbc_config
- import Alt
- import tomlkit, sqlite3
- # ----- Operating Cursor -----
- oc = {
- "dt":str, # DBType
- "dp":str, # DBPath
- "cp":list, # CurrentPath
- "pp":list, # PreviousPath
- "next_move":str,
- "tp":list, # TargetPath
- "tp_in":list, # ~ after command parameter "in"(&& before command parameter "to")
- "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
- if __name__ == "__main__":
- asd = RM("board", "KB", "", "n.HE", "", "", )
- print(asd.select())
- input("hold: ")
|