Stateful.py 3.7 KB

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