#!/usr/bin/env python3 """ Control middleware """ import contextlib import shutil import pathlib import paramiko # type: ignore import pprint import edi_997_inbound import edi_944 import edi_947 import edi_846 import edi_867_to_table import edi_997_outbound import update_shandex_dashboard import edi_943 import unprocessed_files_report import import_867s THIS_DIRECTORY = pathlib.Path(__file__).parent X12_SHANDEX_OUTGOING = THIS_DIRECTORY / "outgoing" X12_SHANDEX_INCOMING = THIS_DIRECTORY / "incoming" def main(): """ Do it! """ #pick up files from Shandex retrieve_x12_edi_files_shandex() #report on anything not handled unprocessed_files_report.main() #process all EDIs that started with Shandex edi_997_inbound.main() edi_944.main() edi_947.main() edi_846.main() edi_867_to_table.main() import_867s.main() # process all EDIs that start with us edi_943.main() edi_997_outbound.main() #send them to Shandex send_x12_edi_files_shandex() #update dashboard - no longer needed now that it has been moved to the staging database 2024-08-20 #update_shandex_dashboard.main() #report on anything not handled unprocessed_files_report.main() SSH_DIRECTORY = THIS_DIRECTORY / "ssh" SSH_KNOWN_HOSTS_FILE = str(SSH_DIRECTORY / "known_hosts") SSH_KEY_FILENAME = str(SSH_DIRECTORY / "id_ed25519") SHANDEX_SFTP_HOST = "ftp.shandex.com" SHANDEX_SFTP_USERNAME = "Stash" SHANDEX_SFTP_PASSWORD = "ST@Pass2024$$" def send_x12_edi_files_shandex(): """ Connect to FTP & send files. """ with paramiko.SSHClient() as ssh_client: ssh_client.load_system_host_keys() ssh_client.load_host_keys(SSH_KNOWN_HOSTS_FILE) ssh_client.set_missing_host_key_policy(paramiko.client.RejectPolicy) ssh_client.connect( hostname=SHANDEX_SFTP_HOST, username=SHANDEX_SFTP_USERNAME, password=SHANDEX_SFTP_PASSWORD ) with ssh_client.open_sftp() as sftp_connection: sftp_connection.chdir("/Stash/Prod/ToShandex") for filename in X12_SHANDEX_OUTGOING.glob("*.edi"): sftp_connection.put(filename, str(filename.name)) shutil.move(filename, X12_SHANDEX_OUTGOING / "archive" / filename.name) def retrieve_x12_edi_files_shandex(): with paramiko.SSHClient() as ssh_client: ssh_client.load_system_host_keys() ssh_client.load_host_keys(SSH_KNOWN_HOSTS_FILE) ssh_client.set_missing_host_key_policy(paramiko.client.RejectPolicy) ssh_client.connect( hostname=SHANDEX_SFTP_HOST, username=SHANDEX_SFTP_USERNAME, password=SHANDEX_SFTP_PASSWORD ) with ssh_client.open_sftp() as sftp_connection: sftp_connection.chdir("/Stash/Prod/FromShandex") for filename in sftp_connection.listdir(): if filename.endswith(".edi"): sftp_connection.get(filename, X12_SHANDEX_INCOMING / filename) new_filename = f"/Stash/Archive/{filename}" sftp_connection.rename(filename, new_filename) if __name__ == "__main__": main()