file_io.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. from pathlib import Path
  2. from flask import request, Flask
  3. import json
  4. from flask_cors import CORS
  5. from datetime import datetime
  6. import hashlib
  7. import time
  8. app = Flask(__name__)
  9. # cors = CORS(app, resources={r"/*": {"origins": "http://localhost:4200/"}})
  10. CORS(app)
  11. script_dir = Path(__file__).parent
  12. save_dir = script_dir.joinpath('../save').resolve()
  13. # save_dir = Path('C:\\Projekte\\Python\\Planung\\save')
  14. @app.route('/list/', methods=['GET'])
  15. def list_json():
  16. return json.dumps(list_dict(), indent=2)
  17. def list_dict():
  18. result = {'list': [], 'tree': {}}
  19. for currentFile in save_dir.iterdir():
  20. if currentFile.is_file() and currentFile.name[-5:] == '.json':
  21. year, version, timestamp = currentFile.name[:-5].split("_")
  22. if year not in result['tree']:
  23. result['tree'][year] = {}
  24. if version not in result['tree'][year]:
  25. result['tree'][year][version] = []
  26. result['tree'][year][version].append(timestamp)
  27. result['list'].append({'year': year, 'version': version, 'timestamp': timestamp})
  28. return result
  29. @app.route('/load/<year>/<version>/<timestamp>', methods=['GET'])
  30. def load(year, version, timestamp):
  31. file = full_filename(year, version, timestamp)
  32. if not Path(file).exists():
  33. file_list = list_dict()
  34. timestamp = file_list['tree'][year][version][-1]
  35. file = full_filename(year, version, timestamp)
  36. print(file)
  37. time.sleep(2)
  38. return open(file, 'r').read()
  39. def full_filename(year, version, timestamp):
  40. return f'{str(save_dir)}/{year}_{version}_{timestamp}.json'
  41. @app.route('/load/<filename>', methods=['GET'])
  42. def load_file(filename):
  43. full_filename = f'{str(save_dir)}/{filename}.json'
  44. if not Path(full_filename).exists():
  45. file_list = list_dict()
  46. timestamp = file_list[filename][-1]
  47. full_filename = f'{full_filename[:-5]}_{timestamp}.json'
  48. print(full_filename)
  49. return open(full_filename, 'r').read()
  50. @app.route('/save/<filename>', methods=['POST'])
  51. def save(filename):
  52. if request.method != 'POST':
  53. return 'File is missing!'
  54. new_filename = str(save_dir) + '/' + filename + '_' + datetime.now().strftime('%Y%m%d%H%M%S') + '.json'
  55. data = request.get_json()['data']
  56. json.dump(data, open(new_filename, 'w'), indent=2)
  57. print(new_filename)
  58. try:
  59. file_list = list_dict()
  60. timestamp = file_list[filename][-2]
  61. old_filename = str(save_dir) + '/' + filename + "_" + timestamp + '.json'
  62. if old_filename != new_filename and hash(old_filename) == hash(new_filename):
  63. Path(old_filename).unlink()
  64. return 'File saved with no changes!'
  65. except KeyError:
  66. pass
  67. return 'File saved with new data!'
  68. def hash(filename):
  69. BUF_SIZE = 65536
  70. sha1 = hashlib.sha1()
  71. with open(filename, 'rb') as g:
  72. while True:
  73. hashdata = g.read(BUF_SIZE)
  74. if not hashdata:
  75. break
  76. sha1.update(hashdata)
  77. return sha1.hexdigest()
  78. if __name__ == '__main__':
  79. app.run(host='0.0.0.0', port='8082')