1313from jumpstarter_protocol import jumpstarter_pb2 , jumpstarter_pb2_grpc , router_pb2_grpc
1414
1515from jumpstarter .common import Metadata
16+ from jumpstarter .common .exceptions import JumpstarterException
1617from jumpstarter .common .resources import ResourceMetadata
1718from jumpstarter .common .serde import decode_value , encode_value
1819from jumpstarter .common .streams import (
2930)
3031
3132
33+ class DriverError (JumpstarterException ):
34+ """
35+ Raised when a driver call returns an error
36+ """
37+
38+
39+ class DriverMethodNotImplemented (DriverError , NotImplementedError ):
40+ """
41+ Raised when a driver method is not implemented
42+ """
43+
44+
45+ class DriverInvalidArgument (DriverError , ValueError ):
46+ """
47+ Raised when a driver method is called with invalid arguments
48+ """
49+
50+
3251@dataclass (kw_only = True )
3352class AsyncDriverClient (
3453 Metadata ,
@@ -74,11 +93,13 @@ async def call_async(self, method, *args):
7493 except AioRpcError as e :
7594 match e .code ():
7695 case StatusCode .UNIMPLEMENTED :
77- raise NotImplementedError (e .details ()) from None
96+ raise DriverMethodNotImplemented (e .details ()) from None
7897 case StatusCode .INVALID_ARGUMENT :
79- raise ValueError (e .details ()) from None
98+ raise DriverInvalidArgument (e .details ()) from None
99+ case StatusCode .UNKNOWN :
100+ raise DriverError (e .details ()) from None
80101 case _:
81- raise
102+ raise DriverError ( e . details ()) from e
82103
83104 return decode_value (response .result )
84105
@@ -97,11 +118,13 @@ async def streamingcall_async(self, method, *args):
97118 except AioRpcError as e :
98119 match e .code ():
99120 case StatusCode .UNIMPLEMENTED :
100- raise NotImplementedError (e .details ()) from None
121+ raise DriverMethodNotImplemented (e .details ()) from None
101122 case StatusCode .INVALID_ARGUMENT :
102- raise ValueError (e .details ()) from None
123+ raise DriverInvalidArgument (e .details ()) from None
124+ case StatusCode .UNKNOWN :
125+ raise DriverError (e .details ()) from None
103126 case _:
104- raise
127+ raise DriverError ( e . details ()) from e
105128
106129 @asynccontextmanager
107130 async def stream_async (self , method ):
0 commit comments