kubernetes-client / kubernetes-client/python

Upgrade to openapi-generator >= v6.4.0: `DeprecationWarning: HTTPResponse.getheaders() is deprecated`

Open
#2,101 11 comments 0 reactions 0 assignees View on GitHub
help wanted kind/bug
Dominant language
Python
Stars
7.7k
Forks
3.5k
Avg merge
1d 14h
Merged PRs (30d)
18

Description

**What happened (please include outputs or screenshots)**:
Certain k8s API calls (f.e. deleting a namespace) result in the following deprecation warnings:
```
venv-test/lib/python3.9/site-packages/kubernetes/client/rest.py:44: DeprecationWarning: HTTPResponse.getheaders() is deprecated and will be removed in urllib3 v2.1.0. Instead access HTTPResponse.headers directly.
return self.urllib3_response.getheaders()
```

F.e., see at the bottom of this test log: https://source.cloud.google.com/results/invocations/0cb2a704-d3b4-40a5-9d85-36e2e7dbc64f/targets/grpc%2Fjava%2Fv1.57.x%2Fbranch%2Fxds_k8s_lb%2Fround_robin_test/log

This has already been reported in #2024, but since then OpenApi generator released the fix in v6.4.0.

- PR with the fix: https://github.com/OpenAPITools/openapi-generator/pull/14743
- [fixed rest.py template in v6.4.0](https://github.com/OpenAPITools/openapi-generator/blame/v6.4.0/modules/openapi-generator/src/main/resources/python-nextgen/rest.mustache#L32)
- v6.4.0 changelog: https://github.com/OpenAPITools/openapi-generator/releases/tag/v6.4.0.

**What you expected to happen**:
No deprecation warnings logged.

**How to reproduce it (as minimally and precisely as possible)**:
The warning is shown when kubernetes library is used within the unittest context, which enables all warnings per

> Developers of test runners for Python code are advised to instead ensure that all warnings are displayed by default for the code under test
> — https://docs.python.org/3/library/warnings.html#overriding-the-default-filter

I'm not entirely sure in what exact cases this warning is produced, but it's easy to verify when it's fixed.

Check the generated code `RESTResponse.getheaders()`:

https://github.com/kubernetes-client/python/blob/76ec6f5ce5572f66d82717e296480dc42584f0b7/kubernetes/client/rest.py#L42-L45

This should be replaced with

```py
def getheaders(self):
"""Returns a dictionary of the response headers."""
return self.urllib3_response.headers
```

**Environment**:
##### Kubernetes version

`kubectl version`:
```
Client Version: version.Info{Major:"1", Minor:"25+", GitVersion:"v1.25.9-dispatcher", GitCommit:"6ed97cc2601c54f907320513513db38e446aa2ee", GitTreeState:"clean", BuildDate:"2023-05-09T18:05:38Z", GoVersion:"go1.19.8", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"25", GitVersion:"v1.25.10-gke.1200", GitCommit:"9e9cdb04efcc29a8fe0b1804cdcc8054b9ee176a", GitTreeState:"clean", BuildDate:"2023-06-01T19:57:47Z", GoVersion:"go1.19.9 X:boringcrypto", Compiler:"gc", Platform:"linux/amd64"}
```

##### Python client version
The latest `kubernetes==27.2.0` is affected.

Contributor guide

Open the contributing guide

Research direction

The affected generated code is kubernetes/client/rest.py, specifically RESTResponse.getheaders(); compare it with the v6.4.0 rest.mustache template and find the repository's regeneration or dependency-update entry point. Regenerate or update the client with openapi-generator v6.4.0 or later, then run the relevant unittest suite with warnings enabled and confirm the deprecation warning is gone.

Written by the indexing model from the issue text.

Assessment

Tech stack
kubernetes, python
Domain
api, backend
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
52/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.