cloudx-proxy 0.17.7__tar.gz → 0.18.1__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 (57) hide show
  1. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/.ai/context/development.md +4 -1
  2. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/.ai/context/project-overview.md +2 -2
  3. cloudx_proxy-0.18.1/.github/dependabot.yml +31 -0
  4. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/.github/workflows/claude.yml +1 -1
  5. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/.github/workflows/codeql.yml +2 -2
  6. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/.github/workflows/test.yml +0 -1
  7. cloudx_proxy-0.18.1/.releaserc +51 -0
  8. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/CHANGELOG.md +14 -0
  9. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/CLAUDE.md +4 -1
  10. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/CONTRIBUTING.md +9 -0
  11. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/PKG-INFO +6 -7
  12. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/README.md +4 -4
  13. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/cloudx_proxy/_version.py +2 -2
  14. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/cloudx_proxy.egg-info/PKG-INFO +6 -7
  15. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/cloudx_proxy.egg-info/SOURCES.txt +1 -0
  16. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/cloudx_proxy.egg-info/scm_file_list.json +1 -0
  17. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/pyproject.toml +3 -4
  18. cloudx_proxy-0.18.1/tests/conftest.py +17 -0
  19. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/uv.lock +41 -105
  20. cloudx_proxy-0.17.7/.github/dependabot.yml +0 -12
  21. cloudx_proxy-0.17.7/.releaserc +0 -38
  22. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/.ai/README.md +0 -0
  23. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/.ai/context/README.md +0 -0
  24. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/.ai/context/architecture.md +0 -0
  25. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/.ai/context/commit-conventions.md +0 -0
  26. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/.ai/context/ssh-config.md +0 -0
  27. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/.ai/roadmap/architecture-review.md +0 -0
  28. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/.ai/roadmap/documentation-findings.md +0 -0
  29. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/.ai/roadmap/improvement-roadmap.md +0 -0
  30. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/.clinerules +0 -0
  31. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/.envrc +0 -0
  32. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/.github/workflows/release.yml +0 -0
  33. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/.gitignore +0 -0
  34. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/LICENSE +0 -0
  35. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/NOTICE +0 -0
  36. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/cloudx_proxy/__init__.py +0 -0
  37. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/cloudx_proxy/_op.py +0 -0
  38. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/cloudx_proxy/cli.py +0 -0
  39. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/cloudx_proxy/colors.py +0 -0
  40. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/cloudx_proxy/core.py +0 -0
  41. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/cloudx_proxy/setup.py +0 -0
  42. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/cloudx_proxy.egg-info/dependency_links.txt +0 -0
  43. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/cloudx_proxy.egg-info/entry_points.txt +0 -0
  44. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/cloudx_proxy.egg-info/requires.txt +0 -0
  45. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/cloudx_proxy.egg-info/top_level.txt +0 -0
  46. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/setup.cfg +0 -0
  47. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/tests/__init__.py +0 -0
  48. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/tests/test_backward_compat.py +0 -0
  49. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/tests/test_cli_options.py +0 -0
  50. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/tests/test_config_safety.py +0 -0
  51. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/tests/test_core.py +0 -0
  52. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/tests/test_instance_tags.py +0 -0
  53. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/tests/test_non_interactive.py +0 -0
  54. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/tests/test_runtime_safety.py +0 -0
  55. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/tests/test_setup.py +0 -0
  56. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/tests/test_ssh_config.py +0 -0
  57. {cloudx_proxy-0.17.7 → cloudx_proxy-0.18.1}/tests/test_version.py +0 -0
@@ -101,8 +101,11 @@ The project uses semantic-release with GitHub Actions:
101
101
  - **Artifacts**: GitHub releases, PyPI packages, CHANGELOG.md updates.
102
102
 
103
103
  **Commit Message Format:**
104
+ - `type!:` or a `BREAKING CHANGE:` footer on any type → major version (note: from 0.x this becomes 1.0.0)
104
105
  - `feat:` → minor version
105
- - `fix:`, `docs:`, `style:`, etc. → patch version
106
+ - `fix:`, `perf:`, `refactor:` → patch version
107
+ - `docs:`, `style:`, `test:`, `build:`, `ci:`, `chore:` → no release; they ride along in the next release's changelog
108
+ - Dependabot: runtime dependency updates are `fix(deps)` (release), dev-only dependency updates and GitHub Actions updates are `chore(deps-dev)` / `ci(deps)` (no release)
106
109
 
107
110
  ## Console Output
108
111
 
@@ -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.
@@ -0,0 +1,31 @@
1
+ version: 2
2
+ updates:
3
+
4
+ # Workflow action bumps never change what ships to PyPI, so they must not
5
+ # trigger a release (ci -> no release in .releaserc).
6
+ - package-ecosystem: "github-actions"
7
+ directory: "/"
8
+ schedule:
9
+ interval: "daily"
10
+ commit-message:
11
+ prefix: "ci"
12
+ include: "scope"
13
+
14
+ # Runtime dependency bumps (and security fixes) change what users install,
15
+ # so they release as a patch. Dev-only groups (pytest, ruff, pip-audit, ...)
16
+ # do not. The project is locked with uv.lock, hence the uv ecosystem.
17
+ - package-ecosystem: "uv"
18
+ directory: "/"
19
+ schedule:
20
+ interval: "daily"
21
+ commit-message:
22
+ prefix: "fix"
23
+ prefix-development: "chore"
24
+ include: "scope"
25
+ # One PR per group instead of one per package: every bump rewrites uv.lock,
26
+ # so separate PRs conflict with each other and each needs a rebase + CI run.
27
+ groups:
28
+ runtime:
29
+ dependency-type: "production"
30
+ dev:
31
+ dependency-type: "development"
@@ -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"
@@ -0,0 +1,51 @@
1
+ {
2
+ "branches": ["main"],
3
+ "tagFormat": "v${version}",
4
+ "repositoryUrl": "https://github.com/easytocloud/cloudX-proxy.git",
5
+ "plugins": [
6
+ ["@semantic-release/commit-analyzer", {
7
+ "preset": "angular",
8
+ "parserOpts": {
9
+ "headerPattern": "^(\\w*)(?:\\((.*)\\))?!?: (.*)$",
10
+ "headerCorrespondence": ["type", "scope", "subject"],
11
+ "breakingHeaderPattern": "^(\\w*)(?:\\((.*)\\))?!: (.*)$"
12
+ },
13
+ "releaseRules": [
14
+ {"breaking": true, "release": "major"},
15
+ {"type": "feat", "release": "minor"},
16
+ {"type": "fix", "release": "patch"},
17
+ {"type": "perf", "release": "patch"},
18
+ {"type": "refactor", "release": "patch"},
19
+ {"type": "docs", "release": false},
20
+ {"type": "style", "release": false},
21
+ {"type": "test", "release": false},
22
+ {"type": "build", "release": false},
23
+ {"type": "ci", "release": false},
24
+ {"type": "chore", "release": false}
25
+ ]
26
+ }],
27
+ ["@semantic-release/release-notes-generator", {
28
+ "preset": "angular",
29
+ "parserOpts": {
30
+ "headerPattern": "^(\\w*)(?:\\((.*)\\))?!?: (.*)$",
31
+ "headerCorrespondence": ["type", "scope", "subject"],
32
+ "breakingHeaderPattern": "^(\\w*)(?:\\((.*)\\))?!: (.*)$"
33
+ }
34
+ }],
35
+ [
36
+ "@semantic-release/changelog",
37
+ {
38
+ "changelogFile": "CHANGELOG.md"
39
+ }
40
+ ],
41
+ [
42
+ "@semantic-release/git",
43
+ {
44
+ "assets": [
45
+ "CHANGELOG.md"
46
+ ]
47
+ }
48
+ ],
49
+ "@semantic-release/github"
50
+ ]
51
+ }
@@ -1,3 +1,17 @@
1
+ ## [0.18.1](https://github.com/easytocloud/cloudX-proxy/compare/v0.18.0...v0.18.1) (2026-11-04)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **deps:** bump boto3, click, ruff, pytest, pip-audit; group Dependabot PRs ([7ebc458](https://github.com/easytocloud/cloudX-proxy/commit/7ebc458fe571dbe233b370a7c9808da745da0133)), closes [82-#86](https://github.com/82-/issues/86)
7
+
8
+ # [0.18.0](https://github.com/easytocloud/cloudX-proxy/compare/v0.17.7...v0.18.0) (2026-11-04)
9
+
10
+
11
+ ### Features
12
+
13
+ * require Python 3.11+ (3.10 is end of life) ([9577577](https://github.com/easytocloud/cloudX-proxy/commit/9577577bc6c3996d6e7c4e8859fc12642f71f8ee))
14
+
1
15
  ## [0.17.7](https://github.com/easytocloud/cloudX-proxy/compare/v0.17.6...v0.17.7) (2026-10-28)
2
16
 
3
17
 
@@ -74,5 +74,8 @@ The project uses semantic-release with GitHub Actions:
74
74
  - **Artifacts**: GitHub releases, PyPI packages, CHANGELOG.md updates
75
75
 
76
76
  Commit message format affects version bumps:
77
+ - `type!:` or a `BREAKING CHANGE:` footer on any type → major version (note: from 0.x this becomes 1.0.0)
77
78
  - `feat:` → minor version
78
- - `fix:`, `docs:`, `style:`, etc. → patch version
79
+ - `fix:`, `perf:`, `refactor:` → patch version
80
+ - `docs:`, `style:`, `test:`, `build:`, `ci:`, `chore:` → no release; they ride along in the next release's changelog
81
+ - Dependabot: runtime dependency updates are `fix(deps)` (release), dev-only dependency updates and GitHub Actions updates are `chore(deps-dev)` / `ci(deps)` (no release)
@@ -49,6 +49,15 @@ The package is automatically published to PyPI via GitHub Actions when a new rel
49
49
  The project uses semantic-release for versioning.
50
50
  Version numbers are automatically determined based on commit messages following the conventional commits specification.
51
51
 
52
+ A breaking change (`feat!: ...`, or a `BREAKING CHANGE:` footer on any commit
53
+ type) publishes a major release; from 0.x that means 1.0.0. Otherwise only `feat`
54
+ (minor) and `fix`, `perf`, `refactor` (patch) publish a release.
55
+ `docs`, `style`, `test`, `build`, `ci` and `chore` commits never do on their own;
56
+ they are included in the changelog of the next release. To ship accumulated
57
+ chore-type changes, land a `fix:` commit. Dependabot runtime dependency updates
58
+ are labelled `fix(deps)` so security fixes release; dev-only and GitHub Actions
59
+ updates are `chore`/`ci` and do not.
60
+
52
61
  The GitHub Actions workflow will:
53
62
 
54
63
  1. Determine next version based on commits
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cloudx-proxy
3
- Version: 0.17.7
3
+ Version: 0.18.1
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.1'
22
+ __version_tuple__ = version_tuple = (0, 18, 1)
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.1
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"
@@ -17,30 +13,30 @@ wheels = [
17
13
 
18
14
  [[package]]
19
15
  name = "boto3"
20
- version = "1.40.74"
16
+ version = "1.43.123"
21
17
  source = { registry = "https://pypi.org/simple" }
22
18
  dependencies = [
23
19
  { name = "botocore" },
24
20
  { name = "jmespath" },
25
21
  { name = "s3transfer" },
26
22
  ]
27
- sdist = { url = "https://files.pythonhosted.org/packages/a2/37/0db5fc46548b347255310893f1a47971a1d8eb0dbc46dfb5ace8a1e7d45e/boto3-1.40.74.tar.gz", hash = "sha256:484e46bf394b03a7c31b34f90945ebe1390cb1e2ac61980d128a9079beac87d4", size = 111592, upload-time = "2025-11-14T20:29:10.991Z" }
23
+ sdist = { url = "https://files.pythonhosted.org/packages/fc/8a/64b46f075149f9160da44aa7e1052dd18431b9ad4435beb0cfb02cc48624/boto3-1.43.123.tar.gz", hash = "sha256:055fabb990c5d2f31fce4ca569255bd640cdd11a3ca68c9ecad35f4f8a5b83b5", size = 112638, upload-time = "2026-10-30T19:18:50.085Z" }
28
24
  wheels = [
29
- { url = "https://files.pythonhosted.org/packages/d2/08/c52751748762901c0ca3c3019e3aa950010217f0fdf9940ebe68e6bb2f5a/boto3-1.40.74-py3-none-any.whl", hash = "sha256:41fc8844b37ae27b24bcabf8369769df246cc12c09453988d0696ad06d6aa9ef", size = 139360, upload-time = "2025-11-14T20:29:09.477Z" },
25
+ { url = "https://files.pythonhosted.org/packages/96/b2/a7986c327f80aa6f1544f4cb8f2fa7da4e1fccd472379a21cad0508b8a0e/boto3-1.43.123-py3-none-any.whl", hash = "sha256:d18d66e1e13faa0c25d0b1b8c5ce946e29fb5fc0b6456b655a93a678ff4cc313", size = 140044, upload-time = "2026-10-30T19:18:47.734Z" },
30
26
  ]
31
27
 
32
28
  [[package]]
33
29
  name = "botocore"
34
- version = "1.40.74"
30
+ version = "1.43.123"
35
31
  source = { registry = "https://pypi.org/simple" }
36
32
  dependencies = [
37
33
  { name = "jmespath" },
38
34
  { name = "python-dateutil" },
39
35
  { name = "urllib3" },
40
36
  ]
41
- sdist = { url = "https://files.pythonhosted.org/packages/81/dc/0412505f05286f282a75bb0c650e525ddcfaf3f6f1a05cd8e99d32a2db06/botocore-1.40.74.tar.gz", hash = "sha256:57de0b9ffeada06015b3c7e5186c77d0692b210d9e5efa294f3214df97e2f8ee", size = 14452479, upload-time = "2025-11-14T20:29:00.949Z" }
37
+ sdist = { url = "https://files.pythonhosted.org/packages/e0/de/011fc2a47fb066c47064b122498d2fd21f55bc90ea514acbddc37ca0f8c1/botocore-1.43.123.tar.gz", hash = "sha256:80948cb9b1cdf1a1a25809089a42e3a1bc4af0258d198222db6e97dcc660dd0c", size = 16486269, upload-time = "2026-10-30T19:18:44.609Z" }
42
38
  wheels = [
43
- { url = "https://files.pythonhosted.org/packages/7d/a2/306dec16e3c84f3ca7aaead0084358c1c7fbe6501f6160844cbc93bc871e/botocore-1.40.74-py3-none-any.whl", hash = "sha256:f39f5763e35e75f0bd91212b7b36120b1536203e8003cd952ef527db79702b15", size = 14117911, upload-time = "2025-11-14T20:28:58.153Z" },
39
+ { url = "https://files.pythonhosted.org/packages/db/96/4f2dffd304425c07160ab2c12cb13322d852fd956fe9d4386228c93f02ea/botocore-1.43.123-py3-none-any.whl", hash = "sha256:e30580f9c1282c321529238ff8ff75066096a2adbd0a293c8ae592c21d1733a3", size = 16185987, upload-time = "2026-10-30T19:18:39.794Z" },
44
40
  ]
45
41
 
46
42
  [[package]]
@@ -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" },
@@ -178,14 +157,11 @@ wheels = [
178
157
 
179
158
  [[package]]
180
159
  name = "click"
181
- version = "8.4.2"
160
+ version = "8.5.0"
182
161
  source = { registry = "https://pypi.org/simple" }
183
- dependencies = [
184
- { name = "colorama", marker = "sys_platform == 'win32'" },
185
- ]
186
- sdist = { url = "https://files.pythonhosted.org/packages/76/d4/81420972a676e8ffea40450d8c8c92943e7218a78fe9b64359836cc9876b/click-8.4.2.tar.gz", hash = "sha256:9a6cea6e60b17ebe0a44c5cc636d94f09bd66142c1cd7d8b4cd731c4917a15f6", size = 338000, upload-time = "2026-06-24T17:45:15.148Z" }
162
+ sdist = { url = "https://files.pythonhosted.org/packages/c7/0e/7fa0ef50764b67090eca4114772a2abf8b6148198475e54c660b97caeee6/click-8.5.0.tar.gz", hash = "sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34", size = 382235, upload-time = "2026-08-26T13:33:14.56Z" }
187
163
  wheels = [
188
- { url = "https://files.pythonhosted.org/packages/fb/e2/79c688af8b210d232694e31e59da9f6ec747bae31c3f5946e4e9b98860d5/click-8.4.2-py3-none-any.whl", hash = "sha256:e6f9f66136c816745b9d65817da91d61d957fb16e02e4dcd0552553c5a197b76", size = 119243, upload-time = "2026-06-24T17:45:13.73Z" },
164
+ { url = "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", hash = "sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360", size = 125251, upload-time = "2026-08-26T13:33:12.928Z" },
189
165
  ]
190
166
 
191
167
  [[package]]
@@ -252,37 +228,10 @@ wheels = [
252
228
  { 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
229
  ]
254
230
 
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
231
  [[package]]
280
232
  name = "filelock"
281
233
  version = "4.2.4"
282
234
  source = { registry = "https://pypi.org/simple" }
283
- resolution-markers = [
284
- "python_full_version >= '3.11'",
285
- ]
286
235
  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
236
  wheels = [
288
237
  { 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 +303,6 @@ version = "1.2.4"
354
303
  source = { registry = "https://pypi.org/simple" }
355
304
  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
305
  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
306
  { 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
307
  { 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
308
  { 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" },
@@ -487,7 +426,7 @@ wheels = [
487
426
 
488
427
  [[package]]
489
428
  name = "pip-audit"
490
- version = "2.10.0"
429
+ version = "2.10.1"
491
430
  source = { registry = "https://pypi.org/simple" }
492
431
  dependencies = [
493
432
  { name = "cachecontrol", extra = ["filecache"] },
@@ -501,9 +440,9 @@ dependencies = [
501
440
  { name = "tomli" },
502
441
  { name = "tomli-w" },
503
442
  ]
504
- sdist = { url = "https://files.pythonhosted.org/packages/bd/89/0e999b413facab81c33d118f3ac3739fd02c0622ccf7c4e82e37cebd8447/pip_audit-2.10.0.tar.gz", hash = "sha256:427ea5bf61d1d06b98b1ae29b7feacc00288a2eced52c9c58ceed5253ef6c2a4", size = 53776, upload-time = "2025-12-01T23:42:40.612Z" }
443
+ sdist = { url = "https://files.pythonhosted.org/packages/66/a4/f21d5f0a0edabcbce31560b73c7c5a6f72ae87af4236fd1069c8f59a353d/pip_audit-2.10.1.tar.gz", hash = "sha256:1eb4565d19ebe5d48996f4b770b4d2b32887e12cb12cfa637f1a064011b55ffc", size = 54275, upload-time = "2026-06-10T22:17:01.744Z" }
505
444
  wheels = [
506
- { url = "https://files.pythonhosted.org/packages/be/f3/4888f895c02afa085630a3a3329d1b18b998874642ad4c530e9a4d7851fe/pip_audit-2.10.0-py3-none-any.whl", hash = "sha256:16e02093872fac97580303f0848fa3ad64f7ecf600736ea7835a2b24de49613f", size = 61518, upload-time = "2025-12-01T23:42:39.193Z" },
445
+ { url = "https://files.pythonhosted.org/packages/a3/a7/b0c504148114047bd1bc9d97447453c6850ca176bb2f3c0038835994e8b7/pip_audit-2.10.1-py3-none-any.whl", hash = "sha256:99ef3f600a317c1945f1e89e227ef26e1c2d618429b8bd3fa6f4f7c440c4611a", size = 62023, upload-time = "2026-06-10T22:17:00.309Z" },
507
446
  ]
508
447
 
509
448
  [[package]]
@@ -512,7 +451,6 @@ version = "5.5.5"
512
451
  source = { registry = "https://pypi.org/simple" }
513
452
  dependencies = [
514
453
  { name = "prettytable" },
515
- { name = "tomli", marker = "python_full_version < '3.11'" },
516
454
  ]
517
455
  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
456
  wheels = [
@@ -594,20 +532,18 @@ wheels = [
594
532
 
595
533
  [[package]]
596
534
  name = "pytest"
597
- version = "9.1.1"
535
+ version = "9.2.0"
598
536
  source = { registry = "https://pypi.org/simple" }
599
537
  dependencies = [
600
538
  { name = "colorama", marker = "sys_platform == 'win32'" },
601
- { name = "exceptiongroup", marker = "python_full_version < '3.11'" },
602
539
  { name = "iniconfig" },
603
540
  { name = "packaging" },
604
541
  { name = "pluggy" },
605
542
  { name = "pygments" },
606
- { name = "tomli", marker = "python_full_version < '3.11'" },
607
543
  ]
608
- 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" }
544
+ sdist = { url = "https://files.pythonhosted.org/packages/79/42/bb4641652e58dedeac2ec51abc1f8cae4fee4ec63899a0999016229a0f2a/pytest-9.2.0.tar.gz", hash = "sha256:97c4f3b1f3c7414aa36465e09b8220f1d03627993bd51b1282e193753c80557b", size = 1797555, upload-time = "2026-10-27T21:30:20.728Z" }
609
545
  wheels = [
610
- { url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" },
546
+ { url = "https://files.pythonhosted.org/packages/51/39/1f5d8c8877a0fa327db959c19341d4be61660de1ab6b7391f9eb805bcd67/pytest-9.2.0-py3-none-any.whl", hash = "sha256:07acdcf88ec174f907dc01af70bf52d49b014bbab03faeeade31c96b18c2e588", size = 411776, upload-time = "2026-10-27T21:30:19.131Z" },
611
547
  ]
612
548
 
613
549
  [[package]]
@@ -652,39 +588,39 @@ wheels = [
652
588
 
653
589
  [[package]]
654
590
  name = "ruff"
655
- version = "0.16.5"
656
- source = { registry = "https://pypi.org/simple" }
657
- sdist = { url = "https://files.pythonhosted.org/packages/f3/85/c8e12473c93018f92d19dd988a294202e1c27426c47ec4de53ffb847b8d8/ruff-0.16.5.tar.gz", hash = "sha256:1b88500f9ffbcab3dedb0082c9f9492e91ec3d618aac1236a3e0189938f7040b", size = 4912003, upload-time = "2026-08-27T16:34:18.258Z" }
658
- wheels = [
659
- { url = "https://files.pythonhosted.org/packages/c6/b6/77c90a970fe2dae17a723acbd011043ea97c98d7deacccefdc4ba74ec512/ruff-0.16.5-py3-none-linux_armv6l.whl", hash = "sha256:12e5f673e774c35fbb62f288809c7653b73445f8ecec6b6063fd6ea3521aa14b", size = 10011941, upload-time = "2026-08-27T16:33:41.287Z" },
660
- { url = "https://files.pythonhosted.org/packages/4b/46/6cf67cf6411885a1d6f7f6d801682f155536a85176d10b605e2ceffed8bd/ruff-0.16.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:eda58a5802de40e7ed5b32b64e0b32539338cc6fcd2c78f61e3ad6a0d79f51c3", size = 10204049, upload-time = "2026-08-27T16:33:44.056Z" },
661
- { url = "https://files.pythonhosted.org/packages/46/fd/c8720ca7a090abf0c2fef4abe8a5ef6e5127ed15196d8886ff75a2b370e2/ruff-0.16.5-py3-none-macosx_11_0_arm64.whl", hash = "sha256:c5ae9a7b9a8875131f40f8fe967cc86abf899779efd663cb7ce3d572d01da7eb", size = 9809037, upload-time = "2026-08-27T16:33:46.257Z" },
662
- { url = "https://files.pythonhosted.org/packages/43/45/a684caacdedaca180f52bacccc40bf0789d2c5a7c75f25324853e9eaedb5/ruff-0.16.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b719b0a1f4d59710d283ab2965f621684a108a9e41da622e3b23f0326cd0025", size = 9964129, upload-time = "2026-08-27T16:33:48.352Z" },
663
- { url = "https://files.pythonhosted.org/packages/9e/f2/5d2bcdaca6b5b93d1b4dfc166cd2aebf7680143a1b38a28759df13a94d31/ruff-0.16.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2298f2780ed1be0c5cb1361e32ab7b1467f3cce7dabe101d2210a314f2fe42e9", size = 9821518, upload-time = "2026-08-27T16:33:50.57Z" },
664
- { url = "https://files.pythonhosted.org/packages/aa/ff/011cce29accf9257d5974145b733fc653a37985ed6825413a3987cefbfe0/ruff-0.16.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:258f29035a2dd021e7861e631b227a5b3f14e50c1184c9a6a122c5f4576154d7", size = 10534835, upload-time = "2026-08-27T16:33:52.522Z" },
665
- { url = "https://files.pythonhosted.org/packages/d7/5a/f0cf109bada9bba0e96c90c21c9f9251803f57225c32d293327a03c710d6/ruff-0.16.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b9a4f0432966834019c74d1b7e5c51224305d7713f3d7faf3e7451f1a3be3cde", size = 11252550, upload-time = "2026-08-27T16:33:54.521Z" },
666
- { url = "https://files.pythonhosted.org/packages/63/4d/1d481aaea2046c6a7ed7c291f9004c669cce3c087b6b376ed5b08271e3fe/ruff-0.16.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b5eb3a8c3d0ade9cea42b591fd530368e8798380e30e0a308b85a5cf718f09ea", size = 10777949, upload-time = "2026-08-27T16:33:56.88Z" },
667
- { url = "https://files.pythonhosted.org/packages/ee/34/ee245ca55f64443233034b3d02b03236b19242004281247c079390b7facd/ruff-0.16.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef0f69e191a13a3c9816f63163c88790cb12cd157bbbb384e9c44745702ab105", size = 10311656, upload-time = "2026-08-27T16:33:59.12Z" },
668
- { url = "https://files.pythonhosted.org/packages/a7/4d/c33a333e341c0a2b96c715b52d89a606f5a34cd4ac493cd9b8d0187186b8/ruff-0.16.5-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:0eeab41fbea2c42f98dfb9822cdccda9d24ba38d49f6dc945b5c236d48f0ef29", size = 10532125, upload-time = "2026-08-27T16:34:01.166Z" },
669
- { url = "https://files.pythonhosted.org/packages/30/e1/a64cef78b40192497bb98a27a8aa8f2c98ee9ee15bc97f7712d94ef32937/ruff-0.16.5-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:f0768e9df4300713fff30733c87575f68b6f1d8de41184e505b7fdd9c0c95eaf", size = 10097648, upload-time = "2026-08-27T16:34:03.16Z" },
670
- { url = "https://files.pythonhosted.org/packages/cc/4e/4cdc9ed3c3e109d2f71e62572a37457298d7bc7501ec3138babb7ed32bbd/ruff-0.16.5-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:95cc70cdc7aa80c338de356279d2adbeb2de0f520b9ecd8aba75b94e95e02f91", size = 9829344, upload-time = "2026-08-27T16:34:05.134Z" },
671
- { url = "https://files.pythonhosted.org/packages/39/4a/31ed35ce31729955fc583ee0d176d6e784c1290cb0b0a75cb2134c1ab72a/ruff-0.16.5-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d185c8398ded1bfd91c0c2cb258346307571eccc473a8490af8c3977399c384a", size = 10277117, upload-time = "2026-08-27T16:34:07.425Z" },
672
- { url = "https://files.pythonhosted.org/packages/a8/a0/60356d86687b4b666d593df213f4dc3041750d024cb7bf2cfa81cfd65c2e/ruff-0.16.5-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:fb8e3a3c4c6a784150a7ced53b015f4b253fc2bf97a610886419ead64b4756ef", size = 10711653, upload-time = "2026-08-27T16:34:09.712Z" },
673
- { url = "https://files.pythonhosted.org/packages/ed/20/656d67f5b25ca9bda4e02b1de25867b2954e1d19e03648060f167ad0f4cc/ruff-0.16.5-py3-none-win32.whl", hash = "sha256:288b0a5f080492fe5635db849f9e2e84aa3cce7b7f0e955997d416c507c76a26", size = 10034250, upload-time = "2026-08-27T16:34:11.8Z" },
674
- { url = "https://files.pythonhosted.org/packages/5b/42/ee8e68a207b9127fcde6c3d7e197def432f346cb1af159e1fa14ca0d1cdc/ruff-0.16.5-py3-none-win_amd64.whl", hash = "sha256:ddc6385fb2137f616357ca03d6c74f4be987f80fed4008566b754f6032b8546f", size = 10516714, upload-time = "2026-08-27T16:34:13.963Z" },
675
- { url = "https://files.pythonhosted.org/packages/73/e3/7df5a396e445b9ba49ce9a9437439a4d80042c61c0ade199abf8d16de1ac/ruff-0.16.5-py3-none-win_arm64.whl", hash = "sha256:a64abe90968719b851bb7cedffaa8753fbdbdadab483089682db623f3edc587e", size = 10391564, upload-time = "2026-08-27T16:34:16.064Z" },
591
+ version = "0.17.3"
592
+ source = { registry = "https://pypi.org/simple" }
593
+ sdist = { url = "https://files.pythonhosted.org/packages/59/73/81f140c4edd9cc323de5478e6bbd3bbcfae9a82692df1a258de8cec6a6d2/ruff-0.17.3.tar.gz", hash = "sha256:a57049c8addb3662073859bb55a7ad35aa54f8a7c9ed268911d1333c5aadaaa9", size = 5339444, upload-time = "2026-10-27T00:34:05.914Z" }
594
+ wheels = [
595
+ { url = "https://files.pythonhosted.org/packages/9e/8c/083365310c4e79c842f25bf5a842facbd9b0c0ec336f96dffa5074fe723d/ruff-0.17.3-py3-none-linux_armv6l.whl", hash = "sha256:ab86b84cd9d05e56d329742c0cabdcbe2d1d56c98f4a04aab9b5b66196febfb4", size = 10216522, upload-time = "2026-10-27T00:33:29.822Z" },
596
+ { url = "https://files.pythonhosted.org/packages/72/26/4b2edf31cfebe9605d8f6ed8f1d6f376d3a53d4c9a123e62661c64c440f0/ruff-0.17.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:e407b4a6852853a9a2cdce96963e94ad9775578bb44e7561a0f2829f3cc04b11", size = 10217786, upload-time = "2026-10-27T00:33:33.949Z" },
597
+ { url = "https://files.pythonhosted.org/packages/a2/7e/537aba4b7f54397a374d2f6a6fc93e9c8015e18553f31a4a7b7dbced48b5/ruff-0.17.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b75cc113b3aca388933d8296b667b1ac401a80317ea3074c9b0a66541199da29", size = 9440362, upload-time = "2026-10-27T00:33:35.784Z" },
598
+ { url = "https://files.pythonhosted.org/packages/3d/66/283e39734f66c8a5ebaa93c22eb7b7515779a0b1d5a5c0ad20e05c0edb41/ruff-0.17.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab5fa7ed5ce18554ea69d850ad162cbaa0c85fc47c08d83a569f806681c9a6ad", size = 10094281, upload-time = "2026-10-27T00:33:38.216Z" },
599
+ { url = "https://files.pythonhosted.org/packages/21/4c/1ffc768497bd025a32c72152771e40c0b99bddc5cc6e4f50c7949a395346/ruff-0.17.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c673c170e27834d1262e3a9c1e97bdc9b9c3b180c63d89173ce69747232474c1", size = 10022543, upload-time = "2026-10-27T00:33:40.181Z" },
600
+ { url = "https://files.pythonhosted.org/packages/73/c3/f90db547301080fcb82c92abf914c8bd57b89911d9b65a6c4cc6b52d0635/ruff-0.17.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6a754c0341bc9ca151b7b335988b3263921c08859f84ca219b70cee825571b6f", size = 10683921, upload-time = "2026-10-27T00:33:42.182Z" },
601
+ { url = "https://files.pythonhosted.org/packages/e5/98/92d4a8a26c6c96cf1a5b34dd59036d8a71e52d650aab065c58867e964e63/ruff-0.17.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4590b9d86c0b1543ebb09094254e191cd43fe8edaf330baa035aab03da251532", size = 11373408, upload-time = "2026-10-27T00:33:44.19Z" },
602
+ { url = "https://files.pythonhosted.org/packages/43/02/1f24d2e3064c9753926deeb901afa57777b37ee46799b09ddd7aee6e5145/ruff-0.17.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bbde18beccd98c29a227c63c99022e3443b99258e08326df6425dfe0443705ef", size = 10977469, upload-time = "2026-10-27T00:33:46.179Z" },
603
+ { url = "https://files.pythonhosted.org/packages/f0/20/fecedea2209f574ab92033b344e01a7f0c2dc76c6d6d19a14c9f8141173f/ruff-0.17.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fa4b0f931cdbcb8a52044f370a3eb429fb42eb88807b0e800fcaa98dd42b24e", size = 10577491, upload-time = "2026-10-27T00:33:48.233Z" },
604
+ { url = "https://files.pythonhosted.org/packages/33/36/b93fdf0bc6f84f0cd487aadfb0354deb40013669ea35ac3d26855de1e959/ruff-0.17.3-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:39405f341deec934b4289634324ad695f72df2970f9121582872eaf5b722f0f5", size = 10608748, upload-time = "2026-10-27T00:33:50.284Z" },
605
+ { url = "https://files.pythonhosted.org/packages/5d/b7/7d3f5f14145daead1efb0b9a8289ed1daa100f419d60774375951723ce00/ruff-0.17.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:68074094f55ca3d29ab19491f640282f7a84061c4c7977aa5094b968ca457e9a", size = 10075057, upload-time = "2026-10-27T00:33:52.074Z" },
606
+ { url = "https://files.pythonhosted.org/packages/b0/ed/93ff7a5909ee56e2bd4b982deae9e0efb2724417874a90c9e41ad66c6dd7/ruff-0.17.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:27bb571ac78fef178fe5118d2827df95c2aae74a48fff2b15f6acd03af5ff5bb", size = 10022431, upload-time = "2026-10-27T00:33:54.061Z" },
607
+ { url = "https://files.pythonhosted.org/packages/9b/07/a83b9eeec8c1c3c0e4eda15f06c3a91001bfd2687ea2f07b750719bf9712/ruff-0.17.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:029c37cbd3de48ca37aa12117bead2d065f15da17d66bf84e0d4274013705db2", size = 10394903, upload-time = "2026-10-27T00:33:56.158Z" },
608
+ { url = "https://files.pythonhosted.org/packages/af/b2/05c39857c2526fcbebe46ad93a8dc97424656dfef14d3ef933abe1ffd331/ruff-0.17.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:692fdb46d0fd9c71e380947dc5fc72f2c3f881073bc1f739e4579376231affbe", size = 10799780, upload-time = "2026-10-27T00:33:58.204Z" },
609
+ { url = "https://files.pythonhosted.org/packages/ec/d9/47171a16739eb7a353936b31c20cf54340531e68c9af7d72fd7a784e235d/ruff-0.17.3-py3-none-win32.whl", hash = "sha256:46539cb031b01fd29ae0a02142483c46640b233ee12bb1c1b690bffa1555d5ca", size = 9908481, upload-time = "2026-10-27T00:34:00.087Z" },
610
+ { url = "https://files.pythonhosted.org/packages/d0/a0/f08c1631bfd81faa6a90eaf70c37c786c11bed2046302b56bb506c25e1a0/ruff-0.17.3-py3-none-win_amd64.whl", hash = "sha256:56b8ffb3f3b3cbccb8b76b71b38261b7ed982ef5d20f5b447b1b61a7f4949b24", size = 10341333, upload-time = "2026-10-27T00:34:02.099Z" },
611
+ { url = "https://files.pythonhosted.org/packages/99/d5/4ad4ed31413c301430918e70d3d38ae6f097af0766cb9ab8c9d502b2a4d6/ruff-0.17.3-py3-none-win_arm64.whl", hash = "sha256:81fce74bcd6be0e9da7c67c7553fd0f1f12964a2052cd728ef917b937a5ca1d9", size = 9854332, upload-time = "2026-10-27T00:34:03.847Z" },
676
612
  ]
677
613
 
678
614
  [[package]]
679
615
  name = "s3transfer"
680
- version = "0.14.0"
616
+ version = "0.19.3"
681
617
  source = { registry = "https://pypi.org/simple" }
682
618
  dependencies = [
683
619
  { name = "botocore" },
684
620
  ]
685
- sdist = { url = "https://files.pythonhosted.org/packages/62/74/8d69dcb7a9efe8baa2046891735e5dfe433ad558ae23d9e3c14c633d1d58/s3transfer-0.14.0.tar.gz", hash = "sha256:eff12264e7c8b4985074ccce27a3b38a485bb7f7422cc8046fee9be4983e4125", size = 151547, upload-time = "2025-09-09T19:23:31.089Z" }
621
+ sdist = { url = "https://files.pythonhosted.org/packages/49/c5/0a5ce655109cb96b8dfad36908a4e108d15f5dc2eff8fbc3146c4312e704/s3transfer-0.19.3.tar.gz", hash = "sha256:8326acc3d056d7f7b8a37110c7d2aea41f67e83f6ae79cd3b5fbcca34c726406", size = 166087, upload-time = "2026-10-19T19:19:49.751Z" }
686
622
  wheels = [
687
- { url = "https://files.pythonhosted.org/packages/48/f0/ae7ca09223a81a1d890b2557186ea015f6e0502e9b8cb8e1813f1d8cfa4e/s3transfer-0.14.0-py3-none-any.whl", hash = "sha256:ea3b790c7077558ed1f02a3072fb3cb992bbbd253392f4b6e9e8976941c7d456", size = 85712, upload-time = "2025-09-09T19:23:30.041Z" },
623
+ { url = "https://files.pythonhosted.org/packages/e2/a4/88f9e10498759121060b8050a1554753dfc04df39bbbcc7aad9ecc8d9440/s3transfer-0.19.3-py3-none-any.whl", hash = "sha256:24eb7535804306355e31c952a90022bf5b2f9d760f9a11062c7493a217c08553", size = 90252, upload-time = "2026-10-19T19:19:48.309Z" },
688
624
  ]
689
625
 
690
626
  [[package]]
@@ -1,12 +0,0 @@
1
- version: 2
2
- updates:
3
-
4
- - package-ecosystem: "github-actions"
5
- directory: "/"
6
- schedule:
7
- interval: "daily"
8
-
9
- - package-ecosystem: "pip"
10
- directory: "/"
11
- schedule:
12
- interval: "daily"
@@ -1,38 +0,0 @@
1
- {
2
- "branches": ["main"],
3
- "tagFormat": "v${version}",
4
- "repositoryUrl": "https://github.com/easytocloud/cloudX-proxy.git",
5
- "plugins": [
6
- ["@semantic-release/commit-analyzer", {
7
- "preset": "angular",
8
- "releaseRules": [
9
- {"type": "feat", "release": "minor"},
10
- {"type": "fix", "release": "patch"},
11
- {"type": "docs", "release": "patch"},
12
- {"type": "style", "release": "patch"},
13
- {"type": "refactor", "release": "patch"},
14
- {"type": "perf", "release": "patch"},
15
- {"type": "test", "release": "patch"},
16
- {"type": "build", "release": "patch"},
17
- {"type": "ci", "release": "patch"},
18
- {"type": "chore", "release": "patch"}
19
- ]
20
- }],
21
- "@semantic-release/release-notes-generator",
22
- [
23
- "@semantic-release/changelog",
24
- {
25
- "changelogFile": "CHANGELOG.md"
26
- }
27
- ],
28
- [
29
- "@semantic-release/git",
30
- {
31
- "assets": [
32
- "CHANGELOG.md"
33
- ]
34
- }
35
- ],
36
- "@semantic-release/github"
37
- ]
38
- }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes