Resolve Client.Python-001/002/004/006/007/008/010/011/012 findings
Client.Python-001: dropped "scaffold" from the stale pyproject description. Client.Python-002 (re-triaged): stale finding — MxGatewayCommandError is already exported and in __all__; no change needed. Client.Python-004: removed the dead `closed` variable in _smoke; the CLI smoke now uses `async with session`. Client.Python-006: close() on both clients and Session had an unlocked check-then-set race; `_closed` is now set before the await. Client.Python-007: gateway stream iterators now share one helper that explicitly catches CancelledError and cancels the call. Client.Python-008: to_mx_value now rejects nan/inf; float/bytes mapping documented. Client.Python-010: removed the circular-import-workaround late imports in favour of TYPE_CHECKING / module-scope imports. Client.Python-011: ensure_mxaccess_success no longer treats a proto3-default success==0 with an unset category as a failure. Client.Python-012 (Won't Fix): invoke_raw deliberately skips MXAccess-failure detection for parity tests; documented the contract instead. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -95,6 +95,22 @@ async with await GatewayClient.connect(
|
||||
events available for parity tests. `Session` helpers call the method-specific
|
||||
MXAccess commands and preserve raw replies on typed command exceptions.
|
||||
|
||||
`*_raw` methods (`GatewayClient.invoke_raw`, `Session.invoke_raw`) surface
|
||||
gateway protocol failures by raising the typed `MxGateway*` exceptions, but
|
||||
they deliberately do **not** run MXAccess-failure detection: an MXAccess
|
||||
HRESULT or `MxStatusProxy` status failure is left embedded in the returned
|
||||
reply and no `MxAccessError` is raised. `Session.invoke` adds that check on
|
||||
top. Parity-test callers using `invoke_raw` must inspect the reply's
|
||||
`protocol_status`, `hresult`, and `statuses` themselves. The non-raw `Session`
|
||||
helpers (`register`, `add_item`, `write`, the bulk methods, etc.) run the
|
||||
check and raise `MxAccessError`.
|
||||
|
||||
Value conversion (`to_mx_value`, used by `Session.write`/`write2` and the
|
||||
bulk helpers) rejects non-finite floats — `nan`, `inf`, and `-inf` raise
|
||||
`ValueError` rather than being forwarded to MXAccess, which has no defined
|
||||
wire representation for them. Python `bytes` values are an opaque
|
||||
`VT_RECORD` pass-through that MXAccess does not interpret.
|
||||
|
||||
Canceling a Python task cancels the client-side gRPC call or stream wait. It
|
||||
does not abort an in-flight MXAccess COM call inside the worker process.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user