From 741aed5e958827958d674d0f76a107c8a49a00f4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 Oct 2026 02:03:44 +0000 Subject: [PATCH 01/22] Update aiohttp requirement from <4.0.0,>=3.14.3 to >=3.14.4,<4.0.0 --- updated-dependencies: - dependency-name: aiohttp dependency-version: 3.14.4 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements-asyncio.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-asyncio.txt b/requirements-asyncio.txt index 75a435fdf5..be91c5cdf7 100644 --- a/requirements-asyncio.txt +++ b/requirements-asyncio.txt @@ -1,7 +1,7 @@ python-dateutil>=2.8.2 # BSD PyYAML>=6.0.3 # MIT urllib3>=2.8.0 # MIT -aiohttp>=3.14.3,<4.0.0 # Apache-2.0 +aiohttp>=3.14.4,<4.0.0 # Apache-2.0 aiohttp-retry>=2.9.1 # MIT pydantic>=2.13.5 # MIT typing-extensions>=4.16.0 # PSF From 20b800ab2914d491ee2678b797298e6c80cffa12 Mon Sep 17 00:00:00 2001 From: Friedrich Date: Thu, 1 Oct 2026 17:08:46 +0200 Subject: [PATCH 02/22] deps: pin oauthlib>=4.0.0 (CVE-2026-49264, CVE-2026-49265) --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index b30649eed7..da3030f2d4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,6 +6,7 @@ PyYAML>=6.0.3 # MIT websocket-client>=0.32.0,!=0.40.0,!=0.41.*,!=0.42.* # LGPLv2+ requests # Apache-2.0 requests-oauthlib # ISC +oauthlib>=4.0.0 # ISC -- CVE-2026-49264, CVE-2026-49265; remove once requests-oauthlib bumps its own lower bound typing-extensions>=4.16.0 # PSF urllib3>=2.8.0,<3.0.0 # MIT durationpy>=0.11 # MIT From b48ea73601dd3423f917122f1c68efa4cb6c4fd5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 Oct 2026 03:02:43 +0000 Subject: [PATCH 03/22] Bump helm/kind-action from 1.15.0 to 1.15.1 Bumps [helm/kind-action](https://github.com/helm/kind-action) from 1.15.0 to 1.15.1. - [Release notes](https://github.com/helm/kind-action/releases) - [Commits](https://github.com/helm/kind-action/compare/06c1ae10762d3b9c1644e7fe69596ae519e015a2...1544676c07bb3570fcb70166beaa07c4528fd4aa) --- updated-dependencies: - dependency-name: helm/kind-action dependency-version: 1.15.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/e2e-master.yaml | 2 +- .github/workflows/e2e-release-35.0.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/e2e-master.yaml b/.github/workflows/e2e-master.yaml index 588d369cd0..304e36fc17 100644 --- a/.github/workflows/e2e-master.yaml +++ b/.github/workflows/e2e-master.yaml @@ -19,7 +19,7 @@ jobs: with: submodules: true - name: Create Kind Cluster - uses: helm/kind-action@06c1ae10762d3b9c1644e7fe69596ae519e015a2 + uses: helm/kind-action@1544676c07bb3570fcb70166beaa07c4528fd4aa with: cluster_name: kubernetes-python-e2e-master-${{ matrix.python-version }} # The kind version to be used to spin the cluster up diff --git a/.github/workflows/e2e-release-35.0.yaml b/.github/workflows/e2e-release-35.0.yaml index 730710b2f2..c7c13f0e1f 100644 --- a/.github/workflows/e2e-release-35.0.yaml +++ b/.github/workflows/e2e-release-35.0.yaml @@ -19,7 +19,7 @@ jobs: with: submodules: true - name: Create Kind Cluster - uses: helm/kind-action@06c1ae10762d3b9c1644e7fe69596ae519e015a2 + uses: helm/kind-action@1544676c07bb3570fcb70166beaa07c4528fd4aa with: cluster_name: kubernetes-python-e2e-release-35.0-${{ matrix.python-version }} # The kind version to be used to spin the cluster up From b97fce18be56e834a522cd157f892924648094f7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Oct 2026 05:03:58 +0000 Subject: [PATCH 04/22] Update pydantic requirement from >=2.13.5 to >=2.14.0 Updates the requirements on [pydantic](https://github.com/pydantic/pydantic) to permit the latest version. - [Release notes](https://github.com/pydantic/pydantic/releases) - [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md) - [Commits](https://github.com/pydantic/pydantic/compare/v2.13.5...v2.14.0) --- updated-dependencies: - dependency-name: pydantic dependency-version: 2.14.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements-asyncio.txt | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements-asyncio.txt b/requirements-asyncio.txt index be91c5cdf7..bd38974556 100644 --- a/requirements-asyncio.txt +++ b/requirements-asyncio.txt @@ -3,5 +3,5 @@ PyYAML>=6.0.3 # MIT urllib3>=2.8.0 # MIT aiohttp>=3.14.4,<4.0.0 # Apache-2.0 aiohttp-retry>=2.9.1 # MIT -pydantic>=2.13.5 # MIT +pydantic>=2.14.0 # MIT typing-extensions>=4.16.0 # PSF diff --git a/requirements.txt b/requirements.txt index da3030f2d4..5b75cfc178 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ certifi>=2026.7.22 # MPL python-dateutil>=2.8.2 # BSD -pydantic>=2.13.5 # MIT +pydantic>=2.14.0 # MIT setuptools>=84.0.0 # PSF/ZPL PyYAML>=6.0.3 # MIT websocket-client>=0.32.0,!=0.40.0,!=0.41.*,!=0.42.* # LGPLv2+ From 73398e0eb89ca2802c0c47f0ce93664c6db7c74c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aykut=20G=C3=BCney?= <50778230+KeuqS@users.noreply.github.com> Date: Tue, 13 Oct 2026 01:02:57 +0300 Subject: [PATCH 05/22] fix: normalize quantity overflow errors --- kubernetes/utils/quantity.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/kubernetes/utils/quantity.py b/kubernetes/utils/quantity.py index a45026dbe6..f01befa65d 100644 --- a/kubernetes/utils/quantity.py +++ b/kubernetes/utils/quantity.py @@ -11,7 +11,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -from decimal import Decimal, InvalidOperation +from decimal import Decimal, DecimalException, InvalidOperation _EXPONENTS = { "n": -3, @@ -82,7 +82,10 @@ def parse_quantity(quantity): raise ValueError("{} has unknown suffix".format(quantity)) exponent = Decimal(_EXPONENTS[suffix[0]]) - return number * (base ** exponent) + try: + return number * (base ** exponent) + except DecimalException as exc: + raise ValueError("Invalid quantity: {}".format(quantity)) from exc def format_quantity(quantity_value, suffix, quantize=None) -> str: From fa4998cd667dbb82cf6670973ab67e12388e2d94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aykut=20G=C3=BCney?= <50778230+KeuqS@users.noreply.github.com> Date: Tue, 13 Oct 2026 01:03:01 +0300 Subject: [PATCH 06/22] test: cover quantity exponent overflow --- kubernetes/e2e_test/test_utils.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kubernetes/e2e_test/test_utils.py b/kubernetes/e2e_test/test_utils.py index a1789ae7fe..702ddee8cc 100644 --- a/kubernetes/e2e_test/test_utils.py +++ b/kubernetes/e2e_test/test_utils.py @@ -690,6 +690,9 @@ def test_parse_quantity(self): ) self.assertRaises(ValueError, lambda: quantity.parse_quantity("1000foo")) self.assertRaises(ValueError, lambda: quantity.parse_quantity("foo")) + self.assertRaises( + ValueError, lambda: quantity.parse_quantity("2.e388635141Ki") + ) # == no suffix == self.assertEqual(quantity.parse_quantity("1000"), Decimal(1000)) From 8e6724e9098fb8069f3eda4677580c1d04dc9fff Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 14 Oct 2026 12:54:07 +0000 Subject: [PATCH 07/22] Update aiohttp requirement from <4.0.0,>=3.14.4 to >=3.14.5,<4.0.0 --- updated-dependencies: - dependency-name: aiohttp dependency-version: 3.14.5 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements-asyncio.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-asyncio.txt b/requirements-asyncio.txt index bd38974556..4d9dff0d82 100644 --- a/requirements-asyncio.txt +++ b/requirements-asyncio.txt @@ -1,7 +1,7 @@ python-dateutil>=2.8.2 # BSD PyYAML>=6.0.3 # MIT urllib3>=2.8.0 # MIT -aiohttp>=3.14.4,<4.0.0 # Apache-2.0 +aiohttp>=3.14.5,<4.0.0 # Apache-2.0 aiohttp-retry>=2.9.1 # MIT pydantic>=2.14.0 # MIT typing-extensions>=4.16.0 # PSF From f02496098440e5d05527868957cea796b9c7c22a Mon Sep 17 00:00:00 2001 From: Akshaay <89546672+Akshaay1@users.noreply.github.com> Date: Tue, 13 Oct 2026 07:10:30 +0000 Subject: [PATCH 08/22] Fix websocket proxy auth truncating passwords with colons websocket_proxycare() decoded the proxy-authorization header and split it on every ':', then indexed auth[0] and auth[1]. RFC 7617 allows ':' in the password (only the user-id may not contain one), so any proxy password containing a colon was silently truncated to the text before the first colon, sending the wrong credentials to the proxy. A header with no colon at all raised an unhandled IndexError. Split on the first colon only and only set http_proxy_auth when a password half is actually present. --- kubernetes/stream/ws_client.py | 5 +++-- kubernetes/stream/ws_client_test.py | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/kubernetes/stream/ws_client.py b/kubernetes/stream/ws_client.py index 9765f697da..0692ff180d 100644 --- a/kubernetes/stream/ws_client.py +++ b/kubernetes/stream/ws_client.py @@ -599,8 +599,9 @@ def websocket_proxycare(connect_opt, configuration, url, headers): for key,value in configuration.proxy_headers.items(): if key == 'proxy-authorization' and value.startswith('Basic'): b64value = value.split()[1] - auth = urlsafe_b64decode(b64value).decode().split(':') - connect_opt.update({'http_proxy_auth': (auth[0], auth[1]) }) + auth = urlsafe_b64decode(b64value).decode().split(':', 1) + if len(auth) == 2: + connect_opt.update({'http_proxy_auth': (auth[0], auth[1]) }) return(connect_opt) diff --git a/kubernetes/stream/ws_client_test.py b/kubernetes/stream/ws_client_test.py index 7e1edfbe28..7a31dea872 100644 --- a/kubernetes/stream/ws_client_test.py +++ b/kubernetes/stream/ws_client_test.py @@ -111,6 +111,8 @@ def test_websocket_proxycare(self): ( 'http://proxy.example.com:8080/', 'user:pass', '*', 'proxy.example.com', 8080, ('user','pass'), ['*']), ( 'http://proxy.example.com:8080/', 'user:pass', '.example.com', 'proxy.example.com', 8080, ('user','pass'), ['.example.com']), ( 'http://proxy.example.com:8080/', 'user:pass', 'localhost,.local,.example.com', 'proxy.example.com', 8080, ('user','pass'), ['localhost','.local','.example.com']), + ( 'http://proxy.example.com:8080/', 'user:pa:ss:word', None, 'proxy.example.com', 8080, ('user','pa:ss:word'), None), + ( 'http://proxy.example.com:8080/', 'useronly', None, 'proxy.example.com', 8080, None, None), ]: # input setup cfg = Configuration(proxy='', no_proxy='') From 2333b0ccac75e2def95ff286c7bbe88bbbe2974b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Oct 2026 02:02:43 +0000 Subject: [PATCH 09/22] Update pydantic requirement from >=2.14.0 to >=2.14.1 Updates the requirements on [pydantic](https://github.com/pydantic/pydantic) to permit the latest version. - [Release notes](https://github.com/pydantic/pydantic/releases) - [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md) - [Commits](https://github.com/pydantic/pydantic/compare/v2.14.0...v2.14.1) --- updated-dependencies: - dependency-name: pydantic dependency-version: 2.14.1 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements-asyncio.txt | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements-asyncio.txt b/requirements-asyncio.txt index 4d9dff0d82..96d1d0cc1f 100644 --- a/requirements-asyncio.txt +++ b/requirements-asyncio.txt @@ -3,5 +3,5 @@ PyYAML>=6.0.3 # MIT urllib3>=2.8.0 # MIT aiohttp>=3.14.5,<4.0.0 # Apache-2.0 aiohttp-retry>=2.9.1 # MIT -pydantic>=2.14.0 # MIT +pydantic>=2.14.1 # MIT typing-extensions>=4.16.0 # PSF diff --git a/requirements.txt b/requirements.txt index 5b75cfc178..88921fee18 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ certifi>=2026.7.22 # MPL python-dateutil>=2.8.2 # BSD -pydantic>=2.14.0 # MIT +pydantic>=2.14.1 # MIT setuptools>=84.0.0 # PSF/ZPL PyYAML>=6.0.3 # MIT websocket-client>=0.32.0,!=0.40.0,!=0.41.*,!=0.42.* # LGPLv2+ From 963b19195a4ce5b4757799a17518b0308073a2ce Mon Sep 17 00:00:00 2001 From: ArfiArfath21 <76872284+ArfiArfath21@users.noreply.github.com> Date: Fri, 16 Oct 2026 23:47:37 +0530 Subject: [PATCH 10/22] test(utils): make keepalive tests pass on macOS The tests referenced socket.TCP_KEEPIDLE, which macOS does not define (it uses TCP_KEEPALIVE; keepalive.py already handles this), and expected SO_KEEPALIVE to read back as exactly 1, but macOS returns a non-zero flag. --- kubernetes/utils/keepalive_test.py | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/kubernetes/utils/keepalive_test.py b/kubernetes/utils/keepalive_test.py index 005808fb83..7b882b80fa 100644 --- a/kubernetes/utils/keepalive_test.py +++ b/kubernetes/utils/keepalive_test.py @@ -25,6 +25,14 @@ from kubernetes.utils.keepalive import tcp_keepalive_socket_options +# Linux spells the idle time TCP_KEEPIDLE, macOS spells it TCP_KEEPALIVE, and +# some platforms have neither (keepalive.py skips the option there). +IDLE_OPTION = getattr(socket, 'TCP_KEEPIDLE', + getattr(socket, 'TCP_KEEPALIVE', None)) +needs_idle_option = unittest.skipIf( + IDLE_OPTION is None, 'platform has no TCP keepalive idle option') + + def fake_socket_module(**names): """A stand-in for the socket module exposing only the given names.""" @@ -39,12 +47,13 @@ def fake_socket_module(**names): class TestTcpKeepaliveSocketOptions(unittest.TestCase): + @needs_idle_option def test_defaults_match_client_go(self): options = tcp_keepalive_socket_options() self.assertIn((socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1), options) self.assertIn( - (socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, 30), options) + (socket.IPPROTO_TCP, IDLE_OPTION, 30), options) self.assertIn( (socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, 15), options) self.assertIn((socket.IPPROTO_TCP, socket.TCP_KEEPCNT, 9), options) @@ -56,10 +65,11 @@ def test_keeps_the_urllib3_defaults(self): for default in defaults: self.assertIn(default, options) + @needs_idle_option def test_custom_timings(self): options = tcp_keepalive_socket_options(idle=5, interval=2, count=3) - self.assertIn((socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, 5), options) + self.assertIn((socket.IPPROTO_TCP, IDLE_OPTION, 5), options) self.assertIn((socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, 2), options) self.assertIn((socket.IPPROTO_TCP, socket.TCP_KEEPCNT, 3), options) @@ -74,15 +84,17 @@ def test_options_are_setsockopt_triples(self): for item in option: self.assertIsInstance(item, int) + @needs_idle_option def test_options_apply_to_a_socket(self): with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: for level, name, value in tcp_keepalive_socket_options(): sock.setsockopt(level, name, value) + # Boolean options read back as any non-zero value (8 on macOS) + self.assertNotEqual( + 0, sock.getsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE)) self.assertEqual( - 1, sock.getsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE)) - self.assertEqual( - 30, sock.getsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPIDLE)) + 30, sock.getsockopt(socket.IPPROTO_TCP, IDLE_OPTION)) def test_falls_back_to_tcp_keepalive_on_macos(self): macos = fake_socket_module( From 46d070503a957ea008b9fd74183a10bc2a5b469b Mon Sep 17 00:00:00 2001 From: Sayak Satpathi <170233065+sayaksatpathi@users.noreply.github.com> Date: Fri, 16 Oct 2026 00:54:24 +0530 Subject: [PATCH 11/22] Relax the certifi lower bound and stop Dependabot raising lower bounds Dependabot raised certifi from >=14.05.14 to >=2026.7.22, which makes the client impossible to install next to an application that pins an older certifi. The client only calls certifi.where(), which every release provides. Lower the bound to 2024.7.4, the oldest release without a known advisory (CVE-2024-39689), and set versioning-strategy to widen for pip so Dependabot keeps the ranges of this library open instead of raising the lower bound on every new release. --- .github/dependabot.yml | 3 +++ requirements.txt | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index f4e27ab10e..5461a64c60 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -5,6 +5,9 @@ updates: schedule: interval: "daily" time: "02:00" + # requirements.txt is the install_requires of a published library, so + # widen ranges instead of raising lower bounds on every new release. + versioning-strategy: "widen" - package-ecosystem: "github-actions" directory: "/" schedule: diff --git a/requirements.txt b/requirements.txt index 88921fee18..3af577ff92 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -certifi>=2026.7.22 # MPL +certifi>=2024.7.4 # MPL -- oldest release without a known advisory (CVE-2024-39689) python-dateutil>=2.8.2 # BSD pydantic>=2.14.1 # MIT setuptools>=84.0.0 # PSF/ZPL From b19694b936177ca94e2763043d02797c0c64820d Mon Sep 17 00:00:00 2001 From: ArfiArfath21 <76872284+ArfiArfath21@users.noreply.github.com> Date: Fri, 16 Oct 2026 23:47:35 +0530 Subject: [PATCH 12/22] fix(utils): reject mi, ni and ui as quantity suffixes parse_quantity and format_quantity only rejected 'ki' among the binary suffixes, so 'mi', 'ni' and 'ui' were accepted as base-1024 negative exponents (e.g. parse_quantity('1mi') == 1/1024). Binary suffixes are limited to Ki, Mi, Gi, Ti, Pi and Ei. --- kubernetes/e2e_test/test_utils.py | 9 +++++++++ kubernetes/utils/quantity.py | 15 ++++++++------- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/kubernetes/e2e_test/test_utils.py b/kubernetes/e2e_test/test_utils.py index 702ddee8cc..ff9ebb35da 100644 --- a/kubernetes/e2e_test/test_utils.py +++ b/kubernetes/e2e_test/test_utils.py @@ -688,6 +688,11 @@ def test_parse_quantity(self): self.assertRaises( ValueError, lambda: quantity.parse_quantity("1000ki") ) + # "m", "n" and "u" are base 1000 only; there is no mi, ni or ui + for invalid in ("1mi", "1ni", "1ui"): + self.assertRaises( + ValueError, lambda: quantity.parse_quantity(invalid) + ) self.assertRaises(ValueError, lambda: quantity.parse_quantity("1000foo")) self.assertRaises(ValueError, lambda: quantity.parse_quantity("foo")) self.assertRaises( @@ -732,6 +737,10 @@ def test_format_quantity(self): self.assertRaises( ValueError, lambda: quantity.format_quantity(Decimal(1_000), "ki") ) + for invalid in ("mi", "ni", "ui"): + self.assertRaises( + ValueError, lambda: quantity.format_quantity(Decimal(1_000), invalid) + ) self.assertRaises( ValueError, lambda: quantity.format_quantity(Decimal(1_000), "foo") ) diff --git a/kubernetes/utils/quantity.py b/kubernetes/utils/quantity.py index f01befa65d..5f56f00cd9 100644 --- a/kubernetes/utils/quantity.py +++ b/kubernetes/utils/quantity.py @@ -26,6 +26,9 @@ "E": 6, } +# Only these prefixes exist in base 1024 (Ki, Mi, Gi, Ti, Pi, Ei). +_BINARY_PREFIXES = "KMGTPE" + def parse_quantity(quantity): """ @@ -68,16 +71,15 @@ def parse_quantity(quantity): return number if suffix.endswith("i"): + # handle SI inconsistency: "ki", "mi", "ni" and "ui" are not valid binary suffixes + if suffix[0] not in _BINARY_PREFIXES: + raise ValueError("{} has unknown suffix".format(quantity)) base = 1024 elif len(suffix) == 1: base = 1000 else: raise ValueError("{} has unknown suffix".format(quantity)) - # handle SI inconsistency - if suffix == "ki": - raise ValueError("{} has unknown suffix".format(quantity)) - if suffix[0] not in _EXPONENTS: raise ValueError("{} has unknown suffix".format(quantity)) @@ -127,15 +129,14 @@ def format_quantity(quantity_value, suffix, quantize=None) -> str: return str(quantity_value) if suffix.endswith("i"): + if suffix[0] not in _BINARY_PREFIXES: + raise ValueError(f"{quantity_value} has unknown suffix") base = 1024 elif len(suffix) == 1: base = 1000 else: raise ValueError(f"{quantity_value} has unknown suffix") - if suffix == "ki": - raise ValueError(f"{quantity_value} has unknown suffix") - if suffix[0] not in _EXPONENTS: raise ValueError(f"{quantity_value} has unknown suffix") From f467c847541d42f560579191563435ff8fddf9b3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Oct 2026 02:02:42 +0000 Subject: [PATCH 13/22] Update pluggy requirement from >=1.6.0 to >=1.7.0 Updates the requirements on [pluggy](https://github.com/pytest-dev/pluggy) to permit the latest version. - [Changelog](https://github.com/pytest-dev/pluggy/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pluggy/compare/1.6.0...1.7.0) --- updated-dependencies: - dependency-name: pluggy dependency-version: 1.7.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- test-requirements-asyncio.txt | 2 +- test-requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test-requirements-asyncio.txt b/test-requirements-asyncio.txt index 44f8f68f0a..d8147a351b 100644 --- a/test-requirements-asyncio.txt +++ b/test-requirements-asyncio.txt @@ -1,5 +1,5 @@ isort -pluggy>=1.6.0 +pluggy>=1.7.0 py>=1.4.31 pytest pytest-cov diff --git a/test-requirements.txt b/test-requirements.txt index 0efa10cc43..a4a67cadd6 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -2,7 +2,7 @@ coverage>=7.16.2 nose>=1.3.7 pytest pytest-cov -pluggy>=1.6.0 +pluggy>=1.7.0 randomize>=0.14 sphinx>=8.1.3 # BSD sphinx_markdown_tables From 961083217a36fda9e9770216d7aa0db47bd5302d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 23 Oct 2026 02:02:45 +0000 Subject: [PATCH 14/22] Update setuptools requirement from >=84.0.0 to >=84.2.0 Updates the requirements on [setuptools](https://github.com/pypa/setuptools) to permit the latest version. - [Release notes](https://github.com/pypa/setuptools/releases) - [Changelog](https://github.com/pypa/setuptools/blob/main/NEWS.rst) - [Commits](https://github.com/pypa/setuptools/compare/v84.0.0...v84.2.0) --- updated-dependencies: - dependency-name: setuptools dependency-version: 84.2.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 3af577ff92..2162975709 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ certifi>=2024.7.4 # MPL -- oldest release without a known advisory (CVE-2024-39689) python-dateutil>=2.8.2 # BSD pydantic>=2.14.1 # MIT -setuptools>=84.0.0 # PSF/ZPL +setuptools>=84.2.0 # PSF/ZPL PyYAML>=6.0.3 # MIT websocket-client>=0.32.0,!=0.40.0,!=0.41.*,!=0.42.* # LGPLv2+ requests # Apache-2.0 From b32cd7e4a65cf6a9162800fab4c0e8b195871160 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Oct 2026 02:02:57 +0000 Subject: [PATCH 15/22] Update setuptools requirement from >=84.2.0 to >=84.2.1 Updates the requirements on [setuptools](https://github.com/pypa/setuptools) to permit the latest version. - [Release notes](https://github.com/pypa/setuptools/releases) - [Changelog](https://github.com/pypa/setuptools/blob/main/NEWS.rst) - [Commits](https://github.com/pypa/setuptools/compare/v84.2.0...v84.2.1) --- updated-dependencies: - dependency-name: setuptools dependency-version: 84.2.1 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 2162975709..dfcb5739a1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ certifi>=2024.7.4 # MPL -- oldest release without a known advisory (CVE-2024-39689) python-dateutil>=2.8.2 # BSD pydantic>=2.14.1 # MIT -setuptools>=84.2.0 # PSF/ZPL +setuptools>=84.2.1 # PSF/ZPL PyYAML>=6.0.3 # MIT websocket-client>=0.32.0,!=0.40.0,!=0.41.*,!=0.42.* # LGPLv2+ requests # Apache-2.0 From 7d51a8bb694c7cc0c670dcf77446978303f77b17 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Oct 2026 02:02:36 +0000 Subject: [PATCH 16/22] Update python-dateutil requirement from >=2.8.2 to >=3.0.0 Updates the requirements on [python-dateutil](https://github.com/dateutil/dateutil) to permit the latest version. - [Release notes](https://github.com/dateutil/dateutil/releases) - [Changelog](https://github.com/dateutil/dateutil/blob/master/NEWS) - [Commits](https://github.com/dateutil/dateutil/compare/2.8.2...3.0.0) --- updated-dependencies: - dependency-name: python-dateutil dependency-version: 3.0.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements-asyncio.txt | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements-asyncio.txt b/requirements-asyncio.txt index 96d1d0cc1f..35001162ca 100644 --- a/requirements-asyncio.txt +++ b/requirements-asyncio.txt @@ -1,4 +1,4 @@ -python-dateutil>=2.8.2 # BSD +python-dateutil>=3.0.0 # BSD PyYAML>=6.0.3 # MIT urllib3>=2.8.0 # MIT aiohttp>=3.14.5,<4.0.0 # Apache-2.0 diff --git a/requirements.txt b/requirements.txt index dfcb5739a1..d2bf57f07e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ certifi>=2024.7.4 # MPL -- oldest release without a known advisory (CVE-2024-39689) -python-dateutil>=2.8.2 # BSD +python-dateutil>=3.0.0 # BSD pydantic>=2.14.1 # MIT setuptools>=84.2.1 # PSF/ZPL PyYAML>=6.0.3 # MIT From 84ae61e8a40e1e8299158dcccc4ec13f14f31b42 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Oct 2026 03:02:27 +0000 Subject: [PATCH 17/22] Bump actions/setup-python from 7.0.0 to 7.1.0 Bumps [actions/setup-python](https://github.com/actions/setup-python) from 7.0.0 to 7.1.0. - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/5fda3b95a4ea91299a34e894583c3862153e4b97...6d4fd22b20465ccc0f7354476588e8df7c9ca0e0) --- updated-dependencies: - dependency-name: actions/setup-python dependency-version: 7.1.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/e2e-master.yaml | 2 +- .github/workflows/e2e-release-35.0.yaml | 2 +- .github/workflows/test.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/e2e-master.yaml b/.github/workflows/e2e-master.yaml index 304e36fc17..73102f968e 100644 --- a/.github/workflows/e2e-master.yaml +++ b/.github/workflows/e2e-master.yaml @@ -30,7 +30,7 @@ jobs: # as we sync with Kubernetes upstream config: .github/workflows/kind-configs/cluster-1.35.yaml - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 + uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 with: python-version: ${{ matrix.python-version }} - name: Install dependencies diff --git a/.github/workflows/e2e-release-35.0.yaml b/.github/workflows/e2e-release-35.0.yaml index c7c13f0e1f..3efe8149d6 100644 --- a/.github/workflows/e2e-release-35.0.yaml +++ b/.github/workflows/e2e-release-35.0.yaml @@ -30,7 +30,7 @@ jobs: # as we sync with Kubernetes upstream config: .github/workflows/kind-configs/cluster-1.35.yaml - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 + uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 with: python-version: ${{ matrix.python-version }} - name: Install dependencies diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 692d488ff8..f22e90fa7f 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -17,7 +17,7 @@ jobs: with: submodules: true - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 + uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 with: python-version: ${{ matrix.python-version }} - name: Install dependencies From dad24636f4b9a223c1b470ca415624fceb8eaca1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Nov 2026 02:02:51 +0000 Subject: [PATCH 18/22] Update pydantic requirement from >=2.14.1 to >=2.14.2 Updates the requirements on [pydantic](https://github.com/pydantic/pydantic) to permit the latest version. - [Release notes](https://github.com/pydantic/pydantic/releases) - [Changelog](https://github.com/pydantic/pydantic/blob/v2.14.2/HISTORY.md) - [Commits](https://github.com/pydantic/pydantic/compare/v2.14.1...v2.14.2) --- updated-dependencies: - dependency-name: pydantic dependency-version: 2.14.2 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements-asyncio.txt | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements-asyncio.txt b/requirements-asyncio.txt index 35001162ca..baa9483c33 100644 --- a/requirements-asyncio.txt +++ b/requirements-asyncio.txt @@ -3,5 +3,5 @@ PyYAML>=6.0.3 # MIT urllib3>=2.8.0 # MIT aiohttp>=3.14.5,<4.0.0 # Apache-2.0 aiohttp-retry>=2.9.1 # MIT -pydantic>=2.14.1 # MIT +pydantic>=2.14.2 # MIT typing-extensions>=4.16.0 # PSF diff --git a/requirements.txt b/requirements.txt index d2bf57f07e..25341f983f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ certifi>=2024.7.4 # MPL -- oldest release without a known advisory (CVE-2024-39689) python-dateutil>=3.0.0 # BSD -pydantic>=2.14.1 # MIT +pydantic>=2.14.2 # MIT setuptools>=84.2.1 # PSF/ZPL PyYAML>=6.0.3 # MIT websocket-client>=0.32.0,!=0.40.0,!=0.41.*,!=0.42.* # LGPLv2+ From 49be82dd5047fe5cdc7bdf8436701e2bdb1528d5 Mon Sep 17 00:00:00 2001 From: yliao Date: Thu, 5 Nov 2026 13:26:22 -0800 Subject: [PATCH 19/22] update version constants for 37.0.2 release --- scripts/constants.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/constants.py b/scripts/constants.py index a0eb82e1d0..42c8943961 100644 --- a/scripts/constants.py +++ b/scripts/constants.py @@ -18,7 +18,7 @@ KUBERNETES_BRANCH = "release-1.37" # client version for packaging and releasing. -CLIENT_VERSION = "37.0.1" +CLIENT_VERSION = "37.0.2" # Name of the release package PACKAGE_NAME = "kubernetes" From 2e77435446b45872ba67febaa591eaa9d5369837 Mon Sep 17 00:00:00 2001 From: yliao Date: Thu, 5 Nov 2026 13:26:22 -0800 Subject: [PATCH 20/22] update changelog --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 266e93a511..08c2abd4a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +# v37.0.2 + +Kubernetes API Version: v1.37.2 + + # v37.0.1 Kubernetes API Version: v1.37.1 From e38039ff90ebccaf8861c5d0a2c6f0a561f33166 Mon Sep 17 00:00:00 2001 From: yliao Date: Thu, 5 Nov 2026 13:27:47 -0800 Subject: [PATCH 21/22] generated client change --- kubernetes/README.md | 2 +- kubernetes/__init__.py | 2 +- kubernetes/aio/README.md | 2 +- kubernetes/aio/__init__.py | 2 +- kubernetes/aio/client/__init__.py | 2 +- kubernetes/aio/client/api_client.py | 2 +- kubernetes/aio/client/configuration.py | 2 +- kubernetes/client/__init__.py | 2 +- kubernetes/client/api_client.py | 2 +- kubernetes/client/configuration.py | 2 +- setup-asyncio.py | 2 +- setup-release.py | 2 +- setup.py | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/kubernetes/README.md b/kubernetes/README.md index 9dd265b58d..69275345af 100644 --- a/kubernetes/README.md +++ b/kubernetes/README.md @@ -4,7 +4,7 @@ No description provided (generated by Openapi Generator https://github.com/opena This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project: - API version: release-1.37 -- Package version: 37.0.1 +- Package version: 37.0.2 - Generator version: 7.25.0 - Build package: org.openapitools.codegen.languages.PythonClientCodegen diff --git a/kubernetes/__init__.py b/kubernetes/__init__.py index 0ac0625346..7b2b1c6997 100644 --- a/kubernetes/__init__.py +++ b/kubernetes/__init__.py @@ -14,7 +14,7 @@ __project__ = 'kubernetes' # The version is auto-updated. Please do not edit. -__version__ = "37.0.1" +__version__ = "37.0.2" from . import client from . import config diff --git a/kubernetes/aio/README.md b/kubernetes/aio/README.md index 2106e67f24..47ad1f63d0 100644 --- a/kubernetes/aio/README.md +++ b/kubernetes/aio/README.md @@ -4,7 +4,7 @@ No description provided (generated by Openapi Generator https://github.com/opena This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project: - API version: release-1.37 -- Package version: 37.0.1 +- Package version: 37.0.2 - Generator version: 7.25.0 - Build package: org.openapitools.codegen.languages.PythonClientCodegen diff --git a/kubernetes/aio/__init__.py b/kubernetes/aio/__init__.py index 35d685a78e..d8d4cee972 100644 --- a/kubernetes/aio/__init__.py +++ b/kubernetes/aio/__init__.py @@ -14,7 +14,7 @@ __project__ = "kubernetes_aio" # The version is auto-updated. Please do not edit. -__version__ = "37.0.1" +__version__ = "37.0.2" import kubernetes.aio.client as client import kubernetes.aio.config as config diff --git a/kubernetes/aio/client/__init__.py b/kubernetes/aio/client/__init__.py index c60b21d880..1c905d3fb7 100644 --- a/kubernetes/aio/client/__init__.py +++ b/kubernetes/aio/client/__init__.py @@ -14,7 +14,7 @@ """ # noqa: E501 -__version__ = "37.0.1" +__version__ = "37.0.2" # Define package exports __all__ = [ diff --git a/kubernetes/aio/client/api_client.py b/kubernetes/aio/client/api_client.py index 5d0cafb9e4..36b657ff3f 100644 --- a/kubernetes/aio/client/api_client.py +++ b/kubernetes/aio/client/api_client.py @@ -122,7 +122,7 @@ def __init__( self.default_headers[header_name] = header_value self.cookie = cookie # Set default User-Agent. - self.user_agent = 'OpenAPI-Generator/37.0.1/python' + self.user_agent = 'OpenAPI-Generator/37.0.2/python' self.client_side_validation = configuration.client_side_validation async def __aenter__(self): diff --git a/kubernetes/aio/client/configuration.py b/kubernetes/aio/client/configuration.py index cf052c2dfc..abb2b49c7a 100644 --- a/kubernetes/aio/client/configuration.py +++ b/kubernetes/aio/client/configuration.py @@ -612,7 +612,7 @@ def to_debug_report(self) -> str: "OS: {env}\n"\ "Python Version: {pyversion}\n"\ "Version of the API: release-1.37\n"\ - "SDK Package Version: 37.0.1".\ + "SDK Package Version: 37.0.2".\ format(env=sys.platform, pyversion=sys.version) def get_host_settings(self) -> List[HostSetting]: diff --git a/kubernetes/client/__init__.py b/kubernetes/client/__init__.py index 8a9f8c2f04..a643ddce03 100644 --- a/kubernetes/client/__init__.py +++ b/kubernetes/client/__init__.py @@ -14,7 +14,7 @@ """ # noqa: E501 -__version__ = "37.0.1" +__version__ = "37.0.2" # Define package exports __all__ = [ diff --git a/kubernetes/client/api_client.py b/kubernetes/client/api_client.py index 7f71c4b32e..bed517449c 100644 --- a/kubernetes/client/api_client.py +++ b/kubernetes/client/api_client.py @@ -129,7 +129,7 @@ def __init__( self.pool_threads = pool_threads self._pool_lock = Lock() # Set default User-Agent. - self.user_agent = 'OpenAPI-Generator/37.0.1/python' + self.user_agent = 'OpenAPI-Generator/37.0.2/python' self.client_side_validation = configuration.client_side_validation def close(self): diff --git a/kubernetes/client/configuration.py b/kubernetes/client/configuration.py index ba2d428622..770788ae15 100644 --- a/kubernetes/client/configuration.py +++ b/kubernetes/client/configuration.py @@ -613,7 +613,7 @@ def to_debug_report(self) -> str: "OS: {env}\n"\ "Python Version: {pyversion}\n"\ "Version of the API: release-1.37\n"\ - "SDK Package Version: 37.0.1".\ + "SDK Package Version: 37.0.2".\ format(env=sys.platform, pyversion=sys.version) def get_host_settings(self) -> List[HostSetting]: diff --git a/setup-asyncio.py b/setup-asyncio.py index 04b5cf828f..d2359a13f7 100644 --- a/setup-asyncio.py +++ b/setup-asyncio.py @@ -16,7 +16,7 @@ # Do not edit these constants. They will be updated automatically # by scripts/update-client-asyncio.sh. -CLIENT_VERSION = "37.0.1" +CLIENT_VERSION = "37.0.2" PACKAGE_NAME = "kubernetes.aio" DEVELOPMENT_STATUS = "5 - Production/Stable" diff --git a/setup-release.py b/setup-release.py index 5d1217f897..d0ff5f5eb1 100644 --- a/setup-release.py +++ b/setup-release.py @@ -16,7 +16,7 @@ # Do not edit these constants. They will be updated automatically # by scripts/update-client.sh. -CLIENT_VERSION = "37.0.1" +CLIENT_VERSION = "37.0.2" PACKAGE_NAME = "kubernetes" DEVELOPMENT_STATUS = "5 - Production/Stable" diff --git a/setup.py b/setup.py index abc4f74101..6bfec0c349 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ # Do not edit these constants. They will be updated automatically # by scripts/update-client.sh. -CLIENT_VERSION = "37.0.1" +CLIENT_VERSION = "37.0.2" PACKAGE_NAME = "kubernetes" DEVELOPMENT_STATUS = "5 - Production/Stable" From 3778edab7d9b31cde319f47b5bb50912a8c2f1ad Mon Sep 17 00:00:00 2001 From: yliao Date: Thu, 5 Nov 2026 13:39:18 -0800 Subject: [PATCH 22/22] updated compatibility matrix and maintenance status in the README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 26106dfad4..c1b759aab6 100644 --- a/README.md +++ b/README.md @@ -135,7 +135,7 @@ supported versions of Kubernetes clusters. - [client 34.y.z](https://pypi.org/project/kubernetes/34.1.0/): Kubernetes 1.33 or below (+-), Kubernetes 1.34 (✓), Kubernetes 1.35 or above (+-) - [client 35.y.z](https://pypi.org/project/kubernetes/35.0.0/): Kubernetes 1.34 or below (+-), Kubernetes 1.35 (✓), Kubernetes 1.36 or above (+-) - [client 36.y.z](https://pypi.org/project/kubernetes/36.0.3/): Kubernetes 1.35 or below (+-), Kubernetes 1.36 (✓), Kubernetes 1.37 or above (+-) -- [client 37.y.z](https://pypi.org/project/kubernetes/37.0.1/): Kubernetes 1.36 or below (+-), Kubernetes 1.37 (✓), Kubernetes 1.38 or above (+-) +- [client 37.y.z](https://pypi.org/project/kubernetes/37.0.2/): Kubernetes 1.36 or below (+-), Kubernetes 1.37 (✓), Kubernetes 1.38 or above (+-) > See [here](#homogenizing-the-kubernetes-python-client-versions) for an explanation of why there is no v13-v16 release.