Skip to content

[UPSTREAM-4] fix: check required resource fields of a response in Python and .NET - #52

Closed
moetemp wants to merge 10 commits into
moe/up/sample-and-system-nexusfrom
moe/up/required-resource-result-field
Closed

moetemp wants to merge 10 commits into
moe/up/sample-and-system-nexusfrom
moe/up/required-resource-result-field

Conversation

@moetemp

@moetemp moetemp commented Oct 22, 2026 •

Copy link
Copy Markdown
Owner

What changed?

This PR checks a required resource field that comes from the response before the operation builds the resource. Python raises RuntimeError, and .NET throws InvalidOperationException. TypeScript already checks it with requiredField.

Why?

A response field is always optional, so an empty response built a resource with a missing identity field, and the Python code didn't type-check.

How did you test it?

The stream-service sample's create-stream returns own<stream>, bound from the optional stream field of CreateStreamResponse. The first commit has today's output, which passes StreamRef | None to the required field, and the second commit shows the guard in Python and .NET.

Based on fork PR #62 (the stream-service sample) through moe/up/sample-and-system-nexus.

Came from fork PR #45.

@moetemp moetemp changed the title [Upstream] Checked required resource fields from a response in Python and .NET. [Upstream] fix: check required resource fields of a response in Python and .NET Oct 22, 2026
@moetemp moetemp changed the title [Upstream] fix: check required resource fields of a response in Python and .NET fix: check required resource fields of a response in Python and .NET Oct 22, 2026
@moetemp moetemp changed the title fix: check required resource fields of a response in Python and .NET [Upstream] fix: check required resource fields of a response in Python and .NET Oct 22, 2026
@moetemp
moetemp changed the base branch from moe/up/main to moe/up/go-resource-field-pointer October 22, 2026 21:17
@moetemp moetemp changed the title [Upstream] fix: check required resource fields of a response in Python and .NET [UPSTREAM-12] fix: check required resource fields of a response in Python and .NET Oct 22, 2026
@moetemp moetemp changed the title [UPSTREAM-12] fix: check required resource fields of a response in Python and .NET [UPSTREAM-13] fix: check required resource fields of a response in Python and .NET Oct 23, 2026
@moetemp moetemp changed the title [UPSTREAM-13] fix: check required resource fields of a response in Python and .NET [UPSTREAM-4] fix: check required resource fields of a response in Python and .NET Oct 23, 2026
moetemp added a commit to temporalio/nexgen that referenced this pull request Oct 23, 2026
)

## What changed?

This PR adds a `stream-service` sample for Python and TypeScript, with today's output. #272 adds .NET with its fix. It has a `stream` resource built from a ref, `create-stream`, append, read, describe and close, with 64-bit offsets, payloads and durations.

Its records are proto-backed, as a stream service's are. Upstream has no stream protos, so the sample has its own small proto in `descriptors/streamsample/v1/`, with checked-in bindings. The samples README has the commands that regenerate them. `build_examples` now loads every `*.bin` under `descriptors/`.

## Why?

Later fixes show their effect as a golden diff on this sample.

## How did you test it?

The goldens. A TypeScript test sends a full `ReadRecordsRequest` through the converter, so the TypeScript type file can't drift from the proto.

## What comes next

These fixes are ready, in this order. Each one adds its shape to this sample, then the fix.

- #272: adds .NET, where the `stream` field of the `Stream` class fails with CS0542, then the fix.
- [moetemp#52](moetemp#52): Check required resource fields of a response. Adds `create-stream` returning the `stream` resource.
- [moetemp#56](moetemp#56): Allow a result record to hold a resource. Adds a `create-stream-result` holder record.
- [moetemp#53](moetemp#53): Emit `@nexus.doc` on resources and methods as Python docstrings.
- [moetemp#70](moetemp#70): Convert 64-bit resource method values to `Long` for a proto request in TypeScript. Adds 64-bit method parameters. Needs #265.
- [moetemp#54](moetemp#54): Generate a Python caller per service over a transport. Turns on the client for the sample.
- [moetemp#55](moetemp#55): Add `@nexus.long-poll` to the Python caller. Marks `read-records` as a long poll.
- [moetemp#57](moetemp#57): Add Python client classes for resources with methods.
- [moetemp#71](moetemp#71): Drop the bare keyword marker from a Python signature with no parameters. Adds a `stream-writer` interface with no endpoint.
- [moetemp#60](moetemp#60): Indent the docstrings of Python caller methods. Adds a doc on a writer operation.
- [moetemp#69](moetemp#69): Import record types that an endpoint-less Python client uses in unpacked parameters. Adds `open-writer`.
- [moetemp#72](moetemp#72): Plan proto unsigned integers as unsigned. Adds a `uint64` writer id.
- [moetemp#73](moetemp#73): Build a returned proto-wire resource in an endpoint-less TypeScript client. Makes `open-writer` return the `writer` resource.

#262 adds a `status` enum to the holder record once it merges.
@moetemp

moetemp commented Oct 23, 2026

Copy link
Copy Markdown
Owner Author

Upstreamed as temporalio#279.

@moetemp moetemp closed this Oct 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant