remote_ingest_compose.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import os
  2. import paramiko
  3. import dotenv
  4. repo_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  5. dotenv.load_dotenv(dotenv_path=os.path.join(repo_root, ".env"))
  6. host = os.environ.get('SERVER_HOST')
  7. user = os.environ.get('SERVER_USER')
  8. password = os.environ.get('SERVER_PASS')
  9. if password == "your_db_password_here" or not password:
  10. password = None
  11. ssh = paramiko.SSHClient()
  12. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  13. try:
  14. ssh.connect(host, username=user, password=password, timeout=10)
  15. print("SSH Connected!")
  16. # Run ingestion using docker-compose run to mount data/
  17. print("Running ingest via docker-compose...")
  18. cmd = "cd food_project && docker-compose run --rm -e PYTHONIOENCODING=utf-8 ingest python -X utf8 /app/ingest_csv.py"
  19. stdin, stdout, stderr = ssh.exec_command(cmd)
  20. # Capture outputs
  21. out_ing = stdout.read().decode('utf-8', errors='ignore')
  22. err_ing = stderr.read().decode('utf-8', errors='ignore')
  23. # Print safely
  24. print("STDOUT:\n", out_ing.encode('ascii', 'replace').decode('ascii'))
  25. print("STDERR:\n", err_ing.encode('ascii', 'replace').decode('ascii'))
  26. except Exception as e:
  27. print(f"Error: {e}")
  28. finally:
  29. ssh.close()