import os import os.path import datetime from ftplib import FTP import gnupg import config import sys import re if os.name =='nt': root = "//WDsentinel/share/Daily" elif os.name == 'posix': root = '/home/share/Daily' def get_ped(s): regex = re.search("PED=(.+?)\.", s) if regex: PED = datetime.datetime.strptime(regex.group(1), "%Y-%m-%d").date() else: regex = re.search("(.+?)\.", s) PED = datetime.datetime.strptime(regex.group(1), "%Y%m%d").date() - \ datetime.timedelta(1) return PED def key_fun(s): PED = get_ped(s) regex = re.search("KD=(.+?)\.", s) if regex: KD = datetime.datetime.strptime(regex.group(1), "%Y-%m-%d-%H-%M-%S") else: regex = re.search("(.+?\..+?)\.", s) KD = datetime.datetime.strptime(regex.group(1), "%Y%m%d.%H%M%S") return (PED, KD) def download_data(workdate): ftp = FTP('ftp.globeop.com') ftp.login('srntsftp', config.ftp_password) ftp.cwd('outgoing') files = ftp.nlst() pnlfiles = [filename for filename in files if "csv" in filename and \ "Profit" in filename if get_ped(filename) < workdate] valuationfiles = [filename for filename in files if "csv" in filename and \ "Valuation" in filename if get_ped(filename) < workdate] pnlfile = sorted(pnlfiles, key=key_fun, reverse=True)[0] valuationfile = sorted(valuationfiles, key=key_fun, reverse=True)[0] if pnlfile: if not os.path.exists(os.path.join(root, str(workdate), "Reports")): os.makedirs(os.path.join(root, str(workdate), "Reports")) for filename in [pnlfile, valuationfile]: with open(os.path.join(root, str(workdate), "Reports", filename), "wb") as fh: ftp.retrbinary('RETR ' + filename, fh.write) print("downloaded {0}".format(filename)) if os.name=='nt': gpg = gnupg.GPG(gpgbinary = r'"c:\\Program Files (x86)\\GNU\\GnuPG\\gpg2.exe"', gnupghome = os.path.join(os.getenv('APPDATA'), "gnupg")) elif os.name == 'posix': gpg = gnupg.GPG(gnupghome = os.path.join(os.getenv('HOME'), '.gnupg')) gpg.encoding = 'utf8' for filename in [pnlfile, valuationfile]: if "Profit" in filename: newfilename = "Pnl.csv" else: newfilename = "Valuation_Report.csv" with open(os.path.join(root, str(workdate), "Reports", filename), "rb") as fh: gpg.decrypt_file(fh, output = os.path.join(root, str(workdate), "Reports", newfilename), passphrase=config.key_password) os.remove(os.path.join(root, str(workdate), "Reports", filename)) if __name__=="__main__": if len(sys.argv) > 1: workdate = datetime.datetime.strptime(sys.argv[1], "%Y-%m-%d").date() else: workdate = datetime.date.today() download_data(workdate)