ees_network_drive/network_drive_client.py (30 lines of code) (raw):
#
# Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
# or more contributor license agreements. Licensed under the Elastic License 2.0;
# you may not use this file except in compliance with the Elastic License 2.0.
#
"""network_drive_client allows to call Network Drives and returns a connection object
that can be used to fetch files from Network Drives.
"""
from smb.base import NotConnectedError, SMBTimeout
from smb.SMBConnection import SMBConnection
from .utils import retry
USE_NTLM_V2 = True
IS_DIRECT_TCP = True
SERVER_PORT = 445
class NetworkDrive:
"""Creates an SMB connection object to the Network Drives and returns the object
"""
def __init__(self, config, logger):
self.logger = logger
self.client_machine_name = config.get_value("client_machine.name")
self.server_name = config.get_value("network_drive.server_name")
self.server_ip = config.get_value("network_drive.server_ip")
self.domain = config.get_value("network_drive.domain")
self.username = config.get_value("network_drive.username")
self.password = config.get_value("network_drive.password")
self.retry_count = int(config.get_value("retry_count"))
@retry(exception_list=(NotConnectedError, SMBTimeout))
def connect(self):
"""This method is used to connect with Network Drives.
"""
smb_connection = SMBConnection(self.username, self.password, self.client_machine_name, self.server_name,
self.domain, use_ntlm_v2=USE_NTLM_V2, is_direct_tcp=IS_DIRECT_TCP)
try:
response = smb_connection.connect(self.server_ip, SERVER_PORT)
if response:
return smb_connection
except (NotConnectedError, SMBTimeout) as exception:
raise exception
except Exception as exception:
self.logger.exception(
f"Unknown error while connecting to Network Drives. Error: {exception}"
)