gitops 1.9.0__tar.gz → 1.10.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. {gitops-1.9.0 → gitops-1.10.0}/.release-please-manifest.json +1 -1
  2. {gitops-1.9.0 → gitops-1.10.0}/CHANGELOG.md +15 -0
  3. {gitops-1.9.0 → gitops-1.10.0}/Dockerfile +2 -2
  4. {gitops-1.9.0 → gitops-1.10.0}/PKG-INFO +1 -1
  5. {gitops-1.9.0 → gitops-1.10.0}/gitops/__init__.py +1 -1
  6. {gitops-1.9.0 → gitops-1.10.0}/gitops_server/settings.py +10 -0
  7. gitops-1.10.0/gitops_server/version.py +1 -0
  8. {gitops-1.9.0 → gitops-1.10.0}/gitops_server/workers/deployer/deploy.py +2 -0
  9. {gitops-1.9.0 → gitops-1.10.0}/pyproject.toml +1 -1
  10. {gitops-1.9.0 → gitops-1.10.0}/tests/test_deploy.py +21 -0
  11. {gitops-1.9.0 → gitops-1.10.0}/uv.lock +14 -18
  12. gitops-1.9.0/gitops_server/version.py +0 -1
  13. {gitops-1.9.0 → gitops-1.10.0}/.dockerignore +0 -0
  14. {gitops-1.9.0 → gitops-1.10.0}/.github/CODEOWNERS +0 -0
  15. {gitops-1.9.0 → gitops-1.10.0}/.github/workflows/release-please.yaml +0 -0
  16. {gitops-1.9.0 → gitops-1.10.0}/.github/workflows/test.yml +0 -0
  17. {gitops-1.9.0 → gitops-1.10.0}/.gitignore +0 -0
  18. {gitops-1.9.0 → gitops-1.10.0}/.mise.toml +0 -0
  19. {gitops-1.9.0 → gitops-1.10.0}/.pre-commit-config.yaml +0 -0
  20. {gitops-1.9.0 → gitops-1.10.0}/CLAUDE.md +0 -0
  21. {gitops-1.9.0 → gitops-1.10.0}/LICENSE +0 -0
  22. {gitops-1.9.0 → gitops-1.10.0}/README.md +0 -0
  23. {gitops-1.9.0 → gitops-1.10.0}/charts/gitops/.helmignore +0 -0
  24. {gitops-1.9.0 → gitops-1.10.0}/charts/gitops/CHANGELOG.md +0 -0
  25. {gitops-1.9.0 → gitops-1.10.0}/charts/gitops/Chart.yaml +0 -0
  26. {gitops-1.9.0 → gitops-1.10.0}/charts/gitops/README.md +0 -0
  27. {gitops-1.9.0 → gitops-1.10.0}/charts/gitops/templates/_helpers.tpl +0 -0
  28. {gitops-1.9.0 → gitops-1.10.0}/charts/gitops/templates/certificate.yml +0 -0
  29. {gitops-1.9.0 → gitops-1.10.0}/charts/gitops/templates/deployment.yml +0 -0
  30. {gitops-1.9.0 → gitops-1.10.0}/charts/gitops/templates/environment.yml +0 -0
  31. {gitops-1.9.0 → gitops-1.10.0}/charts/gitops/templates/ingress.yml +0 -0
  32. {gitops-1.9.0 → gitops-1.10.0}/charts/gitops/templates/issuer.yml +0 -0
  33. {gitops-1.9.0 → gitops-1.10.0}/charts/gitops/templates/pdb.yml +0 -0
  34. {gitops-1.9.0 → gitops-1.10.0}/charts/gitops/templates/secrets.yml +0 -0
  35. {gitops-1.9.0 → gitops-1.10.0}/charts/gitops/templates/service.yml +0 -0
  36. {gitops-1.9.0 → gitops-1.10.0}/charts/gitops/templates/serviceaccount.yaml +0 -0
  37. {gitops-1.9.0 → gitops-1.10.0}/charts/gitops/values.yaml +0 -0
  38. {gitops-1.9.0 → gitops-1.10.0}/docker-compose.yml +0 -0
  39. {gitops-1.9.0 → gitops-1.10.0}/docs/plans/2026-03-13-kms-encryption-design.md +0 -0
  40. {gitops-1.9.0 → gitops-1.10.0}/gitops/common/__init__.py +0 -0
  41. {gitops-1.9.0 → gitops-1.10.0}/gitops/common/app.py +0 -0
  42. {gitops-1.9.0 → gitops-1.10.0}/gitops/common/utils.py +0 -0
  43. {gitops-1.9.0 → gitops-1.10.0}/gitops/core.py +0 -0
  44. {gitops-1.9.0 → gitops-1.10.0}/gitops/main.py +0 -0
  45. {gitops-1.9.0 → gitops-1.10.0}/gitops/py.typed +0 -0
  46. {gitops-1.9.0 → gitops-1.10.0}/gitops/settings.py +0 -0
  47. {gitops-1.9.0 → gitops-1.10.0}/gitops/shorthands.py +0 -0
  48. {gitops-1.9.0 → gitops-1.10.0}/gitops/utils/__init__.py +0 -0
  49. {gitops-1.9.0 → gitops-1.10.0}/gitops/utils/apps.py +0 -0
  50. {gitops-1.9.0 → gitops-1.10.0}/gitops/utils/async_runner.py +0 -0
  51. {gitops-1.9.0 → gitops-1.10.0}/gitops/utils/cli.py +0 -0
  52. {gitops-1.9.0 → gitops-1.10.0}/gitops/utils/exceptions.py +0 -0
  53. {gitops-1.9.0 → gitops-1.10.0}/gitops/utils/images.py +0 -0
  54. {gitops-1.9.0 → gitops-1.10.0}/gitops/utils/kube.py +0 -0
  55. {gitops-1.9.0 → gitops-1.10.0}/gitops/utils/tags.py +0 -0
  56. {gitops-1.9.0 → gitops-1.10.0}/gitops/utils/yaml.py +0 -0
  57. {gitops-1.9.0 → gitops-1.10.0}/gitops_server/CHANGELOG.md +0 -0
  58. {gitops-1.9.0 → gitops-1.10.0}/gitops_server/README.md +0 -0
  59. {gitops-1.9.0 → gitops-1.10.0}/gitops_server/__init__.py +0 -0
  60. {gitops-1.9.0 → gitops-1.10.0}/gitops_server/app.py +0 -0
  61. {gitops-1.9.0 → gitops-1.10.0}/gitops_server/main.py +0 -0
  62. {gitops-1.9.0 → gitops-1.10.0}/gitops_server/types.py +0 -0
  63. {gitops-1.9.0 → gitops-1.10.0}/gitops_server/utils/__init__.py +0 -0
  64. {gitops-1.9.0 → gitops-1.10.0}/gitops_server/utils/git.py +0 -0
  65. {gitops-1.9.0 → gitops-1.10.0}/gitops_server/utils/github.py +0 -0
  66. {gitops-1.9.0 → gitops-1.10.0}/gitops_server/utils/github_auth.py +0 -0
  67. {gitops-1.9.0 → gitops-1.10.0}/gitops_server/utils/slack.py +0 -0
  68. {gitops-1.9.0 → gitops-1.10.0}/gitops_server/workers/__init__.py +0 -0
  69. {gitops-1.9.0 → gitops-1.10.0}/gitops_server/workers/deployer/__init__.py +0 -0
  70. {gitops-1.9.0 → gitops-1.10.0}/gitops_server/workers/deployer/hooks.py +0 -0
  71. {gitops-1.9.0 → gitops-1.10.0}/gitops_server/workers/deployer/semaphore_manager.py +0 -0
  72. {gitops-1.9.0 → gitops-1.10.0}/gitops_server/workers/deployer/worker.py +0 -0
  73. {gitops-1.9.0 → gitops-1.10.0}/release-please-config.json +0 -0
  74. {gitops-1.9.0 → gitops-1.10.0}/release.py +0 -0
  75. {gitops-1.9.0 → gitops-1.10.0}/renovate.json +0 -0
  76. {gitops-1.9.0 → gitops-1.10.0}/ruff.toml +0 -0
  77. {gitops-1.9.0 → gitops-1.10.0}/secrets.example.env +0 -0
  78. {gitops-1.9.0 → gitops-1.10.0}/setup.cfg +0 -0
  79. {gitops-1.9.0 → gitops-1.10.0}/tests/__init__.py +0 -0
  80. {gitops-1.9.0 → gitops-1.10.0}/tests/conftest.py +0 -0
  81. {gitops-1.9.0 → gitops-1.10.0}/tests/sample_data.py +0 -0
  82. {gitops-1.9.0 → gitops-1.10.0}/tests/test_app.py +0 -0
  83. {gitops-1.9.0 → gitops-1.10.0}/tests/test_clone_credentials.py +0 -0
  84. {gitops-1.9.0 → gitops-1.10.0}/tests/test_core.py +0 -0
  85. {gitops-1.9.0 → gitops-1.10.0}/tests/test_deploy_concurrent.py +0 -0
  86. {gitops-1.9.0 → gitops-1.10.0}/tests/test_git.py +0 -0
  87. {gitops-1.9.0 → gitops-1.10.0}/tests/test_github_auth.py +0 -0
  88. {gitops-1.9.0 → gitops-1.10.0}/tests/test_gitops_server.py +0 -0
  89. {gitops-1.9.0 → gitops-1.10.0}/tests/test_load_app_definitions.py +0 -0
  90. {gitops-1.9.0 → gitops-1.10.0}/tests/test_utils.py +0 -0
  91. {gitops-1.9.0 → gitops-1.10.0}/tests/test_worker_concurrency.py +0 -0
  92. {gitops-1.9.0 → gitops-1.10.0}/tests/utils.py +0 -0
  93. {gitops-1.9.0 → gitops-1.10.0}/tests/webhook_sample_data.py +0 -0
@@ -1,5 +1,5 @@
1
1
  {
2
- ".": "1.9.0",
2
+ ".": "1.10.0",
3
3
  "gitops_server": "0.15.1",
4
4
  "charts/gitops": "1.3.0"
5
5
  }
@@ -1,5 +1,20 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.10.0](https://github.com/uptick/gitops/compare/gitops-v1.9.0...gitops-v1.10.0) (2026-09-22)
4
+
5
+
6
+ ### Features
7
+
8
+ * **deploy:** setting to skip helm's client-side OpenAPI validation ([3671513](https://github.com/uptick/gitops/commit/36715132c8e04efeb3b7f389595f6dc49c80c3f6))
9
+ * helm 3.22.0, and a setting to skip its OpenAPI validation ([d66fe4a](https://github.com/uptick/gitops/commit/d66fe4a6362498ec7d85e19b57dbae5f6d8ddd6c))
10
+ * **image:** helm 3.22.0, with helm-secrets 4.7.7 to match ([2d871bf](https://github.com/uptick/gitops/commit/2d871bfefe85d1f25e2748519cea0155e7f499bd))
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * upgrade urllib3 to 2.8.0 and anyio to the patched release ([dcd9699](https://github.com/uptick/gitops/commit/dcd96990444176abdddb0e70b8db8e5c0c8d55b1))
16
+ * upgrade urllib3 to 2.8.0 and anyio to the patched release ([14bad7c](https://github.com/uptick/gitops/commit/14bad7c39c6743ff20054c3101ae5802eac8fc9c))
17
+
3
18
  ## [1.9.0](https://github.com/uptick/gitops/compare/gitops-v1.8.0...gitops-v1.9.0) (2026-09-09)
4
19
 
5
20
 
@@ -14,7 +14,7 @@ ARG TARGETARCH
14
14
  ## Install kubectl and dependencies.
15
15
  ##
16
16
  ENV KUBE_LATEST_VERSION="v1.21.3"
17
- ENV HELM_VERSION="v3.6.2" \
17
+ ENV HELM_VERSION="v3.22.0" \
18
18
  VIRTUAL_ENV="/app/.venv" \
19
19
  PATH="/app/.venv/bin:$PATH"
20
20
 
@@ -30,7 +30,7 @@ RUN apt-get update \
30
30
  && chmod +x /usr/local/bin/helm \
31
31
  \
32
32
  # Install helm-secrets plugin
33
- && helm plugin install https://github.com/jkroepke/helm-secrets --version v4.2.2 \
33
+ && helm plugin install https://github.com/jkroepke/helm-secrets --version v4.7.7 \
34
34
  \
35
35
  # Download sops
36
36
  && wget -q https://github.com/mozilla/sops/releases/download/v3.7.3/sops-v3.7.3.linux.${TARGETARCH} -O /usr/local/bin/sops \
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: gitops
3
- Version: 1.9.0
3
+ Version: 1.10.0
4
4
  Summary: Manage multiple apps across one or more k8s clusters.
5
5
  Author-email: Jarek Głowacki <jarekwg@gmail.com>
6
6
  License-File: LICENSE
@@ -6,7 +6,7 @@ from gitops.utils.apps import App, get_app_details, get_apps # type: ignore[att
6
6
 
7
7
  from .utils.cli import success, warning
8
8
 
9
- __version__ = "1.9.0"
9
+ __version__ = "1.10.0"
10
10
 
11
11
 
12
12
  # Checking gitops version matches cluster repo version.
@@ -21,3 +21,13 @@ GITOPS_MAX_PARALLEL_DEPLOYS = os.environ.get("GITOPS_MAX_PARALLEL_DEPLOYS", "5")
21
21
  # two commits before it reaches GITOPS_MAX_PARALLEL_DEPLOYS, so without a bound
22
22
  # here a burst of pushes is only limited by how fast they arrive.
23
23
  GITOPS_MAX_CONCURRENT_DEPLOYMENTS = os.environ.get("GITOPS_MAX_CONCURRENT_DEPLOYMENTS", "20")
24
+
25
+ # Pass --disable-openapi-validation to helm. Off by default: helm keeps checking
26
+ # manifests against the cluster schema before applying them, which costs each
27
+ # helm process a download and parse of that schema. The API server still
28
+ # rejects wrong types and missing fields either way.
29
+ GITOPS_DISABLE_OPENAPI_VALIDATION = os.environ.get("GITOPS_DISABLE_OPENAPI_VALIDATION", "").lower() in (
30
+ "1",
31
+ "true",
32
+ "yes",
33
+ )
@@ -0,0 +1 @@
1
+ __version__ = "1.10.0"
@@ -280,6 +280,7 @@ class Deployer:
280
280
  f" --history-max {MAX_HELM_HISTORY}"
281
281
  " --install"
282
282
  " --timeout=600s"
283
+ f"{' --disable-openapi-validation' if settings.GITOPS_DISABLE_OPENAPI_VALIDATION else ''}"
283
284
  f"{' --set skip_migrations=true' if self.skip_migrations else ''}"
284
285
  f" -f {cfg.name}"
285
286
  f" --namespace={app.namespace}"
@@ -312,6 +313,7 @@ class Deployer:
312
313
  f" --history-max {MAX_HELM_HISTORY}"
313
314
  " --install"
314
315
  " --timeout=600s"
316
+ f"{' --disable-openapi-validation' if settings.GITOPS_DISABLE_OPENAPI_VALIDATION else ''}"
315
317
  f"{' --set skip_migrations=true' if self.skip_migrations else ''}"
316
318
  f" -f {cfg.name}"
317
319
  f" --namespace={app.namespace}"
@@ -1,7 +1,7 @@
1
1
 
2
2
  [project]
3
3
  name = "gitops"
4
- version = "1.9.0"
4
+ version = "1.10.0"
5
5
  description = "Manage multiple apps across one or more k8s clusters."
6
6
  requires-python = ">=3.12"
7
7
  readme = "README.md"
@@ -145,6 +145,27 @@ class TestDeploy:
145
145
  )
146
146
  assert post_mock.call_count == 2
147
147
 
148
+ @patch("gitops_server.workers.deployer.deploy.settings.GITOPS_DISABLE_OPENAPI_VALIDATION", True)
149
+ @patch("gitops_server.workers.deployer.deploy.run")
150
+ @patch("gitops_server.utils.slack.post")
151
+ @patch("gitops_server.workers.deployer.deploy.load_app_definitions", mock_load_app_definitions)
152
+ @patch("gitops_server.workers.deployer.deploy.temp_repo")
153
+ async def test_deployer_disable_openapi_validation_setting_adds_the_helm_flag(
154
+ self, temp_repo_mock, post_mock, run_mock
155
+ ):
156
+ run_mock.return_value = {"exit_code": 0, "output": ""}
157
+ temp_repo_mock.return_value.__aenter__.return_value = "mock-repo"
158
+ semaphore_manager = AppSemaphoreManager()
159
+ deployer = await Deployer.from_push_event(SAMPLE_GITHUB_PAYLOAD, semaphore_manager)
160
+ await deployer.deploy()
161
+ assert run_mock.call_count == 4
162
+ for call in (run_mock.call_args_list[1], run_mock.call_args_list[3]):
163
+ assert re.match(
164
+ r"helm secrets upgrade --create-namespace --history-max 3 --install --timeout=600s"
165
+ r" --disable-openapi-validation -f .+\.yml --namespace=mynamespace sample-app-\d mock-repo",
166
+ call[0][0],
167
+ )
168
+
148
169
  @patch("gitops_server.workers.deployer.deploy.run")
149
170
  @patch("gitops_server.utils.slack.post")
150
171
  @patch("gitops_server.workers.deployer.deploy.Deployer.post_result")
@@ -7,6 +7,12 @@ resolution-markers = [
7
7
  "python_full_version < '3.13'",
8
8
  ]
9
9
 
10
+ [options]
11
+
12
+ [options.exclude-newer-package]
13
+ anyio = "2026-09-19T14:00:00Z"
14
+ urllib3 = "2026-09-16T14:00:00Z"
15
+
10
16
  [[package]]
11
17
  name = "aiohappyeyeballs"
12
18
  version = "2.6.2"
@@ -149,16 +155,15 @@ wheels = [
149
155
 
150
156
  [[package]]
151
157
  name = "anyio"
152
- version = "4.8.0"
158
+ version = "4.14.2"
153
159
  source = { registry = "https://pypi.org/simple" }
154
160
  dependencies = [
155
161
  { name = "idna" },
156
- { name = "sniffio" },
157
162
  { name = "typing-extensions", marker = "python_full_version < '3.13'" },
158
163
  ]
159
- sdist = { url = "https://files.pythonhosted.org/packages/a3/73/199a98fc2dae33535d6b8e8e6ec01f8c1d76c9adb096c6b7d64823038cde/anyio-4.8.0.tar.gz", hash = "sha256:1d9fe889df5212298c0c0723fa20479d1b94883a2df44bd3897aa91083316f7a", size = 181126, upload-time = "2025-01-05T13:13:11.095Z" }
164
+ sdist = { url = "https://files.pythonhosted.org/packages/61/cc/a381afa6efea9f496eff839d4a6a1aed3bfafc7b3ab4b0d1b243a12573dd/anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f", size = 260176, upload-time = "2026-07-12T20:29:07.082Z" }
160
165
  wheels = [
161
- { url = "https://files.pythonhosted.org/packages/46/eb/e7f063ad1fec6b3178a3cd82d1a3c4de82cccf283fc42746168188e1cdd5/anyio-4.8.0-py3-none-any.whl", hash = "sha256:b5011f270ab5eb0abf13385f851315585cc37ef330dd88e27ec3d34d651fd47a", size = 96041, upload-time = "2025-01-05T13:13:07.985Z" },
166
+ { url = "https://files.pythonhosted.org/packages/da/35/f2287558c17e29fafc8ef3daf819bb9834061cfa43bff8014f7df7f63bdc/anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494", size = 125813, upload-time = "2026-07-12T20:29:05.763Z" },
162
167
  ]
163
168
 
164
169
  [[package]]
@@ -495,7 +500,7 @@ wheels = [
495
500
 
496
501
  [[package]]
497
502
  name = "gitops"
498
- version = "1.9.0"
503
+ version = "1.10.0"
499
504
  source = { editable = "." }
500
505
  dependencies = [
501
506
  { name = "boto3" },
@@ -631,7 +636,7 @@ resolution-markers = [
631
636
  "python_full_version >= '3.14'",
632
637
  ]
633
638
  dependencies = [
634
- { name = "typing-extensions", marker = "python_full_version >= '3.14'" },
639
+ { name = "typing-extensions" },
635
640
  ]
636
641
  sdist = { url = "https://files.pythonhosted.org/packages/b7/48/af6173dbca4454f4637a4678b67f52ca7e0c1ed7d5894d89d434fecede05/grpcio-1.80.0.tar.gz", hash = "sha256:29aca15edd0688c22ba01d7cc01cb000d72b2033f4a3c72a81a19b56fd143257", size = 12978905, upload-time = "2026-03-30T08:49:10.502Z" }
637
642
  wheels = [
@@ -1532,15 +1537,6 @@ wheels = [
1532
1537
  { url = "https://files.pythonhosted.org/packages/25/2d/8724ef191cb64907de1e4e4436462955501e00f859a53d0aa794d0d060ff/slack_sdk-3.34.0-py2.py3-none-any.whl", hash = "sha256:c61f57f310d85be83466db5a98ab6ae3bb2e5587437b54fa0daa8fae6a0feffa", size = 292480, upload-time = "2024-12-17T22:20:28.949Z" },
1533
1538
  ]
1534
1539
 
1535
- [[package]]
1536
- name = "sniffio"
1537
- version = "1.3.1"
1538
- source = { registry = "https://pypi.org/simple" }
1539
- sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372, upload-time = "2024-02-25T23:20:04.057Z" }
1540
- wheels = [
1541
- { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" },
1542
- ]
1543
-
1544
1540
  [[package]]
1545
1541
  name = "starlette"
1546
1542
  version = "1.3.1"
@@ -1667,11 +1663,11 @@ fastapi = [
1667
1663
 
1668
1664
  [[package]]
1669
1665
  name = "urllib3"
1670
- version = "2.7.0"
1666
+ version = "2.8.0"
1671
1667
  source = { registry = "https://pypi.org/simple" }
1672
- sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" }
1668
+ sdist = { url = "https://files.pythonhosted.org/packages/e3/05/b17359e1cefb4f909b5e40b1b90a496d987258916dbbf88e842c729f510e/urllib3-2.8.0.tar.gz", hash = "sha256:63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63", size = 458972, upload-time = "2026-09-15T19:29:36.253Z" }
1673
1669
  wheels = [
1674
- { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" },
1670
+ { url = "https://files.pythonhosted.org/packages/92/9d/c4e665119135114480843e7ab388fa94d8480650450e6f8e26b70d323a4c/urllib3-2.8.0-py3-none-any.whl", hash = "sha256:0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3", size = 135717, upload-time = "2026-09-15T19:29:34.577Z" },
1675
1671
  ]
1676
1672
 
1677
1673
  [[package]]
@@ -1 +0,0 @@
1
- __version__ = "1.9.0"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes