Skip to content

PartialStreamSubmissionError

Class: warmhub.PartialStreamSubmissionError

PartialStreamSubmissionError(*, cause: object, completed_operations: Sequence[SubmittedOperation | Mapping[str, Any]], completed_receipts: Sequence[OperationEventReceipt] = (), submission_id: str | None = None, event_request_id: str | None = None, chunk_ordinal: int | None = None, pending_outcome: str | None = None, acknowledged_operation_count: int | None = None, last_acknowledged_repo_seq: int | None = None, attempted_append_outcome: str | None = None, receipt_lookup_attempts: Sequence[ReceiptLookupAttempt] = ())

A streamed commit failed after an ambiguous or partial append.

NOT a WarmHubError — see the module docstring. Inspect repository state before retrying manually: the failed append may have committed operations not reflected in completed_operations.

completed_operations holds SubmittedOperation models, matching operations. The constructor accepts either decoded models or raw wire rows so callers on both sides of the stream layer can pass what they already have — but what comes back out is always a model, because “everything the client returns is a frozen object with snake_case attributes” has to hold on the two error paths a caller is most likely to be reading rows on.

receipt_lookup_attempts records what automatic receipt recovery asked and was told, one frozen entry per attempt, each carrying outcome (not_found | transient | decode_failed | mismatch | rejected), error_class and error_code. It is empty when recovery did not run. Without it “no receipt was recovered” reads the same whether the receipt is genuinely absent, the lookup itself kept failing, or a found receipt named a different request — three situations with three different corrective actions.

code = 'PARTIAL_STREAM_SUBMISSION'

Documentation is not yet available.

name = 'WarmHubError'

Mirrors TypeScript’s this.name = 'WarmHubError' on this class. It is load-bearing, not cosmetic: to_warmhub_error reads name, so this normalizes to code PARTIAL_STREAM_SUBMISSION (not retryable) exactly as TypeScript does. Dropping it would make is_retryable answer True for an ambiguous partial submission — the worst possible retry.

message = message

Documentation is not yet available.

cause = cause

Documentation is not yet available.

completed_operations = tuple((row if isinstance(row, SubmittedOperation) else decode_submitted_operation(row)) for row in completed_operations)

Operations the SDK confirmed completed before the failing append.

completed_receipts = tuple(completed_receipts)

Documentation is not yet available.

submission_id = submission_id

Documentation is not yet available.

event_request_id = event_request_id

Documentation is not yet available.

chunk_ordinal = chunk_ordinal

Documentation is not yet available.

pending_outcome = pending_outcome

Documentation is not yet available.

acknowledged_operation_count = len(self.completed_operations) if acknowledged_operation_count is None else acknowledged_operation_count

Documentation is not yet available.

last_acknowledged_repo_seq = last_acknowledged_repo_seq

Documentation is not yet available.

attempted_append_outcome = attempted_append_outcome

Documentation is not yet available.

receipt_lookup_attempts = tuple(receipt_lookup_attempts)

Why automatic receipt recovery returned nothing. Empty when it did not run. See the class docstring.