run-log.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. #!/usr/bin/python3
  2. import sqlite3
  3. import json
  4. import sys
  5. def readData():
  6. try:
  7. print(sys.argv[1])
  8. data = json.loads(sys.argv[1])
  9. return data
  10. except Exception as e:
  11. print("Error parsng data: " + str(e))
  12. raise
  13. """
  14. Opens the database file and deletes from the user tables
  15. :param name: The path to the sqlite database.
  16. :returns: Connection to the database.
  17. :raises IntegrityError: The queryes couldn't bre executed.
  18. :raises IOError: The sqlite file couldn't be created.
  19. """
  20. def openDatabase(name):
  21. print('Configuring database...')
  22. try:
  23. db = sqlite3.connect(name)
  24. return db
  25. except IOError as e:
  26. print("I/O Error connecting to database " + name + ": " + str(e))
  27. raise
  28. """
  29. Inserts a row into the database.
  30. :param db: Connection to the database.
  31. :param table: Name of the table to insert into.
  32. :param values: List of values to insert.
  33. :raises IntegrityError: The insert query was unsuccesfull.
  34. """
  35. def insert(db, table, values):
  36. cursor = db.cursor()
  37. placeholders = ''
  38. for x in range(0, len(values)):
  39. placeholders = placeholders + '?, '
  40. placeholders = placeholders[:len(placeholders) - 2]
  41. query = 'INSERT INTO ' + table + ' VALUES (' + placeholders + ')'
  42. try:
  43. cursor.execute(query, values)
  44. except sqlite3.IntegrityError as e:
  45. print('Error Inserting into ' + table + ' with values (' + str(values) + '): ' + str(e))
  46. raise
  47. cursor.close;
  48. """
  49. Parses run data (tables run, run_party, run_drop_rune, run_drop_runecraft,
  50. run_drop_item, run_drop_unit, run_drop_sd, run_drop_unit_pieces,
  51. run_drop_shapeshifting).
  52. :param db: Sqlite database connection.
  53. :param data: JSON data.
  54. """
  55. def parseRun(db, data):
  56. print("Parsing run...")
  57. cursor = db.cursor()
  58. uid = data["uid"]
  59. dtime = data["dtime"]
  60. # Check if run has already been inserted.
  61. cursor.execute("SELECT count(id) AS c FROM run WHERE uid = ? AND dtime = ?;", (uid, dtime))
  62. if (cursor.fetchone()[0] > 0):
  63. print(" Run already in database. Stopping....")
  64. return;
  65. area = data["area"]
  66. stage = data["stage"]
  67. difficulty = data["difficulty"]
  68. win = data["win"]
  69. time = data["time"]
  70. mana = data["mana"]
  71. energy = data["energy"]
  72. crystal = data["crystal"]
  73. helper = data["helper"]
  74. cursor.execute("SELECT max(id) + 1 AS id FROM run;")
  75. id = cursor.fetchone()[0]
  76. insert(db, "run", (uid, id, dtime, area, stage, difficulty, win, time, mana, energy, crystal, helper))
  77. if data["shapeshifting"] > 0:
  78. insert(db, "run_drop_shapeshifting", (id, data["shapeshifting"]))
  79. if data["sd"] > 0:
  80. insert(db, "run_drop_sd", (id, data["sd"]))
  81. if data["sd"] > 0:
  82. insert(db, "run_drop_unit", (id, data["unit"]))
  83. for rune in data["rune"]:
  84. rune_id = rune["id"]
  85. rune_type = rune["type"]
  86. slot = rune["slot"]
  87. stars = rune["stars"]
  88. ancient = rune["ancient"]
  89. quality = rune["quality"]
  90. value = rune["value"]
  91. efficiency = rune["efficiency"]
  92. main_stat = rune["main_stat"]
  93. main_stat_value = rune["main_stat_value"]
  94. innate_stat = rune["innate_stat"]
  95. innate_stat_value = rune["innate_stat_value"]
  96. substat_1 = rune["substat_1"]
  97. substat_1_value = rune["substat_1_value"]
  98. substat_2 = rune["substat_2"]
  99. substat_2_value = rune["substat_2_value"]
  100. substat_3 = rune["substat_3"]
  101. substat_3_value = rune["substat_3_value"]
  102. substat_4 = rune["substat_4"]
  103. substat_4_value = rune["substat_4_value"]
  104. insert(db, "run_drop_rune", (id, rune_id, rune_type, slot, stars, ancient, quality, value, efficiency, main_stat, main_stat_value, innate_stat, innate_stat_value, substat_1, substat_1_value, substat_2, substat_2_value, substat_3, substat_3_value, substat_4, substat_4_value))
  105. for item in data["item"]:
  106. item_id = item["id"]
  107. quantity = item["quantity"]
  108. insert(db, "run_drop_item", (id, item_id, quantity))
  109. for pieces in data["unit_pieces"]:
  110. pieces_id = pieces["id"]
  111. quantity = pieces["quantity"]
  112. insert(db, "run_drop_unit_pieces", (id, pieces_id, quantity))
  113. for party in data["party"]:
  114. unit_id = party["unit_id"]
  115. unit_master_id = party["unit_master_id"]
  116. insert(db, "run_party", (id, unit_master_id, unit_id))
  117. db.commit()
  118. """
  119. Begin script
  120. """
  121. data = readData()
  122. # Path relative to the PHP script, not this one.
  123. db = openDatabase('../../../../application/sw.sqlite')
  124. parseRun(db, data)