Ahenk/opt/ahenk/base/file/ssh_file_transfer.py

83 lines
3.4 KiB
Python
Raw Normal View History

2016-04-20 18:06:12 +03:00
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Author: Volkan Şahin <volkansah.in> <bm.volkansahin@gmail.com>
2016-06-29 12:41:31 +03:00
from base.util.util import Util
from base.system.system import System
2016-04-20 18:06:12 +03:00
from base.Scope import Scope
2016-05-06 16:36:50 +03:00
import paramiko
2016-04-20 18:06:12 +03:00
2016-06-29 12:41:31 +03:00
class Ssh(object):
def __init__(self, parameter_map):
2016-04-20 18:06:12 +03:00
scope = Scope().getInstance()
self.logger = scope.getLogger()
self.configuration_manager = scope.getConfigurationManager()
2016-06-29 12:41:31 +03:00
try:
self.target_hostname = parameter_map['hostname']
self.port = parameter_map['port']
self.target_username = parameter_map['username']
self.target_path = parameter_map['path']
self.target_password = None
self.p_key = None
if parameter_map['password'] is not None:
self.target_password = parameter_map['password']
else:
self.p_key = parameter_map['pkey']
except Exception as e:
self.logger.error('[Ssh] A problem occurred while parsing ssh connection parameters. Error Message: {}'.format(str(e)))
2016-04-20 18:06:12 +03:00
2016-06-29 12:41:31 +03:00
self.connection = None
2016-04-20 18:06:12 +03:00
self.logger.debug('[FileTransfer] Parameters set up')
def send_file(self, local_path, remote_path):
self.logger.debug('[FileTransfer] Sending file ...')
try:
sftp = paramiko.SFTPClient.from_transport(self.connection)
sftp.put(local_path, remote_path)
2016-05-06 16:36:50 +03:00
self.logger.debug('[FileTransfer] File was sent to {} from {}'.format(local_path, remote_path))
2016-04-20 18:06:12 +03:00
except Exception as e:
2016-05-06 16:36:50 +03:00
self.logger.error('[FileTransfer] A problem occurred while sending file. Exception message: {}'.format(str(e)))
2016-04-20 18:06:12 +03:00
finally:
self.connection.close()
self.logger.debug('[FileTransfer] Connection is closed successfully')
2016-06-29 12:41:31 +03:00
def get_file(self):
2016-04-20 18:06:12 +03:00
self.logger.debug('[FileTransfer] Getting file ...')
2016-06-29 12:41:31 +03:00
file_md5 = None
2016-04-20 18:06:12 +03:00
try:
2016-06-29 12:41:31 +03:00
tmp_file_name = str(Util.generate_uuid())
local_full_path = System.Ahenk.received_dir_path() + tmp_file_name
2016-04-20 18:06:12 +03:00
sftp = paramiko.SFTPClient.from_transport(self.connection)
2016-06-29 12:41:31 +03:00
sftp.get(self.target_path, local_full_path)
file_md5 = str(Util.get_md5_file(local_full_path))
Util.rename_file(local_full_path, System.Ahenk.received_dir_path() + file_md5)
self.logger.debug('[FileTransfer] File was downloaded to {0} from {1}'.format(local_full_path, self.target_path))
2016-04-20 18:06:12 +03:00
except Exception as e:
2016-05-06 16:36:50 +03:00
self.logger.error('[FileTransfer] A problem occurred while downloading file. Exception message: {}'.format(str(e)))
raise
2016-06-29 12:41:31 +03:00
return file_md5
2016-04-20 18:06:12 +03:00
def connect(self):
2016-05-06 16:36:50 +03:00
self.logger.debug('[FileTransfer] Connecting to {} via {}'.format(self.target_hostname, self.port))
2016-04-20 18:06:12 +03:00
try:
2016-05-06 16:36:50 +03:00
connection = paramiko.Transport((self.target_hostname, int(self.port)))
2016-04-20 18:06:12 +03:00
connection.connect(username=self.target_username, password=self.target_password, pkey=self.p_key)
self.connection = connection
self.logger.debug('[FileTransfer] Connected.')
except Exception as e:
2016-05-06 16:36:50 +03:00
self.logger.error('[FileTransfer] A problem occurred while connecting to {} . Exception message: {}'.format(self.target_hostname, str(e)))
2016-06-29 12:41:31 +03:00
def disconnect(self):
self.connection.close()
self.logger.debug('[FileTransfer] Connection is closed.')
# TODO
pass
def is_connected(self):
# TODO
pass