mirror of
https://github.com/Pardus-LiderAhenk/ahenk
synced 2024-11-22 09:42:15 +03:00
file transfer method was defined
This commit is contained in:
parent
ac99ea633e
commit
d6abe1a78f
3 changed files with 115 additions and 14 deletions
|
@ -0,0 +1,30 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Author: Volkan Şahin <volkansah.in> <bm.volkansahin@gmail.com>
|
||||||
|
|
||||||
|
from base.Scope import Scope
|
||||||
|
from base.file.ssh_file_transfer import Ssh
|
||||||
|
from base.file.http_file_transfer import Http
|
||||||
|
|
||||||
|
|
||||||
|
class FileTransferManager(object):
|
||||||
|
def __init__(self, protocol, parameter_map):
|
||||||
|
scope = Scope().getInstance()
|
||||||
|
self.logger = scope.getLogger()
|
||||||
|
self.configuration_manager = scope.getConfigurationManager()
|
||||||
|
self.transporter = self.get_instance(protocol, parameter_map)
|
||||||
|
|
||||||
|
def get_instance(self, protocol, parameter_map):
|
||||||
|
try:
|
||||||
|
transporter = None
|
||||||
|
if str(protocol).lower() == 'ssh':
|
||||||
|
transporter = Ssh(parameter_map)
|
||||||
|
elif str(protocol).lower() == 'http':
|
||||||
|
transporter = Http(parameter_map)
|
||||||
|
else:
|
||||||
|
raise Exception('Unsupported file transfer protocol: {}'.format(str(protocol)))
|
||||||
|
return transporter
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
self.logger.error('[FileTransferManager] A problem occurred while getting instance of related protocol. Error Message: {}'.format(str(e)))
|
||||||
|
return None
|
|
@ -0,0 +1,48 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Author: Volkan Şahin <volkansah.in> <bm.volkansahin@gmail.com>
|
||||||
|
from base.util.util import Util
|
||||||
|
from base.system.system import System
|
||||||
|
import urllib.request
|
||||||
|
|
||||||
|
from base.Scope import Scope
|
||||||
|
|
||||||
|
|
||||||
|
class Http(object):
|
||||||
|
def __init__(self, parameter_map):
|
||||||
|
|
||||||
|
scope = Scope().getInstance()
|
||||||
|
self.logger = scope.getLogger()
|
||||||
|
self.configuration_manager = scope.getConfigurationManager()
|
||||||
|
try:
|
||||||
|
self.url = parameter_map['url']
|
||||||
|
except Exception as e:
|
||||||
|
self.logger.error('[Http] A problem occurred while parsing parameter map. Error Message: {}'.format(str(e)))
|
||||||
|
|
||||||
|
def send_file(self, local_path, remote_path):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def get_file(self):
|
||||||
|
|
||||||
|
self.logger.debug('[FileTransfer] Getting file ...')
|
||||||
|
file_md5 = None
|
||||||
|
try:
|
||||||
|
tmp_file_name = str(Util.generate_uuid())
|
||||||
|
local_full_path = System.Ahenk.received_dir_path() + tmp_file_name
|
||||||
|
urllib.request.urlretrieve(self.url, 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.url))
|
||||||
|
except Exception as e:
|
||||||
|
self.logger.error('[FileTransfer] A problem occurred while downloading file. Exception message: {}'.format(str(e)))
|
||||||
|
raise
|
||||||
|
return file_md5
|
||||||
|
|
||||||
|
def disconnect(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def is_connected(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def connect(self):
|
||||||
|
pass
|
|
@ -2,24 +2,34 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Author: Volkan Şahin <volkansah.in> <bm.volkansahin@gmail.com>
|
# Author: Volkan Şahin <volkansah.in> <bm.volkansahin@gmail.com>
|
||||||
|
|
||||||
|
from base.util.util import Util
|
||||||
|
from base.system.system import System
|
||||||
from base.Scope import Scope
|
from base.Scope import Scope
|
||||||
import paramiko
|
import paramiko
|
||||||
|
|
||||||
|
|
||||||
class FileTransfer(object):
|
class Ssh(object):
|
||||||
def __init__(self, hostname, port, username, password, pkey=None):
|
def __init__(self, parameter_map):
|
||||||
|
|
||||||
scope = Scope().getInstance()
|
scope = Scope().getInstance()
|
||||||
self.logger = scope.getLogger()
|
self.logger = scope.getLogger()
|
||||||
self.configuration_manager = scope.getConfigurationManager()
|
self.configuration_manager = scope.getConfigurationManager()
|
||||||
|
|
||||||
self.target_hostname = hostname
|
try:
|
||||||
self.port = port
|
self.target_hostname = parameter_map['hostname']
|
||||||
self.target_username = username
|
self.port = parameter_map['port']
|
||||||
self.target_password = password
|
self.target_username = parameter_map['username']
|
||||||
self.p_key = pkey
|
self.target_path = parameter_map['path']
|
||||||
self.connection = None
|
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)))
|
||||||
|
|
||||||
|
self.connection = None
|
||||||
self.logger.debug('[FileTransfer] Parameters set up')
|
self.logger.debug('[FileTransfer] Parameters set up')
|
||||||
|
|
||||||
def send_file(self, local_path, remote_path):
|
def send_file(self, local_path, remote_path):
|
||||||
|
@ -35,18 +45,21 @@ class FileTransfer(object):
|
||||||
self.connection.close()
|
self.connection.close()
|
||||||
self.logger.debug('[FileTransfer] Connection is closed successfully')
|
self.logger.debug('[FileTransfer] Connection is closed successfully')
|
||||||
|
|
||||||
def get_file(self, local_path, remote_path):
|
def get_file(self):
|
||||||
self.logger.debug('[FileTransfer] Getting file ...')
|
self.logger.debug('[FileTransfer] Getting file ...')
|
||||||
|
file_md5 = None
|
||||||
try:
|
try:
|
||||||
|
tmp_file_name = str(Util.generate_uuid())
|
||||||
|
local_full_path = System.Ahenk.received_dir_path() + tmp_file_name
|
||||||
sftp = paramiko.SFTPClient.from_transport(self.connection)
|
sftp = paramiko.SFTPClient.from_transport(self.connection)
|
||||||
sftp.get(remote_path, local_path)
|
sftp.get(self.target_path, local_full_path)
|
||||||
self.logger.debug('[FileTransfer] File was downloaded to {} from {}'.format(local_path, remote_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))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.logger.error('[FileTransfer] A problem occurred while downloading file. Exception message: {}'.format(str(e)))
|
self.logger.error('[FileTransfer] A problem occurred while downloading file. Exception message: {}'.format(str(e)))
|
||||||
raise
|
raise
|
||||||
finally:
|
return file_md5
|
||||||
self.connection.close()
|
|
||||||
self.logger.debug('[FileTransfer] Connection is closed successfully')
|
|
||||||
|
|
||||||
def connect(self):
|
def connect(self):
|
||||||
self.logger.debug('[FileTransfer] Connecting to {} via {}'.format(self.target_hostname, self.port))
|
self.logger.debug('[FileTransfer] Connecting to {} via {}'.format(self.target_hostname, self.port))
|
||||||
|
@ -57,3 +70,13 @@ class FileTransfer(object):
|
||||||
self.logger.debug('[FileTransfer] Connected.')
|
self.logger.debug('[FileTransfer] Connected.')
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.logger.error('[FileTransfer] A problem occurred while connecting to {} . Exception message: {}'.format(self.target_hostname, str(e)))
|
self.logger.error('[FileTransfer] A problem occurred while connecting to {} . Exception message: {}'.format(self.target_hostname, str(e)))
|
||||||
|
|
||||||
|
def disconnect(self):
|
||||||
|
self.connection.close()
|
||||||
|
self.logger.debug('[FileTransfer] Connection is closed.')
|
||||||
|
# TODO
|
||||||
|
pass
|
||||||
|
|
||||||
|
def is_connected(self):
|
||||||
|
# TODO
|
||||||
|
pass
|
||||||
|
|
Loading…
Reference in a new issue