def __init__(self, destination, username=None, password=None, poll_time=30): self.destination = destination self.poll_time = poll_time if self.is_local and not os.path.exists(destination): os.makedirs(destination) if not self.is_local: self.ftp_handler = FTPHandler(self.hostname, self.destination_directory, username, password)
class FileTransferHandler: def __init__(self, destination, username=None, password=None, poll_time=30): self.destination = destination self.poll_time = poll_time if self.is_local and not os.path.exists(destination): os.makedirs(destination) if not self.is_local: self.ftp_handler = FTPHandler(self.hostname, self.destination_directory, username, password) @staticmethod def remove_file(source_file): os.remove(source_file) @property def is_local(self): if '@' in self.destination: return False else: return True @property def hostname(self): if self.is_local: return 'localhost' else: return self.destination.split('@')[0] @property def destination_directory(self): if self.is_local: destination_directory = self.destination else: destination_directory = self.destination.split('@')[1] if not destination_directory.endswith('/'): destination_directory += '/' return destination_directory def transfer(self, source_file): if not self.file_is_ready(source_file): print '[Skipping] Still Being Written: {0}'.format(os.path.basename(source_file)) return print '[Transferring] {0}'.format(os.path.basename(source_file)) if self.is_local: self.local_transfer(source_file) else: self.remote_transfer(source_file) print '[Removing] {0}'.format(os.path.basename(source_file)) self.remove_file(source_file) def file_is_ready(self, source_file): initial_size = os.stat(source_file).st_size time.sleep(self.poll_time) post_size = os.stat(source_file).st_size if initial_size == post_size: return True else: return False def local_transfer(self, source_file): filename = os.path.basename(source_file) os.rename(source_file, '{0}{1}'.format(self.destination_directory, filename)) def remote_transfer(self, source_file): self.ftp_handler.transfer_file(source_file)