1- import socket
1+ import re
22import time
3+ from abc import ABCMeta , abstractmethod
34from collections import OrderedDict
45
5- from abc import ABCMeta
6+ from cloudshell .cli .helper .normalize_buffer import normalize_buffer
7+ from cloudshell .cli .session .session import Session
68from cloudshell .cli .session .session_exceptions import SessionLoopDetectorException , SessionLoopLimitException , \
79 ExpectedSessionException , CommandExecutionException , SessionReadTimeout , SessionReadEmptyData
8- import re
9- from cloudshell .cli .session .session import Session
10- from cloudshell .cli .helper .normalize_buffer import normalize_buffer
1110
1211
1312class ExpectSession (Session ):
@@ -60,6 +59,26 @@ def __init__(self, timeout=READ_TIMEOUT, new_line='\r', max_loop_retries=MAX_LOO
6059 def session_type (self ):
6160 return self .SESSION_TYPE
6261
62+ @abstractmethod
63+ def _connect_actions (self , prompt , logger ):
64+ """Read out buffer and run on_session_start actions
65+ :param prompt: expected string in output
66+ :param logger: logger
67+ """
68+
69+ pass
70+
71+ @abstractmethod
72+ def _initialize_session (self , prompt , logger ):
73+ """Create handler and initialize session
74+ :param prompt: expected string in output
75+ :param logger: logger
76+ """
77+ pass
78+
79+ def set_active (self , state ):
80+ self ._active = state
81+
6382 def active (self ):
6483 return self ._active
6584
@@ -82,6 +101,20 @@ def _clear_buffer(self, timeout, logger):
82101 break
83102 return out
84103
104+ def connect (self , prompt , logger ):
105+ """Connect to device.
106+ :param prompt: expected string in output
107+ :param logger: logger
108+ """
109+
110+ try :
111+ self ._initialize_session (prompt , logger )
112+ self ._connect_actions (prompt , logger )
113+ self .set_active (True )
114+ except :
115+ self .disconnect ()
116+ raise
117+
85118 def send_line (self , command , logger ):
86119 """
87120 Add new line to the end of command string and send
@@ -112,6 +145,9 @@ def _receive_all(self, timeout, logger):
112145 elif time .time () - start_time > timeout :
113146 raise ExpectedSessionException (self .__class__ .__name__ , 'Socket closed by timeout' )
114147
148+ def probe_for_prompt (self , expected_string , logger ):
149+ return self .hardware_expect ('' , expected_string , logger )
150+
115151 def hardware_expect (self , command , expected_string , logger , action_map = None , error_map = None ,
116152 timeout = None , retries = None , check_action_loop_detector = True , empty_loop_timeout = None ,
117153 remove_command_from_output = True , ** optional_args ):
@@ -170,7 +206,7 @@ def hardware_expect(self, command, expected_string, logger, action_map=None, err
170206
171207 if read_buffer :
172208 read_buffer = normalize_buffer (read_buffer )
173- logger .info (read_buffer )
209+ logger .debug (read_buffer )
174210 output_str += read_buffer
175211 # if option remove_command_from_output is set to True, look for command in output buffer,
176212 # remove it in case of found
0 commit comments