nasa_workflow.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import json
  2. import logging
  3. from datetime import datetime
  4. from pathlib import Path
  5. from cryptography.fernet import Fernet
  6. from nasa_archive import archive_files
  7. from nasa_export import load_data
  8. from nasa_upload import submit_changes
  9. logging.basicConfig(filename="logs/nasa.log", level=logging.INFO)
  10. logger = logging.getLogger("nasa")
  11. def get_config():
  12. fernet_key = b"YBckeKYt-8g7LFvpG7XqAAcEbsYESnI-yl8by9rjeQQ="
  13. fernet = Fernet(fernet_key)
  14. if Path("config/nasa_config.json").exists():
  15. with open("config/nasa_config.json", "r") as f:
  16. config = json.load(f)
  17. with open("config/nasa_config.crypt", "wb") as f:
  18. f.write(fernet.encrypt(json.dumps(config).encode()))
  19. else:
  20. with open("config/nasa_config.crypt", "rb") as f:
  21. config = json.loads(fernet.decrypt(f.read()).decode())
  22. if Path("config/nasa_config.bak").exists():
  23. Path("config/nasa_config.bak").unlink()
  24. with open("config/nasa_config.json", "w") as f:
  25. json.dump(config, f, indent=2)
  26. return config
  27. def export_all_periods(config) -> None:
  28. dt = datetime.now()
  29. prev = str(dt.year - 1)
  30. periods = [f"{prev}{x:02}" for x in range(1, 13)] + [f"{dt.year}{x:02}" for x in range(1, dt.month)]
  31. for period in periods:
  32. print(" Periode: " + period)
  33. payload = load_data(config, "database", period)
  34. json.dump(
  35. payload,
  36. open(f"{config['export_dir']}/temp/NASA_{config['client_id']}_{period}_{config['timestamp']}.json", "w"),
  37. indent=2,
  38. )
  39. def main():
  40. config = get_config()
  41. dt = datetime.now()
  42. config["timestamp"] = dt.strftime("%Y%m%d_%H%M%S")
  43. print("Start: " + dt.strftime("%d.%m.%Y %H:%M:%S"))
  44. config["export_dir"] = str(Path.cwd() / "export" / "NASA")
  45. print("Export")
  46. export_all_periods(config)
  47. print("Archivierung")
  48. archive_files(config["export_dir"])
  49. print("Upload")
  50. submit_changes(config)
  51. if __name__ == "__main__":
  52. main()