Stateful.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. from Controller import kbc_config
  2. import Alt
  3. import tomlkit, sqlite3
  4. # ----- Operating Cursor -----
  5. oc = {
  6. "dt":str,
  7. "dp":str,
  8. "cp":str,
  9. "pp":str,
  10. "tp":str,
  11. "tp_in":str,
  12. "tp_to":str,
  13. "tp_attr":str
  14. }
  15. # thoughts:
  16. # class oc():
  17. # def get_oc(), def move_oc()
  18. # ----- Toml Methods -----
  19. def GetTomlDoc(tomlName:str):
  20. try:
  21. with open(tomlName, "rb") as t:
  22. doc = tomlkit.load(t)
  23. if doc == {}:
  24. input("error 0: could not found correct config file")
  25. exit()
  26. return doc
  27. except:
  28. input("error 0: could not found correct config file")
  29. exit()
  30. def MatchTomlKey(tomlName:str, key:str, table:str="none") -> str:
  31. doc = GetTomlDoc(tomlName)
  32. if table == "none":
  33. return str(doc.item(key))
  34. elif table != "none":
  35. d = doc.unwrap()
  36. return str(d[table][key])
  37. # no differernt between ↑ MatchTomlKey() ↑ except receives and returns in list
  38. def MatchTomlKeys(tomlName:str, keys:list, table:str="none") -> list:
  39. doc = GetTomlDoc(tomlName)
  40. if table == "none":
  41. # rl == 'r'eturn 'l'ist
  42. rl = []
  43. for key in keys:
  44. try:
  45. rl.append(doc.item(key))
  46. except:
  47. pass
  48. return rl
  49. elif table != "none":
  50. rl = []
  51. d = doc.unwrap()
  52. for key in keys:
  53. try:
  54. rl.append(d[table][key])
  55. except:
  56. pass
  57. return rl
  58. def MatchTomlTable(tomlName:str, tableName:str, returnType:str="list"):
  59. d = GetTomlDoc(tomlName).unwrap()
  60. if returnType == "list":
  61. return list(d.get(tableName).values())
  62. elif returnType == "dict":
  63. return d
  64. # ----- Sqlite Methods -----
  65. def Exec_one(dbPath:str, commands:list):
  66. con = sqlite3.connect(dbPath)
  67. cur = con.cursor()
  68. cur.execute(commands)
  69. con.commit()
  70. re = cur.fetchall()
  71. cur.close()
  72. con.close()
  73. return re
  74. def IsExist(dbPath:str, tableName:str, itemName:str, returnBool:bool=True):
  75. # [todo 4] 这里面的.capitalize()后面需要根据config.toml里面的内容判断
  76. # 可能也不用, 因为KBCLEV的表名和本身并无关系
  77. tableName = tableName.capitalize()
  78. sqls = "SELECT name FROM {table} WHERE name='{name}'".format(table=tableName, name=itemName)
  79. ie = Exec_one(dbPath, sqls)
  80. if ie != [] and returnBool == False:
  81. return ie
  82. elif ie != [] and returnBool == True:
  83. return True
  84. elif ie == []:
  85. return False
  86. else:
  87. # Alt.Err(errCode)
  88. print("err <Code>: unexpected error in existence check")
  89. # ----- Record_main(DB record as a class) -----
  90. class RM():
  91. def __init__(self, type:str, name:str, dscrp:str, creator:str, relatedBoard:str, relatedClass:str, status:int) -> None:
  92. self.id = "null"
  93. self.type = type
  94. self.name = name
  95. self.dscrp = dscrp
  96. self.creator = creator
  97. self.createdTime = "datetime('now')"
  98. self.relatedBoard = relatedBoard
  99. self.relatedClass = relatedClass
  100. self.status = status
  101. def select():
  102. pass
  103. def add():
  104. pass
  105. def delete():
  106. pass
  107. def edit():
  108. pass
  109. def move():
  110. pass
  111. def back():
  112. pass
  113. def export():
  114. pass
  115. # ----- Record_log_action(DB record as a class) -----
  116. class RLA():
  117. pass
  118. def GenModel():
  119. # model IE?
  120. # over write?
  121. # exec
  122. pass
  123. # ----- Interactions Handler(with other .py) -----
  124. def Handler():
  125. pass
  126. if __name__ == "__main__":
  127. pass