import ftplib from Modules.Ensembl.FTPHandling.FTPEntry import FTPEntry class FTPHandler: """ Class to browse through ftp folders and download entries to local file """ def __init__(self, url, wd): self.ftp = ftplib.FTP(url) self.ftp.login() self.ftp.cwd(wd) def change_dir(self, wd): self.ftp.cwd(wd) def get_all_entries(self): return self.ftp.nlst() def get_all_entries_from_dir(self, dire): self.change_dir(dire) return self.get_all_entries() def get_all_entries_as_FTPEntry(self): # Get All Files files = self.ftp.nlst() return [FTPEntry(item, self.ftp, self.ftp.pwd()) for item in files] def save_entries_to_file(self, origin, target): self.change_dir(origin) for file in self.get_all_entries_as_FTPEntry(): if file.gettype() == "f": # Download only Checksum & gff.gz files if file.getfilename() not in ["README", "manifest.tsv"]: print("Downloading....... > " + file.getfilename()) self.ftp.retrbinary("RETR " + file.getfilename(), open(target + "/" + file.getfilename(), 'wb').write)