44from pydantic import TypeAdapter
55
66from .api import (
7+ PORT ,
78 DeviceRequest ,
89 DeviceResponse ,
910 ErrorResponse ,
1011 ListRequest ,
1112 ListResponse ,
13+ attach_command ,
14+ detach_command ,
15+ find_command ,
1216)
1317from .config import get_timeout
1418from .port import Port
2428def send_request (
2529 request : ListRequest | DeviceRequest ,
2630 server_host : str = "localhost" ,
27- server_port : int = 5055 ,
31+ server_port : int = PORT ,
2832 timeout : float | None = None ,
2933) -> ListResponse | DeviceResponse :
3034 """
@@ -89,7 +93,6 @@ def send_request(
8993
9094def list_devices (
9195 server_hosts : list [str ],
92- server_port : int = 5055 ,
9396 timeout : float | None = None ,
9497) -> dict [str , list [UsbDevice ]]:
9598 """
@@ -112,7 +115,7 @@ def list_devices(
112115 for server in server_hosts :
113116 try :
114117 request = ListRequest ()
115- response = send_request (request , server , server_port , timeout = timeout )
118+ response = send_request (request , server , timeout = timeout )
116119 assert isinstance (response , ListResponse )
117120 results [server ] = response .data
118121 logger .debug (f"Server { server } : { len (response .data )} devices" )
@@ -148,7 +151,6 @@ def attach_device(bus_id: str, server_host: str) -> None:
148151 Args:
149152 bus_id: The bus ID of the device to attach
150153 server_host: Server hostname or IP address
151- server_port: Server port number
152154 timeout: Connection timeout in seconds. If None, uses configured timeout.
153155 """
154156
@@ -159,7 +161,7 @@ def attach_device(bus_id: str, server_host: str) -> None:
159161
160162 logger .debug (f"Asking remote { server_host } to bind { bus_id } to usbip" )
161163 request = DeviceRequest (
162- command = "attach" ,
164+ command = attach_command ,
163165 bus = bus_id ,
164166 )
165167 send_request (request , server_host )
@@ -186,14 +188,13 @@ def detach_device(bus_id: str, server_host: str) -> None:
186188 Args:
187189 bus_id: The bus ID of the device to detach
188190 server_host: Server hostname or IP address
189- server_port: Server port number
190191 timeout: Connection timeout in seconds. If None, uses configured timeout.
191192 """
192193 detach_local_device (bus_id , server_host )
193194
194195 logger .debug (f"Asking remote { server_host } to unbind { bus_id } from usbip" )
195196 request = DeviceRequest (
196- command = "detach" ,
197+ command = detach_command ,
197198 bus = bus_id ,
198199 )
199200 send_request (request , server_host )
@@ -219,7 +220,6 @@ def find_device(
219220 Args:
220221 args: AttachRequest with device search criteria
221222 server_hosts: list of server hostnames/IPs
222- server_port: Server port number
223223 timeout: Connection timeout in seconds. If None, uses configured timeout.
224224
225225 Returns:
@@ -235,7 +235,7 @@ def find_device(
235235 )
236236
237237 request = DeviceRequest (
238- command = "find" ,
238+ command = find_command ,
239239 id = id ,
240240 bus = bus ,
241241 desc = desc ,
@@ -258,26 +258,25 @@ def find_device(
258258 continue
259259 except MultipleDevicesError as e :
260260 # Multiple matches on this server
261- logger .error (f"Error on Server { server } :\n { e } " )
262- exit (1 )
263- except RuntimeError as e :
264- # Server returned a generic error
265- logger .error (f"Server { server } error: { e } " )
261+ raise RuntimeError (f"Server { server } :\n { e } " ) from e
262+ except Exception as e :
263+ # Server returned a generic error - continue to next server
264+ logger .error (f"Server { server } :\n { e } " )
266265 continue
267266
268267 if len (matches ) == 0 :
269268 msg = f"No matching device found across { len (server_hosts )} servers"
270- logger .error (msg )
269+ logger .debug (msg , exc_info = True )
271270 raise DeviceNotFoundError (msg )
272271
273272 if len (matches ) > 1 and not request .first :
274273 device_list = "\n " .join (f" { dev } (on { srv } )" for dev , srv in matches )
275274 msg = (
276275 f"Multiple devices matched across servers:\n { device_list } \n \n "
277- "Use --first to attach the first match."
276+ "Use --first to attach to the first match."
278277 )
279- logger .error (msg )
280- exit ( 1 )
278+ logger .debug (msg , exc_info = True )
279+ raise MultipleDevicesError ( msg )
281280
282281 device , server = matches [0 ]
283282
0 commit comments