from vector_utils.connections.ftp import FtpConnection from vector_utils.connections.gcs import GCSConnection from vector_utils.connections.sftp import SftpConnection from vector_utils.connections.s3 import S3Connection class Transporter: """Transporter class calls connection specific class.""" def __init__(self, conn_obj, logger=None): """Init. Args: conn_obj (ConnectionInfo): Takes a connection info class object. """ self.connection = None connection_classes = { 'ftp': FtpConnection, 'gcs': GCSConnection, 'sftp': SftpConnection, 's3': S3Connection, 'plusmusic': SftpConnection } self._setup_connection( connection_classes.get(conn_obj.connection_type), conn_obj, logger) def _setup_connection(self, connection_class, conn_obj, logger): """Setup connection property and validate.""" if not connection_class: raise Exception( '{} is not supported.'.format(conn_obj.connection_type)) if getattr(connection_class, 'logger', None): self.connection = connection_class(conn_obj, logger) else: self.connection = connection_class(conn_obj) def can_connect(self): """Ensure we can connect and login.""" self.check_connection() self.login() def __getattr__(self, item): """Dynamically call attrs.""" return getattr(self.connection, item)