Stateful.py 3.6 KB

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