kubernetes-client / kubernetes-client/python

Support _request_timeout in dynamic client watch()

Open
#2,533 5 comments 0 reactions 1 assignee Claimed by @Polimixanos View on GitHub
kind/feature
Dominant language
Python
Stars
7.7k
Forks
3.5k
Avg merge
1d 14h
Merged PRs (30d)
18

Description

**Problem**

When using the dynamic client’s watch() method:
```
api = self._client.resources.get(
api_version=self._api_version,
kind=self._kind
)

for event in api.watch(
timeout=server_timeout_seconds,
)
```

there is currently no way to configure a client-side request timeout (`_request_timeout`).

**Current Workaround**

To enforce a client-side timeout, we have to bypass `Resource.watch()` and directly use `Watch().stream()`:

```
for raw_event in Watch().stream(
api.get,
serialize=False,
deserialize=False,
timeout_seconds=self._server_timeout_seconds,
_request_timeout=self._client_timeout_seconds,
)
```

**Issue**

The dynamic client’s watch() method internally relies on `Watch().stream()` but does not expose `_request_timeout` as a parameter: https://github.com/kubernetes-client/python/blob/master/kubernetes/base/dynamic/client.py#L203

This creates:
Inconsistent API ergonomics
Unnecessary duplication of logic for users needing client-side timeouts

**Proposed Solution**

Extend Resource.watch() to accept an optional `_request_timeout` parameter and pass it through to the underlying Watch().stream() call.

Example:

```
api.watch(
timeout=server_timeout_seconds,
_request_timeout=(connect_timeout, read_timeout),
)
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.