cloudx-proxy 0.17.7__tar.gz → 0.18.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 (55) hide show
  1. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/.ai/context/project-overview.md +2 -2
  2. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/.github/workflows/claude.yml +1 -1
  3. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/.github/workflows/codeql.yml +2 -2
  4. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/.github/workflows/test.yml +0 -1
  5. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/CHANGELOG.md +7 -0
  6. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/PKG-INFO +6 -7
  7. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/README.md +4 -4
  8. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/cloudx_proxy/_version.py +2 -2
  9. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/cloudx_proxy.egg-info/PKG-INFO +6 -7
  10. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/cloudx_proxy.egg-info/SOURCES.txt +1 -0
  11. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/cloudx_proxy.egg-info/scm_file_list.json +1 -0
  12. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/pyproject.toml +3 -4
  13. cloudx_proxy-0.18.0/tests/conftest.py +17 -0
  14. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/uv.lock +2 -63
  15. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/.ai/README.md +0 -0
  16. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/.ai/context/README.md +0 -0
  17. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/.ai/context/architecture.md +0 -0
  18. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/.ai/context/commit-conventions.md +0 -0
  19. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/.ai/context/development.md +0 -0
  20. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/.ai/context/ssh-config.md +0 -0
  21. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/.ai/roadmap/architecture-review.md +0 -0
  22. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/.ai/roadmap/documentation-findings.md +0 -0
  23. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/.ai/roadmap/improvement-roadmap.md +0 -0
  24. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/.clinerules +0 -0
  25. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/.envrc +0 -0
  26. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/.github/dependabot.yml +0 -0
  27. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/.github/workflows/release.yml +0 -0
  28. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/.gitignore +0 -0
  29. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/.releaserc +0 -0
  30. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/CLAUDE.md +0 -0
  31. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/CONTRIBUTING.md +0 -0
  32. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/LICENSE +0 -0
  33. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/NOTICE +0 -0
  34. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/cloudx_proxy/__init__.py +0 -0
  35. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/cloudx_proxy/_op.py +0 -0
  36. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/cloudx_proxy/cli.py +0 -0
  37. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/cloudx_proxy/colors.py +0 -0
  38. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/cloudx_proxy/core.py +0 -0
  39. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/cloudx_proxy/setup.py +0 -0
  40. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/cloudx_proxy.egg-info/dependency_links.txt +0 -0
  41. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/cloudx_proxy.egg-info/entry_points.txt +0 -0
  42. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/cloudx_proxy.egg-info/requires.txt +0 -0
  43. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/cloudx_proxy.egg-info/top_level.txt +0 -0
  44. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/setup.cfg +0 -0
  45. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/tests/__init__.py +0 -0
  46. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/tests/test_backward_compat.py +0 -0
  47. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/tests/test_cli_options.py +0 -0
  48. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/tests/test_config_safety.py +0 -0
  49. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/tests/test_core.py +0 -0
  50. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/tests/test_instance_tags.py +0 -0
  51. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/tests/test_non_interactive.py +0 -0
  52. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/tests/test_runtime_safety.py +0 -0
  53. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/tests/test_setup.py +0 -0
  54. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/tests/test_ssh_config.py +0 -0
  55. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.0}/tests/test_version.py +0 -0
@@ -13,7 +13,7 @@
13
13
 
14
14
  ## Prerequisites
15
15
 
16
- 1. **Python 3.10+**: Required for cloudX-proxy and uv package manager.
16
+ 1. **Python 3.11+**: Required for cloudX-proxy and uv package manager.
17
17
  2. **AWS CLI v2**: For configuring AWS profiles and credentials.
18
18
  3. **AWS Session Manager Plugin**: Enables secure tunneling through AWS Systems Manager.
19
19
  4. **OpenSSH Client**: Handles SSH key management and connections.
@@ -97,7 +97,7 @@ After setup, configure VSCode settings (`settings.json`):
97
97
  ## Troubleshooting
98
98
 
99
99
  ### Common Issues
100
- - **Python/Installation**: Ensure Python 3.10+ and `uv` are installed.
100
+ - **Python/Installation**: Ensure Python 3.11+ and `uv` are installed.
101
101
  - **Setup**: Verify AWS profile format (`cloudX-{env}-{user}`) and permissions.
102
102
  - **Connection**: Check VSCode SSH config path, instance status, and timeouts.
103
103
  - **SSH Keys**: Verify permissions (600 for private key) and 1Password agent status.
@@ -32,7 +32,7 @@ jobs:
32
32
 
33
33
  - name: Run Claude Code
34
34
  id: claude
35
- uses: anthropics/claude-code-action@v1.0.217
35
+ uses: anthropics/claude-code-action@v1.0.266
36
36
  with:
37
37
  claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
38
38
 
@@ -31,12 +31,12 @@ jobs:
31
31
  uses: actions/checkout@v7
32
32
 
33
33
  - name: Initialize CodeQL
34
- uses: github/codeql-action/init@v4.37.9
34
+ uses: github/codeql-action/init@v4.39.1
35
35
  with:
36
36
  languages: ${{ matrix.language }}
37
37
  queries: security-and-quality
38
38
 
39
39
  - name: Perform CodeQL Analysis
40
- uses: github/codeql-action/analyze@v4.37.9
40
+ uses: github/codeql-action/analyze@v4.39.1
41
41
  with:
42
42
  category: "/language:${{ matrix.language }}"
@@ -37,7 +37,6 @@ jobs:
37
37
  fail-fast: false
38
38
  matrix:
39
39
  python-version:
40
- - "3.10"
41
40
  - "3.11"
42
41
  - "3.12"
43
42
  - "3.13"
@@ -1,3 +1,10 @@
1
+ # [0.18.0](https://github.com/easytocloud/cloudX-proxy/compare/v0.17.7...v0.18.0) (2026-11-04)
2
+
3
+
4
+ ### Features
5
+
6
+ * require Python 3.11+ (3.10 is end of life) ([9577577](https://github.com/easytocloud/cloudX-proxy/commit/9577577bc6c3996d6e7c4e8859fc12642f71f8ee))
7
+
1
8
  ## [0.17.7](https://github.com/easytocloud/cloudX-proxy/compare/v0.17.6...v0.17.7) (2026-10-28)
2
9
 
3
10
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cloudx-proxy
3
- Version: 0.17.7
3
+ Version: 0.18.0
4
4
  Summary: SSH proxy command to connect VSCode with cloudX instance using AWS Systems Manager
5
5
  Author-email: easytocloud <info@easytocloud.com>
6
6
  License: MIT License
@@ -36,13 +36,12 @@ Classifier: Intended Audience :: Developers
36
36
  Classifier: License :: OSI Approved :: MIT License
37
37
  Classifier: Operating System :: OS Independent
38
38
  Classifier: Programming Language :: Python :: 3
39
- Classifier: Programming Language :: Python :: 3.10
40
39
  Classifier: Programming Language :: Python :: 3.11
41
40
  Classifier: Programming Language :: Python :: 3.12
42
41
  Classifier: Programming Language :: Python :: 3.13
43
42
  Classifier: Topic :: Software Development :: Build Tools
44
43
  Classifier: Topic :: System :: Systems Administration
45
- Requires-Python: >=3.10
44
+ Requires-Python: >=3.11
46
45
  Description-Content-Type: text/markdown
47
46
  License-File: LICENSE
48
47
  License-File: NOTICE
@@ -80,7 +79,7 @@ Using AWS Systems Manager Session Manager, it eliminates the need for direct SSH
80
79
 
81
80
  1. **Install Prerequisites:**
82
81
  ```bash
83
- # Install Python 3.10+, AWS CLI v2, Session Manager plugin
82
+ # Install Python 3.11+, AWS CLI v2, Session Manager plugin
84
83
  pip install uv
85
84
  ```
86
85
 
@@ -120,10 +119,10 @@ All documentation and examples use this convention. If you see different casing
120
119
 
121
120
  ## Prerequisites
122
121
 
123
- 1. **Python 3.10+** - Required for cloudX-proxy and uv package manager
122
+ 1. **Python 3.11+** - Required for cloudX-proxy and uv package manager
124
123
  - [Python Installation Guide](https://www.python.org/downloads/)
125
124
  - Check your version: `python --version` or `python3 --version`
126
- - Supports Python 3.10, 3.11, 3.12, 3.13
125
+ - Supports Python 3.11, 3.12, 3.13
127
126
 
128
127
  2. **AWS CLI v2** - Used to configure AWS profiles and credentials
129
128
  - [Installation Guide](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
@@ -720,7 +719,7 @@ These permissions are required to bootstrap the instance, so that after creation
720
719
  ### Common Issues
721
720
 
722
721
  1. **Python/Installation Issues**
723
- - **Error: "python not found"** - Ensure Python 3.10+ is installed and in PATH
722
+ - **Error: "python not found"** - Ensure Python 3.11+ is installed and in PATH
724
723
  - **Error: "uvx command not found"** - Install uv: `pip install uv`
725
724
  - **Error: "Package not found"** - Try updating uv: `pip install --upgrade uv`
726
725
  - **ImportError/ModuleNotFoundError** - Check Python version compatibility (`python --version`)
@@ -28,7 +28,7 @@ Using AWS Systems Manager Session Manager, it eliminates the need for direct SSH
28
28
 
29
29
  1. **Install Prerequisites:**
30
30
  ```bash
31
- # Install Python 3.10+, AWS CLI v2, Session Manager plugin
31
+ # Install Python 3.11+, AWS CLI v2, Session Manager plugin
32
32
  pip install uv
33
33
  ```
34
34
 
@@ -68,10 +68,10 @@ All documentation and examples use this convention. If you see different casing
68
68
 
69
69
  ## Prerequisites
70
70
 
71
- 1. **Python 3.10+** - Required for cloudX-proxy and uv package manager
71
+ 1. **Python 3.11+** - Required for cloudX-proxy and uv package manager
72
72
  - [Python Installation Guide](https://www.python.org/downloads/)
73
73
  - Check your version: `python --version` or `python3 --version`
74
- - Supports Python 3.10, 3.11, 3.12, 3.13
74
+ - Supports Python 3.11, 3.12, 3.13
75
75
 
76
76
  2. **AWS CLI v2** - Used to configure AWS profiles and credentials
77
77
  - [Installation Guide](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
@@ -668,7 +668,7 @@ These permissions are required to bootstrap the instance, so that after creation
668
668
  ### Common Issues
669
669
 
670
670
  1. **Python/Installation Issues**
671
- - **Error: "python not found"** - Ensure Python 3.10+ is installed and in PATH
671
+ - **Error: "python not found"** - Ensure Python 3.11+ is installed and in PATH
672
672
  - **Error: "uvx command not found"** - Install uv: `pip install uv`
673
673
  - **Error: "Package not found"** - Try updating uv: `pip install --upgrade uv`
674
674
  - **ImportError/ModuleNotFoundError** - Check Python version compatibility (`python --version`)
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.17.7'
22
- __version_tuple__ = version_tuple = (0, 17, 7)
21
+ __version__ = version = '0.18.0'
22
+ __version_tuple__ = version_tuple = (0, 18, 0)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cloudx-proxy
3
- Version: 0.17.7
3
+ Version: 0.18.0
4
4
  Summary: SSH proxy command to connect VSCode with cloudX instance using AWS Systems Manager
5
5
  Author-email: easytocloud <info@easytocloud.com>
6
6
  License: MIT License
@@ -36,13 +36,12 @@ Classifier: Intended Audience :: Developers
36
36
  Classifier: License :: OSI Approved :: MIT License
37
37
  Classifier: Operating System :: OS Independent
38
38
  Classifier: Programming Language :: Python :: 3
39
- Classifier: Programming Language :: Python :: 3.10
40
39
  Classifier: Programming Language :: Python :: 3.11
41
40
  Classifier: Programming Language :: Python :: 3.12
42
41
  Classifier: Programming Language :: Python :: 3.13
43
42
  Classifier: Topic :: Software Development :: Build Tools
44
43
  Classifier: Topic :: System :: Systems Administration
45
- Requires-Python: >=3.10
44
+ Requires-Python: >=3.11
46
45
  Description-Content-Type: text/markdown
47
46
  License-File: LICENSE
48
47
  License-File: NOTICE
@@ -80,7 +79,7 @@ Using AWS Systems Manager Session Manager, it eliminates the need for direct SSH
80
79
 
81
80
  1. **Install Prerequisites:**
82
81
  ```bash
83
- # Install Python 3.10+, AWS CLI v2, Session Manager plugin
82
+ # Install Python 3.11+, AWS CLI v2, Session Manager plugin
84
83
  pip install uv
85
84
  ```
86
85
 
@@ -120,10 +119,10 @@ All documentation and examples use this convention. If you see different casing
120
119
 
121
120
  ## Prerequisites
122
121
 
123
- 1. **Python 3.10+** - Required for cloudX-proxy and uv package manager
122
+ 1. **Python 3.11+** - Required for cloudX-proxy and uv package manager
124
123
  - [Python Installation Guide](https://www.python.org/downloads/)
125
124
  - Check your version: `python --version` or `python3 --version`
126
- - Supports Python 3.10, 3.11, 3.12, 3.13
125
+ - Supports Python 3.11, 3.12, 3.13
127
126
 
128
127
  2. **AWS CLI v2** - Used to configure AWS profiles and credentials
129
128
  - [Installation Guide](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
@@ -720,7 +719,7 @@ These permissions are required to bootstrap the instance, so that after creation
720
719
  ### Common Issues
721
720
 
722
721
  1. **Python/Installation Issues**
723
- - **Error: "python not found"** - Ensure Python 3.10+ is installed and in PATH
722
+ - **Error: "python not found"** - Ensure Python 3.11+ is installed and in PATH
724
723
  - **Error: "uvx command not found"** - Install uv: `pip install uv`
725
724
  - **Error: "Package not found"** - Try updating uv: `pip install --upgrade uv`
726
725
  - **ImportError/ModuleNotFoundError** - Check Python version compatibility (`python --version`)
@@ -40,6 +40,7 @@ cloudx_proxy.egg-info/requires.txt
40
40
  cloudx_proxy.egg-info/scm_file_list.json
41
41
  cloudx_proxy.egg-info/top_level.txt
42
42
  tests/__init__.py
43
+ tests/conftest.py
43
44
  tests/test_backward_compat.py
44
45
  tests/test_cli_options.py
45
46
  tests/test_config_safety.py
@@ -33,6 +33,7 @@
33
33
  "cloudx_proxy/setup.py",
34
34
  "pyproject.toml",
35
35
  "tests/__init__.py",
36
+ "tests/conftest.py",
36
37
  "tests/test_backward_compat.py",
37
38
  "tests/test_cli_options.py",
38
39
  "tests/test_config_safety.py",
@@ -9,7 +9,7 @@ dependencies = [
9
9
  "boto3>=1.34.0",
10
10
  "click>=8.1.0", # For better CLI argument handling than argparse
11
11
  ]
12
- requires-python = ">=3.10"
12
+ requires-python = ">=3.11"
13
13
  readme = "README.md"
14
14
  license = {file = "LICENSE"}
15
15
  keywords = ["aws", "vscode", "cloud9", "cloudX", "ssm", "ssh", "proxy"]
@@ -20,7 +20,6 @@ classifiers = [
20
20
  "License :: OSI Approved :: MIT License",
21
21
  "Operating System :: OS Independent",
22
22
  "Programming Language :: Python :: 3",
23
- "Programming Language :: Python :: 3.10",
24
23
  "Programming Language :: Python :: 3.11",
25
24
  "Programming Language :: Python :: 3.12",
26
25
  "Programming Language :: Python :: 3.13",
@@ -56,7 +55,7 @@ dev = [
56
55
  ]
57
56
 
58
57
  [tool.ruff]
59
- target-version = "py310"
58
+ target-version = "py311"
60
59
  line-length = 120
61
60
 
62
61
  [tool.ruff.lint]
@@ -64,7 +63,7 @@ select = [
64
63
  "E", # pycodestyle errors
65
64
  "F", # pyflakes
66
65
  "I", # import sorting
67
- "UP", # pyupgrade (target is Python 3.10+)
66
+ "UP", # pyupgrade (target is Python 3.11+)
68
67
  "B", # bugbear
69
68
  "SIM", # simplifications
70
69
  "RUF", # ruff-specific
@@ -0,0 +1,17 @@
1
+ """Shared pytest configuration."""
2
+
3
+ import pytest
4
+
5
+
6
+ @pytest.fixture(autouse=True)
7
+ def _isolated_home(tmp_path_factory, monkeypatch):
8
+ """Point the home directory at a throwaway one for every test.
9
+
10
+ CloudXSetup resolves ~/.ssh/config through Path.home(). Without this a
11
+ test that registers a host appends an ``Include`` for its temp directory
12
+ to the developer's real ~/.ssh/config, and that temp config's
13
+ ``ProxyCommand`` then shadows the real one on the next ssh connection.
14
+ """
15
+ home = tmp_path_factory.mktemp("home")
16
+ monkeypatch.setenv("HOME", str(home))
17
+ monkeypatch.setenv("USERPROFILE", str(home))
@@ -1,10 +1,6 @@
1
1
  version = 1
2
2
  revision = 3
3
- requires-python = ">=3.10"
4
- resolution-markers = [
5
- "python_full_version >= '3.11'",
6
- "python_full_version < '3.11'",
7
- ]
3
+ requires-python = ">=3.11"
8
4
 
9
5
  [[package]]
10
6
  name = "boolean-py"
@@ -58,8 +54,7 @@ wheels = [
58
54
 
59
55
  [package.optional-dependencies]
60
56
  filecache = [
61
- { name = "filelock", version = "4.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" },
62
- { name = "filelock", version = "4.2.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
57
+ { name = "filelock" },
63
58
  ]
64
59
 
65
60
  [[package]]
@@ -77,22 +72,6 @@ version = "3.4.6"
77
72
  source = { registry = "https://pypi.org/simple" }
78
73
  sdist = { url = "https://files.pythonhosted.org/packages/7b/60/e3bec1881450851b087e301bedc3daa9377a4d45f1c26aa90b0b235e38aa/charset_normalizer-3.4.6.tar.gz", hash = "sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6", size = 143363, upload-time = "2026-03-15T18:53:25.478Z" }
79
74
  wheels = [
80
- { url = "https://files.pythonhosted.org/packages/e6/8c/2c56124c6dc53a774d435f985b5973bc592f42d437be58c0c92d65ae7296/charset_normalizer-3.4.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2e1d8ca8611099001949d1cdfaefc510cf0f212484fe7c565f735b68c78c3c95", size = 298751, upload-time = "2026-03-15T18:50:00.003Z" },
81
- { url = "https://files.pythonhosted.org/packages/86/2a/2a7db6b314b966a3bcad8c731c0719c60b931b931de7ae9f34b2839289ee/charset_normalizer-3.4.6-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e25369dc110d58ddf29b949377a93e0716d72a24f62bad72b2b39f155949c1fd", size = 200027, upload-time = "2026-03-15T18:50:01.702Z" },
82
- { url = "https://files.pythonhosted.org/packages/68/f2/0fe775c74ae25e2a3b07b01538fc162737b3e3f795bada3bc26f4d4d495c/charset_normalizer-3.4.6-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:259695e2ccc253feb2a016303543d691825e920917e31f894ca1a687982b1de4", size = 220741, upload-time = "2026-03-15T18:50:03.194Z" },
83
- { url = "https://files.pythonhosted.org/packages/10/98/8085596e41f00b27dd6aa1e68413d1ddda7e605f34dd546833c61fddd709/charset_normalizer-3.4.6-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:dda86aba335c902b6149a02a55b38e96287157e609200811837678214ba2b1db", size = 215802, upload-time = "2026-03-15T18:50:05.859Z" },
84
- { url = "https://files.pythonhosted.org/packages/fd/ce/865e4e09b041bad659d682bbd98b47fb490b8e124f9398c9448065f64fee/charset_normalizer-3.4.6-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51fb3c322c81d20567019778cb5a4a6f2dc1c200b886bc0d636238e364848c89", size = 207908, upload-time = "2026-03-15T18:50:07.676Z" },
85
- { url = "https://files.pythonhosted.org/packages/a8/54/8c757f1f7349262898c2f169e0d562b39dcb977503f18fdf0814e923db78/charset_normalizer-3.4.6-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:4482481cb0572180b6fd976a4d5c72a30263e98564da68b86ec91f0fe35e8565", size = 194357, upload-time = "2026-03-15T18:50:09.327Z" },
86
- { url = "https://files.pythonhosted.org/packages/6f/29/e88f2fac9218907fc7a70722b393d1bbe8334c61fe9c46640dba349b6e66/charset_normalizer-3.4.6-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:39f5068d35621da2881271e5c3205125cc456f54e9030d3f723288c873a71bf9", size = 205610, upload-time = "2026-03-15T18:50:10.732Z" },
87
- { url = "https://files.pythonhosted.org/packages/4c/c5/21d7bb0cb415287178450171d130bed9d664211fdd59731ed2c34267b07d/charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8bea55c4eef25b0b19a0337dc4e3f9a15b00d569c77211fa8cde38684f234fb7", size = 203512, upload-time = "2026-03-15T18:50:12.535Z" },
88
- { url = "https://files.pythonhosted.org/packages/a4/be/ce52f3c7fdb35cc987ad38a53ebcef52eec498f4fb6c66ecfe62cfe57ba2/charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:f0cdaecd4c953bfae0b6bb64910aaaca5a424ad9c72d85cb88417bb9814f7550", size = 195398, upload-time = "2026-03-15T18:50:14.236Z" },
89
- { url = "https://files.pythonhosted.org/packages/81/a0/3ab5dd39d4859a3555e5dadfc8a9fa7f8352f8c183d1a65c90264517da0e/charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:150b8ce8e830eb7ccb029ec9ca36022f756986aaaa7956aad6d9ec90089338c0", size = 221772, upload-time = "2026-03-15T18:50:15.581Z" },
90
- { url = "https://files.pythonhosted.org/packages/04/6e/6a4e41a97ba6b2fa87f849c41e4d229449a586be85053c4d90135fe82d26/charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:e68c14b04827dd76dcbd1aeea9e604e3e4b78322d8faf2f8132c7138efa340a8", size = 205759, upload-time = "2026-03-15T18:50:17.047Z" },
91
- { url = "https://files.pythonhosted.org/packages/db/3b/34a712a5ee64a6957bf355b01dc17b12de457638d436fdb05d01e463cd1c/charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:3778fd7d7cd04ae8f54651f4a7a0bd6e39a0cf20f801720a4c21d80e9b7ad6b0", size = 216938, upload-time = "2026-03-15T18:50:18.44Z" },
92
- { url = "https://files.pythonhosted.org/packages/cb/05/5bd1e12da9ab18790af05c61aafd01a60f489778179b621ac2a305243c62/charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:dad6e0f2e481fffdcf776d10ebee25e0ef89f16d691f1e5dee4b586375fdc64b", size = 210138, upload-time = "2026-03-15T18:50:19.852Z" },
93
- { url = "https://files.pythonhosted.org/packages/bd/8e/3cb9e2d998ff6b21c0a1860343cb7b83eba9cdb66b91410e18fc4969d6ab/charset_normalizer-3.4.6-cp310-cp310-win32.whl", hash = "sha256:74a2e659c7ecbc73562e2a15e05039f1e22c75b7c7618b4b574a3ea9118d1557", size = 144137, upload-time = "2026-03-15T18:50:21.505Z" },
94
- { url = "https://files.pythonhosted.org/packages/d8/8f/78f5489ffadb0db3eb7aff53d31c24531d33eb545f0c6f6567c25f49a5ff/charset_normalizer-3.4.6-cp310-cp310-win_amd64.whl", hash = "sha256:aa9cccf4a44b9b62d8ba8b4dd06c649ba683e4bf04eea606d2e94cfc2d6ff4d6", size = 154244, upload-time = "2026-03-15T18:50:22.81Z" },
95
- { url = "https://files.pythonhosted.org/packages/e4/74/e472659dffb0cadb2f411282d2d76c60da1fc94076d7fffed4ae8a93ec01/charset_normalizer-3.4.6-cp310-cp310-win_arm64.whl", hash = "sha256:e985a16ff513596f217cee86c21371b8cd011c0f6f056d0920aa2d926c544058", size = 143312, upload-time = "2026-03-15T18:50:24.074Z" },
96
75
  { url = "https://files.pythonhosted.org/packages/62/28/ff6f234e628a2de61c458be2779cb182bc03f6eec12200d4a525bbfc9741/charset_normalizer-3.4.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e", size = 293582, upload-time = "2026-03-15T18:50:25.454Z" },
97
76
  { url = "https://files.pythonhosted.org/packages/1c/b7/b1a117e5385cbdb3205f6055403c2a2a220c5ea80b8716c324eaf75c5c95/charset_normalizer-3.4.6-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:60c74963d8350241a79cb8feea80e54d518f72c26db618862a8f53e5023deaf9", size = 197240, upload-time = "2026-03-15T18:50:27.196Z" },
98
77
  { url = "https://files.pythonhosted.org/packages/a1/5f/2574f0f09f3c3bc1b2f992e20bce6546cb1f17e111c5be07308dc5427956/charset_normalizer-3.4.6-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f6e4333fb15c83f7d1482a76d45a0818897b3d33f00efd215528ff7c51b8e35d", size = 217363, upload-time = "2026-03-15T18:50:28.601Z" },
@@ -252,37 +231,10 @@ wheels = [
252
231
  { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604, upload-time = "2021-03-08T10:59:24.45Z" },
253
232
  ]
254
233
 
255
- [[package]]
256
- name = "exceptiongroup"
257
- version = "1.3.1"
258
- source = { registry = "https://pypi.org/simple" }
259
- dependencies = [
260
- { name = "typing-extensions", marker = "python_full_version < '3.13'" },
261
- ]
262
- sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" }
263
- wheels = [
264
- { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" },
265
- ]
266
-
267
- [[package]]
268
- name = "filelock"
269
- version = "4.1.0"
270
- source = { registry = "https://pypi.org/simple" }
271
- resolution-markers = [
272
- "python_full_version < '3.11'",
273
- ]
274
- sdist = { url = "https://files.pythonhosted.org/packages/4c/58/6fd434bec86eff7c38a3168454cb132b762b2bea9b3ac094101a2f7bc32a/filelock-4.1.0.tar.gz", hash = "sha256:ad7f724afef953e731b1cc39bcd3a09166d72ed7fcdf29e6e88b1c3235c6715d", size = 561277, upload-time = "2026-10-09T19:57:20.34Z" }
275
- wheels = [
276
- { url = "https://files.pythonhosted.org/packages/ee/86/032133892a5de43b5a98200b01aadcad68cc255e274a762f08b8a76d2912/filelock-4.1.0-py3-none-any.whl", hash = "sha256:2ce9818e3e2d8f284c1a964414447ef148d42a5fd5e2a477a7118e574b293ec1", size = 133003, upload-time = "2026-10-09T19:57:18.716Z" },
277
- ]
278
-
279
234
  [[package]]
280
235
  name = "filelock"
281
236
  version = "4.2.4"
282
237
  source = { registry = "https://pypi.org/simple" }
283
- resolution-markers = [
284
- "python_full_version >= '3.11'",
285
- ]
286
238
  sdist = { url = "https://files.pythonhosted.org/packages/d8/28/3893324bcadf8f89b1616637468d766af3f625008c0735bf704fdfa86617/filelock-4.2.4.tar.gz", hash = "sha256:c6d8663535e1650ee430507b4ffbac7b464dd64b7647ea0112a9f406499d163d", size = 652444, upload-time = "2026-10-19T01:57:51.001Z" }
287
239
  wheels = [
288
240
  { url = "https://files.pythonhosted.org/packages/e0/1b/5e74289a1878e666bb4b65fe5805a04cafcac2aa5f519ef1ead67ef91c56/filelock-4.2.4-py3-none-any.whl", hash = "sha256:301241438c57936ef93f4243a94f2559022268bfcf9b375a9a72eb0f8db8358e", size = 162475, upload-time = "2026-10-19T01:57:49.419Z" },
@@ -354,16 +306,6 @@ version = "1.2.4"
354
306
  source = { registry = "https://pypi.org/simple" }
355
307
  sdist = { url = "https://files.pythonhosted.org/packages/cc/52/1ec7ead2c7528bf3d1db73e886fa4df10f9e6f0eb7854a448b7090cfcef7/msgpack-1.2.4.tar.gz", hash = "sha256:475c44e12f2a5de766a8448783f149c9b33f3f49b88953c6cd739a77d93c732c", size = 197764, upload-time = "2026-10-26T17:55:48.593Z" }
356
308
  wheels = [
357
- { url = "https://files.pythonhosted.org/packages/a3/d0/68889d2fcead0e81470cf28346a0fce80c451a3e7df9d74b0837f517027e/msgpack-1.2.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2a4e141a9c91d1502cf98f9ca9f87af222c7857e2bfa49c1d81343157c38a28e", size = 91412, upload-time = "2026-10-26T17:53:31.652Z" },
358
- { url = "https://files.pythonhosted.org/packages/cc/40/6d7a9b886df357e86f48c82470e281333477eea80aef23c33e87e8244ab5/msgpack-1.2.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0626ea840cce866237c4da08439e9faa9cf79e6e4c62358978ee055961e8cff2", size = 90295, upload-time = "2026-10-26T17:53:33.169Z" },
359
- { url = "https://files.pythonhosted.org/packages/86/16/bbb47e6732a2b812dca695dc8f6f5eed69219422ef946088295e1cb7f865/msgpack-1.2.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:25e1f2466c4ea0fb9b694a922f75eb92d7ce6262eda8cb8a5dada34fe990d486", size = 451054, upload-time = "2026-10-26T17:53:34.598Z" },
360
- { url = "https://files.pythonhosted.org/packages/a8/f3/d215252efd2befcac420b01889bb17a816194a2c59501a15f7b1136f6591/msgpack-1.2.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:85b79ed643cfde70672152b3d1aee438ca647c5d2ffb7dba7226689ee9f6f44b", size = 461803, upload-time = "2026-10-26T17:53:36.231Z" },
361
- { url = "https://files.pythonhosted.org/packages/d0/2d/5063d98e52b2e5252b8fcfaaa99438c1994bedac6ce7761fb9ded8bea810/msgpack-1.2.4-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c1119e840d2c9164120f067740d99c9608d21d4ee9a172cf0f00dcafdf5624a4", size = 425474, upload-time = "2026-10-26T17:53:37.841Z" },
362
- { url = "https://files.pythonhosted.org/packages/40/39/4077628b0c593d09d838de00f80eb726f66c20e83dfc3639b6a70dbfa80c/msgpack-1.2.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ce22584c8b12aa7e424dab08c481afd95ad4bd3007829fd1767d28b4dbbc3167", size = 445334, upload-time = "2026-10-26T17:53:39.448Z" },
363
- { url = "https://files.pythonhosted.org/packages/80/19/77a05f14d57c2dfeb85a627d7eb31d54b0393fcb0a4df1a1686d81a95fe4/msgpack-1.2.4-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:8ab62a50cab6f786d49f3584914c1088b0ed8de76bfe675b26a60c7bec426380", size = 422467, upload-time = "2026-10-26T17:53:40.979Z" },
364
- { url = "https://files.pythonhosted.org/packages/89/07/7861755bd759030c051ae238f578806e975dba0c9830be0c7f8998fbf26d/msgpack-1.2.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:429329799c72335b0e37be65964ec5b89062e57fe7ad9ee779b886df5e34ddaf", size = 463319, upload-time = "2026-10-26T17:53:42.767Z" },
365
- { url = "https://files.pythonhosted.org/packages/c0/c9/873fbd651d977717a2eee58d5c9277a7999f615d997646c8fb1e68cdc3f0/msgpack-1.2.4-cp310-cp310-win32.whl", hash = "sha256:1cdb51af4f8f8d20af66ea9384883bf99b8ddb3cdf05f09eecda921646e15135", size = 68431, upload-time = "2026-10-26T17:53:44.134Z" },
366
- { url = "https://files.pythonhosted.org/packages/7e/28/42c874635d34b35b76011dff6067f986a9c87d225c52347308e97b3409d1/msgpack-1.2.4-cp310-cp310-win_amd64.whl", hash = "sha256:d626fcacecaf3a5bfcd57e35709ce59a56a39cd4a3cd201d1b43c00d20bcbcda", size = 75871, upload-time = "2026-10-26T17:53:45.33Z" },
367
309
  { url = "https://files.pythonhosted.org/packages/64/cb/a3bd4d234c0f2f7e646b9be259b801c5d6a35c97f93dded4f722e6b80acd/msgpack-1.2.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1095b1ebcc8c9d3e70c51240b7160d8e9da66044e0a45c3ef8403d3a9ef0c5ad", size = 90935, upload-time = "2026-10-26T17:53:46.588Z" },
368
310
  { url = "https://files.pythonhosted.org/packages/56/3c/fc87d06bdfc99b302f4379f0eb34bb8695b6ecd90b965652d0a3195d1acd/msgpack-1.2.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a4b47ec7422bef149223786a87df80067ac65bfc7c0565e5cf1dfbdc40acee50", size = 90187, upload-time = "2026-10-26T17:53:48.151Z" },
369
311
  { url = "https://files.pythonhosted.org/packages/05/a3/abebe12c1b589b7eeab60cb87dd5eb398fcf549bdafca8c30d8d73e48493/msgpack-1.2.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0c75cfda0d3ccb1f6abc20e0608ad6b226e11f317b5ac297721504d2509e2bd9", size = 466911, upload-time = "2026-10-26T17:53:49.536Z" },
@@ -512,7 +454,6 @@ version = "5.5.5"
512
454
  source = { registry = "https://pypi.org/simple" }
513
455
  dependencies = [
514
456
  { name = "prettytable" },
515
- { name = "tomli", marker = "python_full_version < '3.11'" },
516
457
  ]
517
458
  sdist = { url = "https://files.pythonhosted.org/packages/7d/18/ddd93af610a04f56a51a27095ddfe55238e1ec236f6758730a0d2c0b49f2/pip_licenses-5.5.5.tar.gz", hash = "sha256:60750c006adf7a0910347b726e8ee9fee3bc8d2e7c8307a5c4ec0776c8e2a276", size = 54955, upload-time = "2026-03-28T22:12:56.48Z" }
518
459
  wheels = [
@@ -598,12 +539,10 @@ version = "9.1.1"
598
539
  source = { registry = "https://pypi.org/simple" }
599
540
  dependencies = [
600
541
  { name = "colorama", marker = "sys_platform == 'win32'" },
601
- { name = "exceptiongroup", marker = "python_full_version < '3.11'" },
602
542
  { name = "iniconfig" },
603
543
  { name = "packaging" },
604
544
  { name = "pluggy" },
605
545
  { name = "pygments" },
606
- { name = "tomli", marker = "python_full_version < '3.11'" },
607
546
  ]
608
547
  sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" }
609
548
  wheels = [
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes