15
15
Union ,
16
16
)
17
17
18
+ from scrapli .exceptions import ScrapliTransportPluginError
18
19
from scrapli .response import Response
19
20
20
21
from .base import BaseWattBox , Commands , Outlet , _async_create_wattbox , _create_wattbox
@@ -100,6 +101,10 @@ class UpdateBaseResponses(NamedTuple):
100
101
_Responses = TypeVar ("_Responses" , bound = Union [InitialResponses , UpdateBaseResponses ])
101
102
102
103
104
+ class DriverUnavailableError (Exception ):
105
+ pass
106
+
107
+
103
108
class IpWattBox (BaseWattBox ):
104
109
def __init__ (
105
110
self ,
@@ -129,18 +134,26 @@ def __init__(
129
134
else :
130
135
raise ValueError ("Non Standard Port, Transport must be set." )
131
136
132
- self .driver = WattBoxDriver (
133
- ** conninfo ,
134
- transport = "ssh2" if transport == "ssh" else "telnet" ,
135
- )
136
- self .async_driver = WattBoxAsyncDriver (
137
- ** conninfo ,
138
- transport = "asyncssh" if transport == "ssh" else "asynctelnet" ,
139
- )
137
+ try :
138
+ self .driver : Optional [WattBoxDriver ] = WattBoxDriver (
139
+ ** conninfo ,
140
+ transport = "ssh2" if transport == "ssh" else "telnet" ,
141
+ )
142
+ except ScrapliTransportPluginError :
143
+ self .driver = None
144
+ try :
145
+ self .async_driver : Optional [WattBoxAsyncDriver ] = WattBoxAsyncDriver (
146
+ ** conninfo ,
147
+ transport = "asyncssh" if transport == "ssh" else "asynctelnet" ,
148
+ )
149
+ except ScrapliTransportPluginError :
150
+ self .async_driver = None
140
151
141
152
def send_requests (
142
153
self , requests : Iterable [Union [REQUEST_MESSAGES , str ]]
143
154
) -> List [Response ]:
155
+ if not self .driver :
156
+ raise DriverUnavailableError
144
157
responses : List [Response ] = []
145
158
for request in requests :
146
159
responses .append (
@@ -153,6 +166,8 @@ def send_requests(
153
166
async def async_send_requests (
154
167
self , requests : Iterable [Union [REQUEST_MESSAGES , str ]]
155
168
) -> List [Response ]:
169
+ if not self .async_driver :
170
+ raise DriverUnavailableError
156
171
responses : List [Response ] = []
157
172
for request in requests :
158
173
responses .append (
@@ -266,6 +281,8 @@ async def async_update(self) -> None:
266
281
267
282
def send_command (self , outlet : int , command : Commands ) -> None :
268
283
logger .debug ("Send Command" )
284
+ if not self .driver :
285
+ raise DriverUnavailableError
269
286
self .driver ._send_command (
270
287
CONTROL_MESSAGES .OUTLET_SET .value .format (
271
288
outlet = outlet , action = command .name , delay = 0
@@ -275,6 +292,8 @@ def send_command(self, outlet: int, command: Commands) -> None:
275
292
276
293
async def async_send_command (self , outlet : int , command : Commands ) -> None :
277
294
logger .debug ("Async Send Command" )
295
+ if not self .async_driver :
296
+ raise DriverUnavailableError
278
297
await self .async_driver ._send_command (
279
298
CONTROL_MESSAGES .OUTLET_SET .value .format (
280
299
outlet = outlet , action = command .name , delay = 0
0 commit comments