nasa_workflow.py 1.8 KB

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