danielgtaylor / danielgtaylor/python-betterproto
ContextManager for stream-unary endpoints
- Dominant language
- Python
- Stars
- 1.8k
- Forks
- 234
- PR merge metrics
- No merged PRs in 30d
Description
It would be nice if we could interact with a stream-unary endpoint by using a context-manager.
currently the only way to send messages to a stream-unary endpoint is by using an async-generator:
```python
async def request_iterator():
yield create_some_request()
yield create_some_request()
channel = Channel(host="localhost", port=1234)
stub = MyStub(channel)
response = await stub.my_endpoint(request_iterator())
```
what i imagine is something like this:
```python
channel = Channel(host="localhost", port=1234)
stub = MyStub(channel)
async with stub.my_endpoint as stream:
stream.write(create_some_request())
stream.write(create_some_request())
```
Open questions:
- how should the interface for receiving the response look?
- could this be used for stream-stream endpoints as well?
Contributor guide
Research direction
Start by tracing the generated stub's current stream-unary entry point and its async-generator request path. Resolve the response-receiving interface and whether stream-stream endpoints are included; done means a documented, agreed context-manager API for writing requests and consuming the response.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- grpc, python
- Domain
- api, backend-api-design
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 30/100