create_db.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. #!/usr/bin/python
  2. import sqlite3, re, sys, glob
  3. from problems import *
  4. from queries import *
  5. class ProgressBar:
  6. def __init__(self, Max):
  7. self.Max = Max
  8. self.percent = 0
  9. self.i = 0
  10. print '['+' '*100+'] 0%\r',
  11. sys.stdout.flush()
  12. def inc(self):
  13. self.i += 1
  14. #p = ((self.i)/float(self.Max))*100
  15. p = divmod(self.i*100,self.Max)
  16. if p[0] != self.percent:
  17. self.percent = p[0]
  18. print '['+'#'*int(p[0])+' '*(100-int(p[0]))+'] '+str(p[0])+'%\r',
  19. sys.stdout.flush()
  20. def get_point_id(x, y, z):
  21. c = db.cursor()
  22. c.execute(get_point_query % ("points",x,y,z))
  23. res = c.fetchone()
  24. if not res:
  25. c.execute(insert_point_query % ("points", x,y,z))
  26. res = c.lastrowid
  27. else:
  28. res = res[0]
  29. return res
  30. def check_defect_point(x,y,z,d):
  31. if d == 0:
  32. return False
  33. c = db.cursor()
  34. c.execute(get_point_query % ("defect",x,y,z))
  35. res = c.fetchone()
  36. return False if not res else True
  37. def check_key(p, s, d, f, point_id):
  38. c = db.cursor()
  39. c.execute(check_key_query % (p,s,d,f,point_id))
  40. res = c.fetchone()
  41. return False if res[0] >= 1 else True
  42. def fill_defect_table(file_name):
  43. print "Fill defect %s" % file_name
  44. c = db.cursor()
  45. c.executescript(table_defect_script)
  46. with open(file_name,"r") as defect:
  47. lines = defect.readlines()
  48. l = len(lines)
  49. pb = ProgressBar(l)
  50. for i in xrange(l):
  51. s = lines[i]
  52. spl = s.split()
  53. if (len(spl) > 0) and (re.match('^N[0-9]+$',spl[0])):
  54. c.execute(get_point_query % ("defect",spl[1],spl[2],spl[3]))
  55. res = c.fetchone()
  56. if not res:
  57. c.execute(insert_point_query % ("defect", spl[1],spl[2],spl[3]))
  58. pb.inc()
  59. print "\nDone"
  60. def process_file(file_name, _p, _s, _d, _f, _def):
  61. with open(file_name, "r") as equi:
  62. lines = equi.readlines()
  63. l = len(lines)
  64. pb = ProgressBar(l)
  65. props_cur = db.cursor()
  66. fields = ""
  67. for i in xrange(l):
  68. s = lines[i]
  69. spl = s.split()
  70. if len(spl) > 0:
  71. if spl[0] == 'NOEUD':
  72. s1 = lines[i+1]
  73. spl1 = s1.split()
  74. keys = spl[1:]+spl1
  75. fields = ",".join(keys[3:])
  76. if re.match('^N[0-9]+$',spl[0]):
  77. s1 = lines[i+1]
  78. spl1 = s1.split()
  79. m = spl[1:] + spl1
  80. props = ",".join(m[3:])
  81. if not check_defect_point(m[0],m[1],m[2],_def):
  82. p_id = get_point_id(m[0],m[1],m[2])
  83. if check_key(_p,_s,_d,_f,p_id):
  84. query = insert_props_query % (fields,_p,_s,_d,_f,p_id,props)
  85. else:
  86. tf = fields.split(",")
  87. tp = ",".join(["=".join(x) for x in zip(tf,m[3:])])
  88. query = update_props_query % (tp,_p,_s,_d,_f,p_id)
  89. props_cur.execute(query)
  90. pb.inc()
  91. db.commit()
  92. def get_defect_fnames(folder):
  93. l = glob.glob(folder + "/defect*")
  94. return l
  95. def process_problem(problem, schema, defect, phase):
  96. print "Process problem %s with schema %s for defect %s and phase %s" % \
  97. (problem["description"],schema["folder"],defect["description"],phase["description"])
  98. l = get_defect_fnames("/".join((problem["folder"],schema["folder"],defect["folder"])))
  99. for i in l:
  100. if defect["append_matrix"] == 2 and phase["id"] == 0:
  101. print "Process defect file"
  102. process_file(i, problem["id"], schema["id"], defect["id"], phase["id"], defect["append_matrix"])
  103. else:
  104. fill_defect_table(i)
  105. print "\nProcess properties file"
  106. file_name = "/".join((problem["folder"],schema["folder"],defect["folder"],"SIGM_NOEU_DEPL_%s.resu" % phase["name"]))
  107. print file_name
  108. process_file(file_name, problem["id"], schema["id"], defect["id"], phase["id"], defect["append_matrix"])
  109. print "\nProcess another file"
  110. file_name = "/".join((problem["folder"],schema["folder"],defect["folder"],"EQUI_NOEU_SIGM_%s.resu" % phase["name"]))
  111. process_file(file_name, problem["id"], schema["id"], defect["id"], phase["id"], defect["append_matrix"])
  112. db.cursor().execute(drop_defect_script)
  113. print "\nDone"
  114. db = sqlite3.connect("problems.db")
  115. db.executescript(table_props_script)
  116. db.executescript(table_points_script)
  117. process_problem(problems[0], schemas[0], defects[2], phases[1])
  118. #for _problem in problems:
  119. #for _schema in _problem["schemas"]:
  120. #for _defect in defects:
  121. #for _phase in phases:
  122. #process_problem(_problem, schemas[_schema], _defect, _phase)