k8stools 2.0.0__tar.gz → 2.0.2__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 (36) hide show
  1. {k8stools-2.0.0 → k8stools-2.0.2}/PKG-INFO +3 -1
  2. {k8stools-2.0.0 → k8stools-2.0.2}/pyproject.toml +3 -5
  3. {k8stools-2.0.0 → k8stools-2.0.2}/src/k8stools/__init__.py +1 -1
  4. {k8stools-2.0.0 → k8stools-2.0.2}/src/k8stools/mcp_client.py +14 -16
  5. {k8stools-2.0.0 → k8stools-2.0.2}/uv.lock +6 -234
  6. {k8stools-2.0.0 → k8stools-2.0.2}/.claude/settings.local.json +0 -0
  7. {k8stools-2.0.0 → k8stools-2.0.2}/.github/workflows/unit-tests.yml +0 -0
  8. {k8stools-2.0.0 → k8stools-2.0.2}/.gitignore +0 -0
  9. {k8stools-2.0.0 → k8stools-2.0.2}/.python-version +0 -0
  10. {k8stools-2.0.0 → k8stools-2.0.2}/.vscode/mcp.json +0 -0
  11. {k8stools-2.0.0 → k8stools-2.0.2}/.vscode/settings.json +0 -0
  12. {k8stools-2.0.0 → k8stools-2.0.2}/CLAUDE.md +0 -0
  13. {k8stools-2.0.0 → k8stools-2.0.2}/LICENSE +0 -0
  14. {k8stools-2.0.0 → k8stools-2.0.2}/README.md +0 -0
  15. {k8stools-2.0.0 → k8stools-2.0.2}/chat-with-cluster.png +0 -0
  16. {k8stools-2.0.0 → k8stools-2.0.2}/designs/mock-state-capture.md +0 -0
  17. {k8stools-2.0.0 → k8stools-2.0.2}/docs/ROADMAP.md +0 -0
  18. {k8stools-2.0.0 → k8stools-2.0.2}/envrc.template +0 -0
  19. {k8stools-2.0.0 → k8stools-2.0.2}/src/k8stools/capture.py +0 -0
  20. {k8stools-2.0.0 → k8stools-2.0.2}/src/k8stools/fixtures/otel-demo.json +0 -0
  21. {k8stools-2.0.0 → k8stools-2.0.2}/src/k8stools/k8s_tools.py +0 -0
  22. {k8stools-2.0.0 → k8stools-2.0.2}/src/k8stools/mcp_server.py +0 -0
  23. {k8stools-2.0.0 → k8stools-2.0.2}/src/k8stools/mock_state.py +0 -0
  24. {k8stools-2.0.0 → k8stools-2.0.2}/src/k8stools/mock_tools.py +0 -0
  25. {k8stools-2.0.0 → k8stools-2.0.2}/src/k8stools/redaction.py +0 -0
  26. {k8stools-2.0.0 → k8stools-2.0.2}/tests/conftest.py +0 -0
  27. {k8stools-2.0.0 → k8stools-2.0.2}/tests/test_capture.py +0 -0
  28. {k8stools-2.0.0 → k8stools-2.0.2}/tests/test_k8s_tools.py +0 -0
  29. {k8stools-2.0.0 → k8stools-2.0.2}/tests/test_k8s_tools_realk8s.py +0 -0
  30. {k8stools-2.0.0 → k8stools-2.0.2}/tests/test_mcp_client.py +0 -0
  31. {k8stools-2.0.0 → k8stools-2.0.2}/tests/test_mock_state.py +0 -0
  32. {k8stools-2.0.0 → k8stools-2.0.2}/tests/test_mock_tools.py +0 -0
  33. {k8stools-2.0.0 → k8stools-2.0.2}/tests/test_new_tools.py +0 -0
  34. {k8stools-2.0.0 → k8stools-2.0.2}/tests/test_redaction.py +0 -0
  35. {k8stools-2.0.0 → k8stools-2.0.2}/tests/test_replicaset_tool.py +0 -0
  36. {k8stools-2.0.0 → k8stools-2.0.2}/tests/test_version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: k8stools
3
- Version: 2.0.0
3
+ Version: 2.0.2
4
4
  Summary: Tools and an MCP server for building Kubernetes agents
5
5
  Project-URL: Homepage, https://github.com/BenedatLLC/k8stools
6
6
  Author: Jeff Fischer
@@ -212,7 +212,9 @@ Classifier: Programming Language :: Python :: 3
212
212
  Requires-Python: >=3.12
213
213
  Requires-Dist: kubernetes>=36.0.3
214
214
  Requires-Dist: mcp>=2.1.1
215
+ Requires-Dist: pydantic>=2.0
215
216
  Requires-Dist: pyyaml>=6.0
217
+ Requires-Dist: rich>=14.0.0
216
218
  Description-Content-Type: text/markdown
217
219
 
218
220
  # Kubernetes Tools
@@ -1,7 +1,7 @@
1
1
 
2
2
  [project]
3
3
  name = "k8stools"
4
- version = "2.0.0"
4
+ version = "2.0.2"
5
5
  description = "Tools and an MCP server for building Kubernetes agents"
6
6
  readme = "README.md"
7
7
  requires-python = ">=3.12"
@@ -17,7 +17,9 @@ classifiers = [
17
17
  dependencies = [
18
18
  "kubernetes>=36.0.3",
19
19
  "mcp>=2.1.1",
20
+ "pydantic>=2.0",
20
21
  "pyyaml>=6.0",
22
+ "rich>=14.0.0",
21
23
  ]
22
24
 
23
25
  urls = { "Homepage" = "https://github.com/BenedatLLC/k8stools" }
@@ -29,11 +31,7 @@ k8s-capture-state = "k8stools.capture:main"
29
31
 
30
32
  [dependency-groups]
31
33
  dev = [
32
- "build>=1.2.2.post1",
33
- "Pygments>=2.19",
34
34
  "pytest>=8.4.1",
35
- "rich>=14.0.0",
36
- "twine>=6.1.0",
37
35
  ]
38
36
 
39
37
  [build-system]
@@ -78,4 +78,4 @@ the built-in OTel Demo snapshot by default, or your own via load_mock_state() or
78
78
  the server's --state-file option.
79
79
  """
80
80
 
81
- __version__ = "2.0.0"
81
+ __version__ = "2.0.2"
@@ -7,7 +7,6 @@ Based on sample client from the MCP python SDK.
7
7
  import argparse
8
8
  import asyncio
9
9
  import os
10
- from os.path import dirname, join, abspath, exists
11
10
  import sys
12
11
  from typing import Any
13
12
 
@@ -16,24 +15,23 @@ from mcp import ClientSession, StdioServerParameters, types
16
15
  from mcp.client.stdio import stdio_client
17
16
  from mcp.types import ListToolsResult, Tool
18
17
 
19
- from rich import print
20
18
  from rich.console import Console
21
19
  from rich.markdown import Markdown
22
20
 
23
- print(f"sys.argv[0] = {sys.argv[0]}") # XXX
24
- if sys.argv[0].endswith('ks8-mcp-client'):
25
- # this was run as an installed script
26
- COMMAND = join(dirname(abspath(sys.argv[0])), 'k8s-mcp-server')
27
- if not exists(COMMAND):
28
- raise Exception(f"Did not find server script at {COMMAND}")
29
- ENV = {}
30
- ARGS = []
31
- else:
32
- COMMAND=sys.executable
33
- ENV = {"PYTHONPATH":'src',}
34
- ARGS = ["-m", "k8stools.mcp_server"]
35
-
36
- # Create server parameters for stdio connection
21
+ # Launch the server as a module of the current interpreter. This works for an
22
+ # installed package and an editable checkout alike, and does not depend on where
23
+ # the console scripts were placed - which the previous approach did, by looking
24
+ # for k8s-mcp-server next to argv[0].
25
+ COMMAND = sys.executable
26
+ ARGS = ["-m", "k8stools.mcp_server"]
27
+
28
+ # StdioServerParameters replaces the child's environment rather than adding to
29
+ # it, so anything the server needs has to be passed explicitly. PYTHONPATH goes
30
+ # through so an uninstalled checkout (the tests run with PYTHONPATH=src) can
31
+ # still import k8stools in the spawned server.
32
+ ENV: dict[str, str] = {}
33
+ if 'PYTHONPATH' in os.environ:
34
+ ENV['PYTHONPATH'] = os.environ['PYTHONPATH']
37
35
  if 'KUBECONFIG' in os.environ:
38
36
  ENV['KUBECONFIG'] = os.environ['KUBECONFIG']
39
37
  server_params = StdioServerParameters(
@@ -178,20 +178,6 @@ wheels = [
178
178
  { url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", size = 63815, upload-time = "2025-03-13T11:10:21.14Z" },
179
179
  ]
180
180
 
181
- [[package]]
182
- name = "build"
183
- version = "1.2.2.post1"
184
- source = { registry = "https://pypi.org/simple" }
185
- dependencies = [
186
- { name = "colorama", marker = "os_name == 'nt'" },
187
- { name = "packaging" },
188
- { name = "pyproject-hooks" },
189
- ]
190
- sdist = { url = "https://files.pythonhosted.org/packages/7d/46/aeab111f8e06793e4f0e421fcad593d547fb8313b50990f31681ee2fb1ad/build-1.2.2.post1.tar.gz", hash = "sha256:b36993e92ca9375a219c99e606a122ff365a760a2d4bba0caa09bd5278b608b7", size = 46701, upload-time = "2024-10-06T17:22:25.251Z" }
191
- wheels = [
192
- { url = "https://files.pythonhosted.org/packages/84/c2/80633736cd183ee4a62107413def345f7e6e3c01563dbca1417363cf957e/build-1.2.2.post1-py3-none-any.whl", hash = "sha256:1d61c0887fa860c01971625baae8bdd338e517b836a2f70dd1f7aa3a6b2fc5b5", size = 22950, upload-time = "2024-10-06T17:22:23.299Z" },
193
- ]
194
-
195
181
  [[package]]
196
182
  name = "certifi"
197
183
  version = "2025.7.14"
@@ -325,15 +311,6 @@ wheels = [
325
311
  { url = "https://files.pythonhosted.org/packages/79/b3/28ac139109d9005ad3f6b6f8976ffede6706a6478e21c889ce36c840918e/cryptography-45.0.5-cp37-abi3-win_amd64.whl", hash = "sha256:90cb0a7bb35959f37e23303b7eed0a32280510030daba3f7fdfbb65defde6a97", size = 3390016, upload-time = "2025-07-02T13:05:50.811Z" },
326
312
  ]
327
313
 
328
- [[package]]
329
- name = "docutils"
330
- version = "0.21.2"
331
- source = { registry = "https://pypi.org/simple" }
332
- sdist = { url = "https://files.pythonhosted.org/packages/ae/ed/aefcc8cd0ba62a0560c3c18c33925362d46c6075480bfa4df87b28e169a9/docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", size = 2204444, upload-time = "2024-04-23T18:57:18.24Z" }
333
- wheels = [
334
- { url = "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", size = 587408, upload-time = "2024-04-23T18:57:14.835Z" },
335
- ]
336
-
337
314
  [[package]]
338
315
  name = "durationpy"
339
316
  version = "0.10"
@@ -520,18 +497,6 @@ wheels = [
520
497
  { url = "https://files.pythonhosted.org/packages/9b/43/832f631d32e4f1211caa2ba368317739fe71f0b8530e4c9d15dc454bac2a/httpx2_jsfetch-1.0-py3-none-any.whl", hash = "sha256:cb916b707601e69a07721aabc8f3f6659be3a6893bc1ff5c6f9e02241df2da32", size = 6382, upload-time = "2026-08-07T00:13:06.567Z" },
521
498
  ]
522
499
 
523
- [[package]]
524
- name = "id"
525
- version = "1.5.0"
526
- source = { registry = "https://pypi.org/simple" }
527
- dependencies = [
528
- { name = "requests" },
529
- ]
530
- sdist = { url = "https://files.pythonhosted.org/packages/22/11/102da08f88412d875fa2f1a9a469ff7ad4c874b0ca6fed0048fe385bdb3d/id-1.5.0.tar.gz", hash = "sha256:292cb8a49eacbbdbce97244f47a97b4c62540169c976552e497fd57df0734c1d", size = 15237, upload-time = "2024-12-04T19:53:05.575Z" }
531
- wheels = [
532
- { url = "https://files.pythonhosted.org/packages/9f/cb/18326d2d89ad3b0dd143da971e77afd1e6ca6674f1b1c3df4b6bec6279fc/id-1.5.0-py3-none-any.whl", hash = "sha256:f1434e1cef91f2cbb8a4ec64663d5a23b9ed43ef44c4c957d02583d61714c658", size = 13611, upload-time = "2024-12-04T19:53:03.02Z" },
533
- ]
534
-
535
500
  [[package]]
536
501
  name = "idna"
537
502
  version = "3.19"
@@ -550,48 +515,6 @@ wheels = [
550
515
  { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload-time = "2025-03-19T20:10:01.071Z" },
551
516
  ]
552
517
 
553
- [[package]]
554
- name = "jaraco-classes"
555
- version = "3.4.0"
556
- source = { registry = "https://pypi.org/simple" }
557
- dependencies = [
558
- { name = "more-itertools" },
559
- ]
560
- sdist = { url = "https://files.pythonhosted.org/packages/06/c0/ed4a27bc5571b99e3cff68f8a9fa5b56ff7df1c2251cc715a652ddd26402/jaraco.classes-3.4.0.tar.gz", hash = "sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd", size = 11780, upload-time = "2024-03-31T07:27:36.643Z" }
561
- wheels = [
562
- { url = "https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl", hash = "sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790", size = 6777, upload-time = "2024-03-31T07:27:34.792Z" },
563
- ]
564
-
565
- [[package]]
566
- name = "jaraco-context"
567
- version = "6.0.1"
568
- source = { registry = "https://pypi.org/simple" }
569
- sdist = { url = "https://files.pythonhosted.org/packages/df/ad/f3777b81bf0b6e7bc7514a1656d3e637b2e8e15fab2ce3235730b3e7a4e6/jaraco_context-6.0.1.tar.gz", hash = "sha256:9bae4ea555cf0b14938dc0aee7c9f32ed303aa20a3b73e7dc80111628792d1b3", size = 13912, upload-time = "2024-08-20T03:39:27.358Z" }
570
- wheels = [
571
- { url = "https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl", hash = "sha256:f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4", size = 6825, upload-time = "2024-08-20T03:39:25.966Z" },
572
- ]
573
-
574
- [[package]]
575
- name = "jaraco-functools"
576
- version = "4.2.1"
577
- source = { registry = "https://pypi.org/simple" }
578
- dependencies = [
579
- { name = "more-itertools" },
580
- ]
581
- sdist = { url = "https://files.pythonhosted.org/packages/49/1c/831faaaa0f090b711c355c6d8b2abf277c72133aab472b6932b03322294c/jaraco_functools-4.2.1.tar.gz", hash = "sha256:be634abfccabce56fa3053f8c7ebe37b682683a4ee7793670ced17bab0087353", size = 19661, upload-time = "2025-06-21T19:22:03.201Z" }
582
- wheels = [
583
- { url = "https://files.pythonhosted.org/packages/f3/fd/179a20f832824514df39a90bb0e5372b314fea99f217f5ab942b10a8a4e8/jaraco_functools-4.2.1-py3-none-any.whl", hash = "sha256:590486285803805f4b1f99c60ca9e94ed348d4added84b74c7a12885561e524e", size = 10349, upload-time = "2025-06-21T19:22:02.039Z" },
584
- ]
585
-
586
- [[package]]
587
- name = "jeepney"
588
- version = "0.9.0"
589
- source = { registry = "https://pypi.org/simple" }
590
- sdist = { url = "https://files.pythonhosted.org/packages/7b/6f/357efd7602486741aa73ffc0617fb310a29b588ed0fd69c2399acbb85b0c/jeepney-0.9.0.tar.gz", hash = "sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732", size = 106758, upload-time = "2025-02-27T18:51:01.684Z" }
591
- wheels = [
592
- { url = "https://files.pythonhosted.org/packages/b2/a3/e137168c9c44d18eff0376253da9f1e9234d0239e0ee230d2fee6cea8e55/jeepney-0.9.0-py3-none-any.whl", hash = "sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683", size = 49010, upload-time = "2025-02-27T18:51:00.104Z" },
593
- ]
594
-
595
518
  [[package]]
596
519
  name = "jsonschema"
597
520
  version = "4.25.0"
@@ -621,55 +544,32 @@ wheels = [
621
544
 
622
545
  [[package]]
623
546
  name = "k8stools"
624
- version = "2.0.0"
547
+ version = "2.0.2"
625
548
  source = { editable = "." }
626
549
  dependencies = [
627
550
  { name = "kubernetes" },
628
551
  { name = "mcp" },
552
+ { name = "pydantic" },
629
553
  { name = "pyyaml" },
554
+ { name = "rich" },
630
555
  ]
631
556
 
632
557
  [package.dev-dependencies]
633
558
  dev = [
634
- { name = "build" },
635
- { name = "pygments" },
636
559
  { name = "pytest" },
637
- { name = "rich" },
638
- { name = "twine" },
639
560
  ]
640
561
 
641
562
  [package.metadata]
642
563
  requires-dist = [
643
564
  { name = "kubernetes", specifier = ">=36.0.3" },
644
565
  { name = "mcp", specifier = ">=2.1.1" },
566
+ { name = "pydantic", specifier = ">=2.0" },
645
567
  { name = "pyyaml", specifier = ">=6.0" },
646
- ]
647
-
648
- [package.metadata.requires-dev]
649
- dev = [
650
- { name = "build", specifier = ">=1.2.2.post1" },
651
- { name = "pygments", specifier = ">=2.19" },
652
- { name = "pytest", specifier = ">=8.4.1" },
653
568
  { name = "rich", specifier = ">=14.0.0" },
654
- { name = "twine", specifier = ">=6.1.0" },
655
569
  ]
656
570
 
657
- [[package]]
658
- name = "keyring"
659
- version = "25.6.0"
660
- source = { registry = "https://pypi.org/simple" }
661
- dependencies = [
662
- { name = "jaraco-classes" },
663
- { name = "jaraco-context" },
664
- { name = "jaraco-functools" },
665
- { name = "jeepney", marker = "sys_platform == 'linux'" },
666
- { name = "pywin32-ctypes", marker = "sys_platform == 'win32'" },
667
- { name = "secretstorage", marker = "sys_platform == 'linux'" },
668
- ]
669
- sdist = { url = "https://files.pythonhosted.org/packages/70/09/d904a6e96f76ff214be59e7aa6ef7190008f52a0ab6689760a98de0bf37d/keyring-25.6.0.tar.gz", hash = "sha256:0b39998aa941431eb3d9b0d4b2460bc773b9df6fed7621c2dfb291a7e0187a66", size = 62750, upload-time = "2024-12-25T15:26:45.782Z" }
670
- wheels = [
671
- { url = "https://files.pythonhosted.org/packages/d3/32/da7f44bcb1105d3e88a0b74ebdca50c59121d2ddf71c9e34ba47df7f3a56/keyring-25.6.0-py3-none-any.whl", hash = "sha256:552a3f7af126ece7ed5c89753650eec89c7eaae8617d0aa4d9ad2b75111266bd", size = 39085, upload-time = "2024-12-25T15:26:44.377Z" },
672
- ]
571
+ [package.metadata.requires-dev]
572
+ dev = [{ name = "pytest", specifier = ">=8.4.1" }]
673
573
 
674
574
  [[package]]
675
575
  name = "kubernetes"
@@ -753,15 +653,6 @@ wheels = [
753
653
  { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" },
754
654
  ]
755
655
 
756
- [[package]]
757
- name = "more-itertools"
758
- version = "10.7.0"
759
- source = { registry = "https://pypi.org/simple" }
760
- sdist = { url = "https://files.pythonhosted.org/packages/ce/a0/834b0cebabbfc7e311f30b46c8188790a37f89fc8d756660346fe5abfd09/more_itertools-10.7.0.tar.gz", hash = "sha256:9fddd5403be01a94b204faadcff459ec3568cf110265d3c54323e1e866ad29d3", size = 127671, upload-time = "2025-04-22T14:17:41.838Z" }
761
- wheels = [
762
- { url = "https://files.pythonhosted.org/packages/2b/9f/7ba6f94fc1e9ac3d2b853fdff3035fb2fa5afbed898c4a72b8a020610594/more_itertools-10.7.0-py3-none-any.whl", hash = "sha256:d43980384673cb07d2f7d2d918c616b30c659c089ee23953f601d6609c67510e", size = 65278, upload-time = "2025-04-22T14:17:40.49Z" },
763
- ]
764
-
765
656
  [[package]]
766
657
  name = "multidict"
767
658
  version = "6.7.1"
@@ -861,39 +752,6 @@ wheels = [
861
752
  { url = "https://files.pythonhosted.org/packages/81/08/7036c080d7117f28a4af526d794aab6a84463126db031b007717c1a6676e/multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56", size = 12319, upload-time = "2026-01-26T02:46:44.004Z" },
862
753
  ]
863
754
 
864
- [[package]]
865
- name = "nh3"
866
- version = "0.3.0"
867
- source = { registry = "https://pypi.org/simple" }
868
- sdist = { url = "https://files.pythonhosted.org/packages/c3/a4/96cff0977357f60f06ec4368c4c7a7a26cccfe7c9fcd54f5378bf0428fd3/nh3-0.3.0.tar.gz", hash = "sha256:d8ba24cb31525492ea71b6aac11a4adac91d828aadeff7c4586541bf5dc34d2f", size = 19655, upload-time = "2025-07-17T14:43:37.05Z" }
869
- wheels = [
870
- { url = "https://files.pythonhosted.org/packages/b4/11/340b7a551916a4b2b68c54799d710f86cf3838a4abaad8e74d35360343bb/nh3-0.3.0-cp313-cp313t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:a537ece1bf513e5a88d8cff8a872e12fe8d0f42ef71dd15a5e7520fecd191bbb", size = 1427992, upload-time = "2025-07-17T14:43:06.848Z" },
871
- { url = "https://files.pythonhosted.org/packages/ad/7f/7c6b8358cf1222921747844ab0eef81129e9970b952fcb814df417159fb9/nh3-0.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c915060a2c8131bef6a29f78debc29ba40859b6dbe2362ef9e5fd44f11487c2", size = 798194, upload-time = "2025-07-17T14:43:08.263Z" },
872
- { url = "https://files.pythonhosted.org/packages/63/da/c5fd472b700ba37d2df630a9e0d8cc156033551ceb8b4c49cc8a5f606b68/nh3-0.3.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ba0caa8aa184196daa6e574d997a33867d6d10234018012d35f86d46024a2a95", size = 837884, upload-time = "2025-07-17T14:43:09.233Z" },
873
- { url = "https://files.pythonhosted.org/packages/4c/3c/cba7b26ccc0ef150c81646478aa32f9c9535234f54845603c838a1dc955c/nh3-0.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:80fe20171c6da69c7978ecba33b638e951b85fb92059259edd285ff108b82a6d", size = 996365, upload-time = "2025-07-17T14:43:10.243Z" },
874
- { url = "https://files.pythonhosted.org/packages/f3/ba/59e204d90727c25b253856e456ea61265ca810cda8ee802c35f3fadaab00/nh3-0.3.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:e90883f9f85288f423c77b3f5a6f4486375636f25f793165112679a7b6363b35", size = 1071042, upload-time = "2025-07-17T14:43:11.57Z" },
875
- { url = "https://files.pythonhosted.org/packages/10/71/2fb1834c10fab6d9291d62c95192ea2f4c7518bd32ad6c46aab5d095cb87/nh3-0.3.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:0649464ac8eee018644aacbc103874ccbfac80e3035643c3acaab4287e36e7f5", size = 995737, upload-time = "2025-07-17T14:43:12.659Z" },
876
- { url = "https://files.pythonhosted.org/packages/33/c1/8f8ccc2492a000b6156dce68a43253fcff8b4ce70ab4216d08f90a2ac998/nh3-0.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:1adeb1062a1c2974bc75b8d1ecb014c5fd4daf2df646bbe2831f7c23659793f9", size = 980552, upload-time = "2025-07-17T14:43:13.763Z" },
877
- { url = "https://files.pythonhosted.org/packages/2f/d6/f1c6e091cbe8700401c736c2bc3980c46dca770a2cf6a3b48a175114058e/nh3-0.3.0-cp313-cp313t-win32.whl", hash = "sha256:7275fdffaab10cc5801bf026e3c089d8de40a997afc9e41b981f7ac48c5aa7d5", size = 593618, upload-time = "2025-07-17T14:43:15.098Z" },
878
- { url = "https://files.pythonhosted.org/packages/23/1e/80a8c517655dd40bb13363fc4d9e66b2f13245763faab1a20f1df67165a7/nh3-0.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:423201bbdf3164a9e09aa01e540adbb94c9962cc177d5b1cbb385f5e1e79216e", size = 598948, upload-time = "2025-07-17T14:43:16.064Z" },
879
- { url = "https://files.pythonhosted.org/packages/9a/e0/af86d2a974c87a4ba7f19bc3b44a8eaa3da480de264138fec82fe17b340b/nh3-0.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:16f8670201f7e8e0e05ed1a590eb84bfa51b01a69dd5caf1d3ea57733de6a52f", size = 580479, upload-time = "2025-07-17T14:43:17.038Z" },
880
- { url = "https://files.pythonhosted.org/packages/0c/e0/cf1543e798ba86d838952e8be4cb8d18e22999be2a24b112a671f1c04fd6/nh3-0.3.0-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:ec6cfdd2e0399cb79ba4dcffb2332b94d9696c52272ff9d48a630c5dca5e325a", size = 1442218, upload-time = "2025-07-17T14:43:18.087Z" },
881
- { url = "https://files.pythonhosted.org/packages/5c/86/a96b1453c107b815f9ab8fac5412407c33cc5c7580a4daf57aabeb41b774/nh3-0.3.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5e7185599f89b0e391e2f29cc12dc2e206167380cea49b33beda4891be2fe1", size = 823791, upload-time = "2025-07-17T14:43:19.721Z" },
882
- { url = "https://files.pythonhosted.org/packages/97/33/11e7273b663839626f714cb68f6eb49899da5a0d9b6bc47b41fe870259c2/nh3-0.3.0-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:389d93d59b8214d51c400fb5b07866c2a4f79e4e14b071ad66c92184fec3a392", size = 811143, upload-time = "2025-07-17T14:43:20.779Z" },
883
- { url = "https://files.pythonhosted.org/packages/6a/1b/b15bd1ce201a1a610aeb44afd478d55ac018b4475920a3118ffd806e2483/nh3-0.3.0-cp38-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:e9e6a7e4d38f7e8dda9edd1433af5170c597336c1a74b4693c5cb75ab2b30f2a", size = 1064661, upload-time = "2025-07-17T14:43:21.839Z" },
884
- { url = "https://files.pythonhosted.org/packages/8f/14/079670fb2e848c4ba2476c5a7a2d1319826053f4f0368f61fca9bb4227ae/nh3-0.3.0-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7852f038a054e0096dac12b8141191e02e93e0b4608c4b993ec7d4ffafea4e49", size = 997061, upload-time = "2025-07-17T14:43:23.179Z" },
885
- { url = "https://files.pythonhosted.org/packages/a3/e5/ac7fc565f5d8bce7f979d1afd68e8cb415020d62fa6507133281c7d49f91/nh3-0.3.0-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af5aa8127f62bbf03d68f67a956627b1bd0469703a35b3dad28d0c1195e6c7fb", size = 924761, upload-time = "2025-07-17T14:43:24.23Z" },
886
- { url = "https://files.pythonhosted.org/packages/39/2c/6394301428b2017a9d5644af25f487fa557d06bc8a491769accec7524d9a/nh3-0.3.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f416c35efee3e6a6c9ab7716d9e57aa0a49981be915963a82697952cba1353e1", size = 803959, upload-time = "2025-07-17T14:43:26.377Z" },
887
- { url = "https://files.pythonhosted.org/packages/4e/9a/344b9f9c4bd1c2413a397f38ee6a3d5db30f1a507d4976e046226f12b297/nh3-0.3.0-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:37d3003d98dedca6cd762bf88f2e70b67f05100f6b949ffe540e189cc06887f9", size = 844073, upload-time = "2025-07-17T14:43:27.375Z" },
888
- { url = "https://files.pythonhosted.org/packages/66/3f/cd37f76c8ca277b02a84aa20d7bd60fbac85b4e2cbdae77cb759b22de58b/nh3-0.3.0-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:634e34e6162e0408e14fb61d5e69dbaea32f59e847cfcfa41b66100a6b796f62", size = 1000680, upload-time = "2025-07-17T14:43:28.452Z" },
889
- { url = "https://files.pythonhosted.org/packages/ee/db/7aa11b44bae4e7474feb1201d8dee04fabe5651c7cb51409ebda94a4ed67/nh3-0.3.0-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:b0612ccf5de8a480cf08f047b08f9d3fecc12e63d2ee91769cb19d7290614c23", size = 1076613, upload-time = "2025-07-17T14:43:30.031Z" },
890
- { url = "https://files.pythonhosted.org/packages/97/03/03f79f7e5178eb1ad5083af84faff471e866801beb980cc72943a4397368/nh3-0.3.0-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:c7a32a7f0d89f7d30cb8f4a84bdbd56d1eb88b78a2434534f62c71dac538c450", size = 1001418, upload-time = "2025-07-17T14:43:31.429Z" },
891
- { url = "https://files.pythonhosted.org/packages/ce/55/1974bcc16884a397ee699cebd3914e1f59be64ab305533347ca2d983756f/nh3-0.3.0-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3f1b4f8a264a0c86ea01da0d0c390fe295ea0bcacc52c2103aca286f6884f518", size = 986499, upload-time = "2025-07-17T14:43:32.459Z" },
892
- { url = "https://files.pythonhosted.org/packages/c9/50/76936ec021fe1f3270c03278b8af5f2079038116b5d0bfe8538ffe699d69/nh3-0.3.0-cp38-abi3-win32.whl", hash = "sha256:6d68fa277b4a3cf04e5c4b84dd0c6149ff7d56c12b3e3fab304c525b850f613d", size = 599000, upload-time = "2025-07-17T14:43:33.852Z" },
893
- { url = "https://files.pythonhosted.org/packages/8c/ae/324b165d904dc1672eee5f5661c0a68d4bab5b59fbb07afb6d8d19a30b45/nh3-0.3.0-cp38-abi3-win_amd64.whl", hash = "sha256:bae63772408fd63ad836ec569a7c8f444dd32863d0c67f6e0b25ebbd606afa95", size = 604530, upload-time = "2025-07-17T14:43:34.95Z" },
894
- { url = "https://files.pythonhosted.org/packages/5b/76/3165e84e5266d146d967a6cc784ff2fbf6ddd00985a55ec006b72bc39d5d/nh3-0.3.0-cp38-abi3-win_arm64.whl", hash = "sha256:d97d3efd61404af7e5721a0e74d81cdbfc6e5f97e11e731bb6d090e30a7b62b2", size = 585971, upload-time = "2025-07-17T14:43:35.936Z" },
895
- ]
896
-
897
755
  [[package]]
898
756
  name = "oauthlib"
899
757
  version = "3.3.1"
@@ -1149,15 +1007,6 @@ crypto = [
1149
1007
  { name = "cryptography" },
1150
1008
  ]
1151
1009
 
1152
- [[package]]
1153
- name = "pyproject-hooks"
1154
- version = "1.2.0"
1155
- source = { registry = "https://pypi.org/simple" }
1156
- sdist = { url = "https://files.pythonhosted.org/packages/e7/82/28175b2414effca1cdac8dc99f76d660e7a4fb0ceefa4b4ab8f5f6742925/pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8", size = 19228, upload-time = "2024-09-29T09:24:13.293Z" }
1157
- wheels = [
1158
- { url = "https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913", size = 10216, upload-time = "2024-09-29T09:24:11.978Z" },
1159
- ]
1160
-
1161
1010
  [[package]]
1162
1011
  name = "pytest"
1163
1012
  version = "8.4.1"
@@ -1211,15 +1060,6 @@ wheels = [
1211
1060
  { url = "https://files.pythonhosted.org/packages/c0/d2/21af5c535501a7233e734b8af901574572da66fcc254cb35d0609c9080dd/pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42", size = 8932540, upload-time = "2025-07-14T20:13:36.379Z" },
1212
1061
  ]
1213
1062
 
1214
- [[package]]
1215
- name = "pywin32-ctypes"
1216
- version = "0.2.3"
1217
- source = { registry = "https://pypi.org/simple" }
1218
- sdist = { url = "https://files.pythonhosted.org/packages/85/9f/01a1a99704853cb63f253eea009390c88e7131c67e66a0a02099a8c917cb/pywin32-ctypes-0.2.3.tar.gz", hash = "sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755", size = 29471, upload-time = "2024-08-14T10:15:34.626Z" }
1219
- wheels = [
1220
- { url = "https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl", hash = "sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8", size = 30756, upload-time = "2024-08-14T10:15:33.187Z" },
1221
- ]
1222
-
1223
1063
  [[package]]
1224
1064
  name = "pyyaml"
1225
1065
  version = "6.0.3"
@@ -1266,20 +1106,6 @@ wheels = [
1266
1106
  { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" },
1267
1107
  ]
1268
1108
 
1269
- [[package]]
1270
- name = "readme-renderer"
1271
- version = "44.0"
1272
- source = { registry = "https://pypi.org/simple" }
1273
- dependencies = [
1274
- { name = "docutils" },
1275
- { name = "nh3" },
1276
- { name = "pygments" },
1277
- ]
1278
- sdist = { url = "https://files.pythonhosted.org/packages/5a/a9/104ec9234c8448c4379768221ea6df01260cd6c2ce13182d4eac531c8342/readme_renderer-44.0.tar.gz", hash = "sha256:8712034eabbfa6805cacf1402b4eeb2a73028f72d1166d6f5cb7f9c047c5d1e1", size = 32056, upload-time = "2024-07-08T15:00:57.805Z" }
1279
- wheels = [
1280
- { url = "https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl", hash = "sha256:2fbca89b81a08526aadf1357a8c2ae889ec05fb03f5da67f9769c9a592166151", size = 13310, upload-time = "2024-07-08T15:00:56.577Z" },
1281
- ]
1282
-
1283
1109
  [[package]]
1284
1110
  name = "referencing"
1285
1111
  version = "0.36.2"
@@ -1322,27 +1148,6 @@ wheels = [
1322
1148
  { url = "https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl", hash = "sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36", size = 24179, upload-time = "2024-03-22T20:32:28.055Z" },
1323
1149
  ]
1324
1150
 
1325
- [[package]]
1326
- name = "requests-toolbelt"
1327
- version = "1.0.0"
1328
- source = { registry = "https://pypi.org/simple" }
1329
- dependencies = [
1330
- { name = "requests" },
1331
- ]
1332
- sdist = { url = "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", size = 206888, upload-time = "2023-05-01T04:11:33.229Z" }
1333
- wheels = [
1334
- { url = "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", size = 54481, upload-time = "2023-05-01T04:11:28.427Z" },
1335
- ]
1336
-
1337
- [[package]]
1338
- name = "rfc3986"
1339
- version = "2.0.0"
1340
- source = { registry = "https://pypi.org/simple" }
1341
- sdist = { url = "https://files.pythonhosted.org/packages/85/40/1520d68bfa07ab5a6f065a186815fb6610c86fe957bc065754e47f7b0840/rfc3986-2.0.0.tar.gz", hash = "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c", size = 49026, upload-time = "2022-01-10T00:52:30.832Z" }
1342
- wheels = [
1343
- { url = "https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl", hash = "sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd", size = 31326, upload-time = "2022-01-10T00:52:29.594Z" },
1344
- ]
1345
-
1346
1151
  [[package]]
1347
1152
  name = "rich"
1348
1153
  version = "14.0.0"
@@ -1432,19 +1237,6 @@ wheels = [
1432
1237
  { url = "https://files.pythonhosted.org/packages/75/04/5302cea1aa26d886d34cadbf2dc77d90d7737e576c0065f357b96dc7a1a6/rpds_py-0.26.0-cp314-cp314t-win_amd64.whl", hash = "sha256:f14440b9573a6f76b4ee4770c13f0b5921f71dde3b6fcb8dabbefd13b7fe05d7", size = 232821, upload-time = "2025-07-01T15:55:55.167Z" },
1433
1238
  ]
1434
1239
 
1435
- [[package]]
1436
- name = "secretstorage"
1437
- version = "3.3.3"
1438
- source = { registry = "https://pypi.org/simple" }
1439
- dependencies = [
1440
- { name = "cryptography" },
1441
- { name = "jeepney" },
1442
- ]
1443
- sdist = { url = "https://files.pythonhosted.org/packages/53/a4/f48c9d79cb507ed1373477dbceaba7401fd8a23af63b837fa61f1dcd3691/SecretStorage-3.3.3.tar.gz", hash = "sha256:2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77", size = 19739, upload-time = "2022-08-13T16:22:46.976Z" }
1444
- wheels = [
1445
- { url = "https://files.pythonhosted.org/packages/54/24/b4293291fa1dd830f353d2cb163295742fa87f179fcc8a20a306a81978b7/SecretStorage-3.3.3-py3-none-any.whl", hash = "sha256:f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99", size = 15221, upload-time = "2022-08-13T16:22:44.457Z" },
1446
- ]
1447
-
1448
1240
  [[package]]
1449
1241
  name = "six"
1450
1242
  version = "1.17.0"
@@ -1500,26 +1292,6 @@ wheels = [
1500
1292
  { url = "https://files.pythonhosted.org/packages/19/97/56608b2249fe206a67cd573bc93cd9896e1efb9e98bce9c163bcdc704b88/truststore-0.10.4-py3-none-any.whl", hash = "sha256:adaeaecf1cbb5f4de3b1959b42d41f6fab57b2b1666adb59e89cb0b53361d981", size = 18660, upload-time = "2025-08-12T18:49:01.46Z" },
1501
1293
  ]
1502
1294
 
1503
- [[package]]
1504
- name = "twine"
1505
- version = "6.1.0"
1506
- source = { registry = "https://pypi.org/simple" }
1507
- dependencies = [
1508
- { name = "id" },
1509
- { name = "keyring", marker = "platform_machine != 'ppc64le' and platform_machine != 's390x'" },
1510
- { name = "packaging" },
1511
- { name = "readme-renderer" },
1512
- { name = "requests" },
1513
- { name = "requests-toolbelt" },
1514
- { name = "rfc3986" },
1515
- { name = "rich" },
1516
- { name = "urllib3" },
1517
- ]
1518
- sdist = { url = "https://files.pythonhosted.org/packages/c8/a2/6df94fc5c8e2170d21d7134a565c3a8fb84f9797c1dd65a5976aaf714418/twine-6.1.0.tar.gz", hash = "sha256:be324f6272eff91d07ee93f251edf232fc647935dd585ac003539b42404a8dbd", size = 168404, upload-time = "2025-01-21T18:45:26.758Z" }
1519
- wheels = [
1520
- { url = "https://files.pythonhosted.org/packages/7c/b6/74e927715a285743351233f33ea3c684528a0d374d2e43ff9ce9585b73fe/twine-6.1.0-py3-none-any.whl", hash = "sha256:a47f973caf122930bf0fbbf17f80b83bc1602c9ce393c7845f289a3001dc5384", size = 40791, upload-time = "2025-01-21T18:45:24.584Z" },
1521
- ]
1522
-
1523
1295
  [[package]]
1524
1296
  name = "typing-extensions"
1525
1297
  version = "4.14.1"
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