Всем привет, прошу помощи, есть вот такой класс
import paramiko
import time
import subprocess
import telnetlib
class Base(object):
def __init__(self, args):
self.args = args
def __enter__(self):
self.con = self._connect()
return self.con
def __exit__(self, type, value, traceback):
self.con.close()
def run(self, *args, **kwargs):
raise NotImplementedError('Abstract method not implemented.')
def _connect(self, **kwargs):
raise NotImplementedError('Abstract method not implemented.')
class Paramiko(Base):
def __init__(self, args):
Base.__init__(self, args)
def _connect(self):
self.con = paramiko.SSHClient()
self.con.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self.con.connect(hostname=self.args.host, port=self.args.port, username=self.args.user, password=self.args.password)
return self.con
def _response(self, channel):
while not channel.recv_ready():
time.sleep(0.1)
stdout = ''
while channel.recv_ready():
stdout += channel.recv(1024)
return stdout
def _send_connect(self, cmd):
with Base(self.args) as connect:
channel = connect.invoke_shell()
self._response(channel)
channel.send(cmd+'\n')
return self._response(channel)
def run(self, cmd):
try:
return(self._send_connect(cmd))
except paramiko.ssh_exception.AuthenticationException as e:
return(e)
вызываю я его из другого класса вот так
Paramiko(args).run(cmd)
как видно у меня Base это базовый класс для Paramiko, подскажите пожалуйста как сделать так что бы когда я в базовом классе вызываю метод __enter__ у которого есть вызов self._connect() срабатывал метод _connect() из дочернего класса т.е. Paramiko, а если его там нет то выкидывать Abstract method not implemented. из базового.
Надеюсь понятно написал что мне нужно), спасибо