HTTP return values and exception propagation
This page describes the source implementation, not a guarantee established by a live MG400 test.
Automatic dispatch
The default server registers DobotCtrl with api_spec=None. DeviceRouter._dispatch_handler() receives method, args, and kwargs, decodes arguments using adapter.unpack_args() / adapter.unpack_kwargs(), and calls the corresponding public member. Coroutine functions are awaited; synchronous functions are invoked directly in the async handler. The result is serialized by adapter.pack_result() into a JSON response.
An explicit HTTPException is propagated. Other exceptions are logged and converted into HTTP 500 with detail=str(e). The conversion does not preserve the original Python exception type on the client. An HTTP 200 response establishes successful dispatch/serialization only; it does not establish successful robot motion or a verified physical I/O state.
Clients
SyncDeviceClient.dispatch() and AsyncDeviceClient.dispatch() send POST requests to /instance/dobot/__dispatch__ and deserialize the result using adapter.unpack_result(). In automatic mode they fetch __meta__ to obtain return-type descriptors; this does not prove that an unannotated return value has the expected application type.
Both _post() implementations call raise_for_status(). An HTTP 4xx/5xx therefore raises httpx.HTTPStatusError rather than reconstructing the server-side Python exception. Network errors and HTTP timeouts are not robot-side motion timeouts. The configured HTTP timeout must not be interpreted as a stop or cancellation of motion already accepted by the controller.
Operational implications
Distinguish transport failure, HTTP dispatch failure, command acknowledgement, and physical completion.
On a timeout, do not automatically retry a movement command without reconciling robot state; the previous request may have been accepted.
Feedback freshness and alarm reporting limitations documented elsewhere remain applicable through HTTP.
This review is based on static source inspection. It does not include an HTTP integration test or an MG400 test.
See motion dispatch, feedback/error review, and I/O and state.