kubernetes-client / kubernetes-client/python
Upgrade to openapi-generator >= v6.4.0: `DeprecationWarning: HTTPResponse.getheaders() is deprecated`
- 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
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