__init__.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import os
  4. import json
  5. class TextConfig:
  6. def __init__(self, file):
  7. self._items=[]
  8. self._count = 0
  9. self._file = file
  10. if file!=None:
  11. self.Load()
  12. def Load(self):
  13. self._items = []
  14. count = 0
  15. try:
  16. with open(self._file, "r") as f:
  17. for line in f:
  18. if " " in line and line.startswith("#")==False and line.startswith(";")==False:
  19. #var, val = line.split(" ",2);
  20. var, val = self._getKeyValueFromLine(line)
  21. val = val.strip()
  22. var = var.strip()
  23. if val.isnumeric():
  24. self._items.append({"var":var.strip() ,"val": int(val) })
  25. count+=1
  26. elif val.isdecimal():
  27. self._items.append({"var":var.strip() ,"val": float(val) })
  28. count+=1
  29. elif val.startswith('"') and val.endswith('"'):
  30. self._items.append({"var":var.strip() ,"val": val[1:-1] })
  31. count+=1
  32. elif val.startswith('{') and val.endswith('}'):
  33. self._items.append({"var":var.strip() ,"val": json.loads(val[1:-1]) })
  34. count+=1
  35. elif val.startswith('[') and val.endswith(']'):
  36. self._items.append({"var":var.strip() ,"val": json.loads(val[1:-1]) })
  37. count+=1
  38. except:
  39. print("Failed to load texts from file")
  40. self._count = count
  41. return self._items
  42. def Save(self):
  43. tmp=""
  44. keysStored=[]
  45. try:
  46. with open(self._file,"r") as f:
  47. for line in f:
  48. bWritte=False
  49. if line !="" and " " in line and line.startswith("#")==False and line.startswith(";")==False:
  50. #var, val = line.split(" ",2);
  51. var, val = self._getKeyValueFromLine(line)
  52. val2 = self.getValue(var)
  53. if val2 is int or val2 is float or isinstance(val2, int) or isinstance(val2, float) or val2.isnumeric() or val2.isdecimal():
  54. tmp+=var+" "+str(val2)+"\n"
  55. keysStored.append(var)
  56. bWritte=True
  57. elif val2 is str or isinstance(val2, str):
  58. tmp+=var+' "'+val2+'"' + "\n"
  59. keysStored.append(var)
  60. bWritte=True
  61. elif val2 is dict or val2 is list or isinstance(val2, dict) or isinstance(val2, list):
  62. tmp+=var+" "+json.dumps(val2)+"\n"
  63. keysStored.append(var)
  64. bWritte=True
  65. if bWritte==False:
  66. tmp+=line
  67. except:
  68. print("Failed to load texts from file for saving")
  69. if os.path.isfile(self._file):
  70. os.remove(self._file)
  71. with open(self._file, 'w') as f:
  72. f.write(tmp)
  73. for i in range(0,self._count):
  74. if self._items[i]["var"] in keysStored == False:
  75. f.write("\n"+self._items[i]["var"]+" " + self._items[i]["val"])
  76. def __getitem__(self,key):
  77. return self.getValue(key)
  78. def getValue(self,key):
  79. if self._count==0:
  80. return None
  81. if key is int or isinstance(key, int):
  82. return self._items[key]
  83. else:
  84. for i in range(0,self._count):
  85. if(self._items[i]["var"]==key):
  86. return self._items[i]["val"]
  87. def getItems(self):
  88. return self._items
  89. def setValue(self, key, value=None):
  90. if key is dict or isinstance(key,dict):
  91. for k in key:
  92. self.setValue(k, key[k])
  93. elif key is list or isinstance(key, list):
  94. pass
  95. else:
  96. if key is int or isinstance(key, int):
  97. self._items[key] = value
  98. else:
  99. for i in range(0,self._count):
  100. if(self._items[i]["var"]==key):
  101. self._items[i]["val"]=value
  102. self._items.append({
  103. "var":str(key),
  104. "val":value
  105. })
  106. self._count+=1
  107. def _getKeyValueFromLine(self, s:str):
  108. s.strip()
  109. bInKey=True
  110. lpos=len(s)
  111. pos1 = s.find(" ")
  112. pos2 = s.find("\t")
  113. pos3 = s.find("\n")
  114. pos4 = s.find("\r")
  115. if(lpos>pos1 and pos1>0): lpos=pos1
  116. if(lpos>pos2 and pos2>0): lpos=pos2
  117. if(lpos>pos3 and pos3>0): lpos=pos3
  118. if(lpos>pos4 and pos4>0): lpos=pos4
  119. return s[0:lpos].strip(), s[lpos:]
  120. def __setitem__(self,key,value):
  121. if key is int or isinstance(key, int):
  122. self._items[key] = value
  123. else:
  124. for i in range(0,self._count):
  125. if(self._items[i]["var"]==key):
  126. self._items[i]["val"]=value
  127. self._items.append({
  128. "var":str(key),
  129. "val":value
  130. })
  131. self._count+=1
  132. @property
  133. def count(self):
  134. return self._count