socketsecurity 2.2.78__tar.gz → 2.2.80__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 (117) hide show
  1. socketsecurity-2.2.80/.github/workflows/docker-stable.yml +51 -0
  2. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/.github/workflows/e2e-test.yml +10 -0
  3. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/.github/workflows/pr-preview.yml +2 -0
  4. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/.github/workflows/python-tests.yml +20 -0
  5. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/.github/workflows/release.yml +7 -4
  6. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/.github/workflows/version-check.yml +7 -1
  7. socketsecurity-2.2.80/.github/zizmor.yml +3 -0
  8. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/PKG-INFO +21 -21
  9. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/README.md +19 -19
  10. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/pyproject.toml +2 -3
  11. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/__init__.py +1 -1
  12. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/unit/test_config.py +15 -0
  13. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/uv.lock +1 -102
  14. socketsecurity-2.2.78/.github/workflows/docker-stable.yml +0 -44
  15. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/.github/CODEOWNERS +0 -0
  16. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/.github/PULL_REQUEST_TEMPLATE/bug-fix.md +0 -0
  17. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/.github/PULL_REQUEST_TEMPLATE/feature.md +0 -0
  18. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/.github/PULL_REQUEST_TEMPLATE/improvement.md +0 -0
  19. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  20. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/.gitignore +0 -0
  21. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/.hooks/sync_version.py +0 -0
  22. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/.pre-commit-config.yaml +0 -0
  23. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/.python-version +0 -0
  24. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/CHANGELOG.md +0 -0
  25. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/Dockerfile +0 -0
  26. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/LICENSE +0 -0
  27. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/Makefile +0 -0
  28. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/docs/ci-cd.md +0 -0
  29. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/docs/cli-reference.md +0 -0
  30. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/docs/development.md +0 -0
  31. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/docs/troubleshooting.md +0 -0
  32. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/examples/config/sarif-dashboard-parity.json +0 -0
  33. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/examples/config/sarif-dashboard-parity.toml +0 -0
  34. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/examples/config/sarif-diff-ci-cd.json +0 -0
  35. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/examples/config/sarif-diff-ci-cd.toml +0 -0
  36. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/examples/config/sarif-instance-detail.json +0 -0
  37. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/examples/config/sarif-instance-detail.toml +0 -0
  38. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/instructions/gitlab-commit-status/uat.md +0 -0
  39. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/pytest.ini +0 -0
  40. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/scripts/build_container.sh +0 -0
  41. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/scripts/build_container_flexible.sh +0 -0
  42. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/scripts/deploy-test-docker.sh +0 -0
  43. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/scripts/deploy-test-pypi.sh +0 -0
  44. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/scripts/docker-entrypoint.sh +0 -0
  45. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/scripts/run.sh +0 -0
  46. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/session.md +0 -0
  47. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socket.yml +0 -0
  48. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/config.py +0 -0
  49. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/core/__init__.py +0 -0
  50. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/core/alert_selection.py +0 -0
  51. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/core/classes.py +0 -0
  52. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/core/cli_client.py +0 -0
  53. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/core/exceptions.py +0 -0
  54. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/core/git_interface.py +0 -0
  55. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/core/helper/__init__.py +0 -0
  56. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/core/helper/socket_facts_loader.py +0 -0
  57. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/core/lazy_file_loader.py +0 -0
  58. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/core/logging.py +0 -0
  59. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/core/messages.py +0 -0
  60. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/core/resource_utils.py +0 -0
  61. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/core/scm/__init__.py +0 -0
  62. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/core/scm/base.py +0 -0
  63. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/core/scm/client.py +0 -0
  64. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/core/scm/github.py +0 -0
  65. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/core/scm/gitlab.py +0 -0
  66. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/core/scm_comments.py +0 -0
  67. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/core/socket_config.py +0 -0
  68. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/core/tools/reachability.py +0 -0
  69. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/core/utils.py +0 -0
  70. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/output.py +0 -0
  71. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/plugins/__init__.py +0 -0
  72. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/plugins/base.py +0 -0
  73. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/plugins/formatters/__init__.py +0 -0
  74. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/plugins/formatters/slack.py +0 -0
  75. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/plugins/jira.py +0 -0
  76. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/plugins/manager.py +0 -0
  77. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/plugins/slack.py +0 -0
  78. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/plugins/teams.py +0 -0
  79. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/plugins/webhook.py +0 -0
  80. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/socketsecurity/socketcli.py +0 -0
  81. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/__init__.py +0 -0
  82. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/core/conftest.py +0 -0
  83. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/core/create_diff_input.json +0 -0
  84. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/core/test_diff_alerts.py +0 -0
  85. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/core/test_diff_generation.py +0 -0
  86. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/core/test_has_manifest_files.py +0 -0
  87. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/core/test_package_and_alerts.py +0 -0
  88. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/core/test_sdk_methods.py +0 -0
  89. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/core/test_supporting_methods.py +0 -0
  90. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/data/fullscans/create_response.json +0 -0
  91. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/data/fullscans/diff/stream_diff.json +0 -0
  92. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/data/fullscans/diff/stream_diff_full.json +0 -0
  93. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/data/fullscans/head_scan/metadata.json +0 -0
  94. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/data/fullscans/head_scan/stream_scan.json +0 -0
  95. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/data/fullscans/head_scan/stream_scan_full.json +0 -0
  96. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/data/fullscans/new_scan/metadata.json +0 -0
  97. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/data/fullscans/new_scan/stream_scan.json +0 -0
  98. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/data/repos/repo_info_error.json +0 -0
  99. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/data/repos/repo_info_no_head.json +0 -0
  100. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/data/repos/repo_info_success.json +0 -0
  101. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/data/settings/security-policy.json +0 -0
  102. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/e2e/fixtures/simple-npm/index.js +0 -0
  103. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/e2e/fixtures/simple-npm/package.json +0 -0
  104. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/unit/__init__.py +0 -0
  105. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/unit/test_alert_selection.py +0 -0
  106. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/unit/test_cli_config.py +0 -0
  107. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/unit/test_client.py +0 -0
  108. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/unit/test_gitlab_auth.py +0 -0
  109. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/unit/test_gitlab_auth_fallback.py +0 -0
  110. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/unit/test_gitlab_commit_status.py +0 -0
  111. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/unit/test_gitlab_format.py +0 -0
  112. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/unit/test_output.py +0 -0
  113. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/tests/unit/test_slack_plugin.py +0 -0
  114. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/workflows/bitbucket-pipelines.yml +0 -0
  115. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/workflows/buildkite.yml +0 -0
  116. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/workflows/github-actions.yml +0 -0
  117. {socketsecurity-2.2.78 → socketsecurity-2.2.80}/workflows/gitlab-ci.yml +0 -0
@@ -0,0 +1,51 @@
1
+ name: Mark Release as Stable
2
+ on:
3
+ workflow_dispatch:
4
+ inputs:
5
+ version:
6
+ description: 'Version to mark as stable (e.g., 1.2.3)'
7
+ required: true
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ stable:
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
17
+ with:
18
+ persist-credentials: false
19
+
20
+ - name: Check if version exists in PyPI
21
+ id: version_check
22
+ env:
23
+ INPUT_VERSION: ${{ inputs.version }}
24
+ run: |
25
+ if ! curl -s -f "https://pypi.org/pypi/socketsecurity/${INPUT_VERSION}/json" > /dev/null; then
26
+ echo "Error: Version ${INPUT_VERSION} not found on PyPI"
27
+ exit 1
28
+ fi
29
+ echo "Version ${INPUT_VERSION} found on PyPI - proceeding with release"
30
+
31
+ - name: Set up QEMU
32
+ uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3
33
+
34
+ - name: Set up Docker Buildx
35
+ uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3
36
+
37
+ - name: Login to Docker Hub with Organization Token
38
+ uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
39
+ with:
40
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
41
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
42
+
43
+ - name: Build & Push Stable Docker
44
+ uses: docker/build-push-action@ca052bb54ab0790a636c9b5f226502c73d547a25 # v5
45
+ with:
46
+ push: true
47
+ platforms: linux/amd64,linux/arm64
48
+ tags: socketdev/cli:stable
49
+ build-args: |
50
+ CLI_VERSION=${{ inputs.version }}
51
+
@@ -4,14 +4,20 @@ on:
4
4
  push:
5
5
  branches: [main]
6
6
  pull_request:
7
+ workflow_dispatch:
8
+
9
+ permissions:
10
+ contents: read
7
11
 
8
12
  jobs:
9
13
  e2e-scan:
14
+ if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
10
15
  runs-on: ubuntu-latest
11
16
  steps:
12
17
  - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871
13
18
  with:
14
19
  fetch-depth: 0
20
+ persist-credentials: false
15
21
 
16
22
  - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3
17
23
  with:
@@ -48,11 +54,13 @@ jobs:
48
54
  fi
49
55
 
50
56
  e2e-sarif:
57
+ if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
51
58
  runs-on: ubuntu-latest
52
59
  steps:
53
60
  - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871
54
61
  with:
55
62
  fetch-depth: 0
63
+ persist-credentials: false
56
64
 
57
65
  - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3
58
66
  with:
@@ -87,11 +95,13 @@ jobs:
87
95
  "
88
96
 
89
97
  e2e-reachability:
98
+ if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
90
99
  runs-on: ubuntu-latest
91
100
  steps:
92
101
  - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871
93
102
  with:
94
103
  fetch-depth: 0
104
+ persist-credentials: false
95
105
 
96
106
  - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3
97
107
  with:
@@ -5,6 +5,7 @@ on:
5
5
 
6
6
  jobs:
7
7
  preview:
8
+ if: github.event.pull_request.head.repo.full_name == github.repository
8
9
  runs-on: ubuntu-latest
9
10
  permissions:
10
11
  id-token: write
@@ -14,6 +15,7 @@ jobs:
14
15
  - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871
15
16
  with:
16
17
  fetch-depth: 0
18
+ persist-credentials: false
17
19
  - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3
18
20
  with:
19
21
  python-version: '3.13'
@@ -50,3 +50,23 @@ jobs:
50
50
  uv sync --extra test
51
51
  - name: 🧪 run tests
52
52
  run: uv run pytest -q tests/unit/ tests/core/
53
+
54
+ unsupported-python-install:
55
+ runs-on: ubuntu-latest
56
+ timeout-minutes: 10
57
+ steps:
58
+ - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871
59
+ with:
60
+ fetch-depth: 1
61
+ persist-credentials: false
62
+ - name: 🐍 setup python
63
+ uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3
64
+ with:
65
+ python-version: "3.10"
66
+ - name: 🚫 verify install is rejected on unsupported python
67
+ run: |
68
+ python -m pip install --upgrade pip
69
+ if pip install .; then
70
+ echo "Expected pip install . to fail on Python 3.10"
71
+ exit 1
72
+ fi
@@ -13,6 +13,7 @@ jobs:
13
13
  - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871
14
14
  with:
15
15
  fetch-depth: 0
16
+ persist-credentials: false
16
17
  - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3
17
18
  with:
18
19
  python-version: '3.13'
@@ -26,11 +27,13 @@ jobs:
26
27
 
27
28
  - name: Get Version
28
29
  id: version
30
+ env:
31
+ REF_NAME: ${{ github.ref_name }}
29
32
  run: |
30
33
  RAW_VERSION=$(hatch version)
31
34
  echo "VERSION=$RAW_VERSION" >> $GITHUB_ENV
32
- if [ "v$RAW_VERSION" != "${{ github.ref_name }}" ]; then
33
- echo "Error: Git tag (${{ github.ref_name }}) does not match hatch version (v$RAW_VERSION)"
35
+ if [ "v$RAW_VERSION" != "$REF_NAME" ]; then
36
+ echo "Error: Git tag ($REF_NAME) does not match hatch version (v$RAW_VERSION)"
34
37
  exit 1
35
38
  fi
36
39
 
@@ -52,7 +55,7 @@ jobs:
52
55
  env:
53
56
  VERSION: ${{ env.VERSION }}
54
57
  run: |
55
- if curl -s -f "https://hub.docker.com/v2/repositories/socketdev/cli/tags/${{ env.VERSION }}" > /dev/null; then
58
+ if curl -s -f "https://hub.docker.com/v2/repositories/socketdev/cli/tags/${VERSION}" > /dev/null; then
56
59
  echo "Docker image socketdev/cli:${VERSION} already exists"
57
60
  echo "docker_exists=true" >> $GITHUB_OUTPUT
58
61
  else
@@ -113,4 +116,4 @@ jobs:
113
116
  socketdev/cli:latest
114
117
  socketdev/cli:${{ env.VERSION }}
115
118
  build-args: |
116
- CLI_VERSION=${{ env.VERSION }}
119
+ CLI_VERSION=${{ env.VERSION }}
@@ -7,6 +7,11 @@ on:
7
7
  - 'setup.py'
8
8
  - 'pyproject.toml'
9
9
 
10
+ permissions:
11
+ contents: read
12
+ pull-requests: write
13
+ issues: write
14
+
10
15
  jobs:
11
16
  check_version:
12
17
  runs-on: ubuntu-latest
@@ -14,6 +19,7 @@ jobs:
14
19
  - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871
15
20
  with:
16
21
  fetch-depth: 0 # Fetch all history for all branches
22
+ persist-credentials: false
17
23
 
18
24
  - name: Check version increment
19
25
  id: version_check
@@ -42,7 +48,7 @@ jobs:
42
48
 
43
49
  - name: Manage PR Comment
44
50
  uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea
45
- if: always()
51
+ if: always() && github.event.pull_request.head.repo.full_name == github.repository
46
52
  env:
47
53
  MAIN_VERSION: ${{ env.MAIN_VERSION }}
48
54
  PR_VERSION: ${{ env.PR_VERSION }}
@@ -0,0 +1,3 @@
1
+ rules:
2
+ secrets-outside-env:
3
+ disable: true
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: socketsecurity
3
- Version: 2.2.78
3
+ Version: 2.2.80
4
4
  Summary: Socket Security CLI for CI/CD
5
5
  Project-URL: Homepage, https://socket.dev
6
6
  Author-email: Douglas Coburn <douglas@socket.dev>
@@ -32,7 +32,7 @@ Classifier: Development Status :: 4 - Beta
32
32
  Classifier: Intended Audience :: Developers
33
33
  Classifier: Programming Language :: Python :: 3.11
34
34
  Classifier: Programming Language :: Python :: 3.12
35
- Requires-Python: >=3.10
35
+ Requires-Python: >=3.11
36
36
  Requires-Dist: bs4>=0.0.2
37
37
  Requires-Dist: gitpython
38
38
  Requires-Dist: markdown>=3.10
@@ -60,7 +60,7 @@ Description-Content-Type: text/markdown
60
60
 
61
61
  Socket Python CLI for Socket scans, diff reporting, reachability analysis, and SARIF/GitLab exports.
62
62
 
63
- Comprehensive docs are available in [`docs/`](docs/) for full flag reference, CI/CD-specific guidance, and contributor setup.
63
+ Comprehensive docs are available in [`docs/`](https://github.com/SocketDev/socket-python-cli/tree/main/docs) for full flag reference, CI/CD-specific guidance, and contributor setup.
64
64
 
65
65
  ## Quick start
66
66
 
@@ -85,8 +85,8 @@ socketcli --target-path .
85
85
  ## Common use cases
86
86
 
87
87
  This section covers the paved path/common workflows.
88
- For advanced options and exhaustive details, see [`docs/cli-reference.md`](docs/cli-reference.md).
89
- For CI/CD-specific guidance, see [`docs/ci-cd.md`](docs/ci-cd.md).
88
+ For advanced options and exhaustive details, see [`docs/cli-reference.md`](https://github.com/SocketDev/socket-python-cli/blob/main/docs/cli-reference.md).
89
+ For CI/CD-specific guidance, see [`docs/ci-cd.md`](https://github.com/SocketDev/socket-python-cli/blob/main/docs/ci-cd.md).
90
90
 
91
91
  ### Basic policy scan (no SARIF)
92
92
 
@@ -149,7 +149,7 @@ socketcli \
149
149
  Dashboard parity note:
150
150
  - Full-scope SARIF is the closest match for dashboard-style filtering.
151
151
  - Exact result counts can still differ from the dashboard due to backend/API consolidation differences and grouping semantics.
152
- - See [`docs/troubleshooting.md#dashboard-vs-cli-result-counts`](docs/troubleshooting.md#dashboard-vs-cli-result-counts).
152
+ - See [`docs/troubleshooting.md#dashboard-vs-cli-result-counts`](https://github.com/SocketDev/socket-python-cli/blob/main/docs/troubleshooting.md#dashboard-vs-cli-result-counts).
153
153
 
154
154
  ## Config files (`--config`)
155
155
 
@@ -195,23 +195,23 @@ socketcli --config .socketcli.toml --target-path .
195
195
  Reference sample configs:
196
196
 
197
197
  TOML:
198
- - [`examples/config/sarif-dashboard-parity.toml`](examples/config/sarif-dashboard-parity.toml)
199
- - [`examples/config/sarif-instance-detail.toml`](examples/config/sarif-instance-detail.toml)
200
- - [`examples/config/sarif-diff-ci-cd.toml`](examples/config/sarif-diff-ci-cd.toml)
198
+ - [`examples/config/sarif-dashboard-parity.toml`](https://github.com/SocketDev/socket-python-cli/blob/main/examples/config/sarif-dashboard-parity.toml)
199
+ - [`examples/config/sarif-instance-detail.toml`](https://github.com/SocketDev/socket-python-cli/blob/main/examples/config/sarif-instance-detail.toml)
200
+ - [`examples/config/sarif-diff-ci-cd.toml`](https://github.com/SocketDev/socket-python-cli/blob/main/examples/config/sarif-diff-ci-cd.toml)
201
201
 
202
202
  JSON:
203
- - [`examples/config/sarif-dashboard-parity.json`](examples/config/sarif-dashboard-parity.json)
204
- - [`examples/config/sarif-instance-detail.json`](examples/config/sarif-instance-detail.json)
205
- - [`examples/config/sarif-diff-ci-cd.json`](examples/config/sarif-diff-ci-cd.json)
203
+ - [`examples/config/sarif-dashboard-parity.json`](https://github.com/SocketDev/socket-python-cli/blob/main/examples/config/sarif-dashboard-parity.json)
204
+ - [`examples/config/sarif-instance-detail.json`](https://github.com/SocketDev/socket-python-cli/blob/main/examples/config/sarif-instance-detail.json)
205
+ - [`examples/config/sarif-diff-ci-cd.json`](https://github.com/SocketDev/socket-python-cli/blob/main/examples/config/sarif-diff-ci-cd.json)
206
206
 
207
207
  ## CI/CD examples
208
208
 
209
209
  Prebuilt workflow examples:
210
210
 
211
- - [GitHub Actions](workflows/github-actions.yml)
212
- - [Buildkite](workflows/buildkite.yml)
213
- - [GitLab CI](workflows/gitlab-ci.yml)
214
- - [Bitbucket Pipelines](workflows/bitbucket-pipelines.yml)
211
+ - [GitHub Actions](https://github.com/SocketDev/socket-python-cli/blob/main/workflows/github-actions.yml)
212
+ - [Buildkite](https://github.com/SocketDev/socket-python-cli/blob/main/workflows/buildkite.yml)
213
+ - [GitLab CI](https://github.com/SocketDev/socket-python-cli/blob/main/workflows/gitlab-ci.yml)
214
+ - [Bitbucket Pipelines](https://github.com/SocketDev/socket-python-cli/blob/main/workflows/bitbucket-pipelines.yml)
215
215
 
216
216
  Minimal pattern:
217
217
 
@@ -224,7 +224,7 @@ Minimal pattern:
224
224
 
225
225
  ## Common gotchas
226
226
 
227
- See [`docs/troubleshooting.md`](docs/troubleshooting.md#common-gotchas).
227
+ See [`docs/troubleshooting.md`](https://github.com/SocketDev/socket-python-cli/blob/main/docs/troubleshooting.md#common-gotchas).
228
228
 
229
229
  ## Quick verification checks
230
230
 
@@ -245,7 +245,7 @@ jq '.runs[0].results | length' sarif-diff-reachable.sarif
245
245
 
246
246
  ## Documentation reference
247
247
 
248
- - Full CLI reference: [`docs/cli-reference.md`](docs/cli-reference.md)
249
- - CI/CD guide: [`docs/ci-cd.md`](docs/ci-cd.md)
250
- - Troubleshooting guide: [`docs/troubleshooting.md`](docs/troubleshooting.md)
251
- - Development guide: [`docs/development.md`](docs/development.md)
248
+ - Full CLI reference: [`docs/cli-reference.md`](https://github.com/SocketDev/socket-python-cli/blob/main/docs/cli-reference.md)
249
+ - CI/CD guide: [`docs/ci-cd.md`](https://github.com/SocketDev/socket-python-cli/blob/main/docs/ci-cd.md)
250
+ - Troubleshooting guide: [`docs/troubleshooting.md`](https://github.com/SocketDev/socket-python-cli/blob/main/docs/troubleshooting.md)
251
+ - Development guide: [`docs/development.md`](https://github.com/SocketDev/socket-python-cli/blob/main/docs/development.md)
@@ -2,7 +2,7 @@
2
2
 
3
3
  Socket Python CLI for Socket scans, diff reporting, reachability analysis, and SARIF/GitLab exports.
4
4
 
5
- Comprehensive docs are available in [`docs/`](docs/) for full flag reference, CI/CD-specific guidance, and contributor setup.
5
+ Comprehensive docs are available in [`docs/`](https://github.com/SocketDev/socket-python-cli/tree/main/docs) for full flag reference, CI/CD-specific guidance, and contributor setup.
6
6
 
7
7
  ## Quick start
8
8
 
@@ -27,8 +27,8 @@ socketcli --target-path .
27
27
  ## Common use cases
28
28
 
29
29
  This section covers the paved path/common workflows.
30
- For advanced options and exhaustive details, see [`docs/cli-reference.md`](docs/cli-reference.md).
31
- For CI/CD-specific guidance, see [`docs/ci-cd.md`](docs/ci-cd.md).
30
+ For advanced options and exhaustive details, see [`docs/cli-reference.md`](https://github.com/SocketDev/socket-python-cli/blob/main/docs/cli-reference.md).
31
+ For CI/CD-specific guidance, see [`docs/ci-cd.md`](https://github.com/SocketDev/socket-python-cli/blob/main/docs/ci-cd.md).
32
32
 
33
33
  ### Basic policy scan (no SARIF)
34
34
 
@@ -91,7 +91,7 @@ socketcli \
91
91
  Dashboard parity note:
92
92
  - Full-scope SARIF is the closest match for dashboard-style filtering.
93
93
  - Exact result counts can still differ from the dashboard due to backend/API consolidation differences and grouping semantics.
94
- - See [`docs/troubleshooting.md#dashboard-vs-cli-result-counts`](docs/troubleshooting.md#dashboard-vs-cli-result-counts).
94
+ - See [`docs/troubleshooting.md#dashboard-vs-cli-result-counts`](https://github.com/SocketDev/socket-python-cli/blob/main/docs/troubleshooting.md#dashboard-vs-cli-result-counts).
95
95
 
96
96
  ## Config files (`--config`)
97
97
 
@@ -137,23 +137,23 @@ socketcli --config .socketcli.toml --target-path .
137
137
  Reference sample configs:
138
138
 
139
139
  TOML:
140
- - [`examples/config/sarif-dashboard-parity.toml`](examples/config/sarif-dashboard-parity.toml)
141
- - [`examples/config/sarif-instance-detail.toml`](examples/config/sarif-instance-detail.toml)
142
- - [`examples/config/sarif-diff-ci-cd.toml`](examples/config/sarif-diff-ci-cd.toml)
140
+ - [`examples/config/sarif-dashboard-parity.toml`](https://github.com/SocketDev/socket-python-cli/blob/main/examples/config/sarif-dashboard-parity.toml)
141
+ - [`examples/config/sarif-instance-detail.toml`](https://github.com/SocketDev/socket-python-cli/blob/main/examples/config/sarif-instance-detail.toml)
142
+ - [`examples/config/sarif-diff-ci-cd.toml`](https://github.com/SocketDev/socket-python-cli/blob/main/examples/config/sarif-diff-ci-cd.toml)
143
143
 
144
144
  JSON:
145
- - [`examples/config/sarif-dashboard-parity.json`](examples/config/sarif-dashboard-parity.json)
146
- - [`examples/config/sarif-instance-detail.json`](examples/config/sarif-instance-detail.json)
147
- - [`examples/config/sarif-diff-ci-cd.json`](examples/config/sarif-diff-ci-cd.json)
145
+ - [`examples/config/sarif-dashboard-parity.json`](https://github.com/SocketDev/socket-python-cli/blob/main/examples/config/sarif-dashboard-parity.json)
146
+ - [`examples/config/sarif-instance-detail.json`](https://github.com/SocketDev/socket-python-cli/blob/main/examples/config/sarif-instance-detail.json)
147
+ - [`examples/config/sarif-diff-ci-cd.json`](https://github.com/SocketDev/socket-python-cli/blob/main/examples/config/sarif-diff-ci-cd.json)
148
148
 
149
149
  ## CI/CD examples
150
150
 
151
151
  Prebuilt workflow examples:
152
152
 
153
- - [GitHub Actions](workflows/github-actions.yml)
154
- - [Buildkite](workflows/buildkite.yml)
155
- - [GitLab CI](workflows/gitlab-ci.yml)
156
- - [Bitbucket Pipelines](workflows/bitbucket-pipelines.yml)
153
+ - [GitHub Actions](https://github.com/SocketDev/socket-python-cli/blob/main/workflows/github-actions.yml)
154
+ - [Buildkite](https://github.com/SocketDev/socket-python-cli/blob/main/workflows/buildkite.yml)
155
+ - [GitLab CI](https://github.com/SocketDev/socket-python-cli/blob/main/workflows/gitlab-ci.yml)
156
+ - [Bitbucket Pipelines](https://github.com/SocketDev/socket-python-cli/blob/main/workflows/bitbucket-pipelines.yml)
157
157
 
158
158
  Minimal pattern:
159
159
 
@@ -166,7 +166,7 @@ Minimal pattern:
166
166
 
167
167
  ## Common gotchas
168
168
 
169
- See [`docs/troubleshooting.md`](docs/troubleshooting.md#common-gotchas).
169
+ See [`docs/troubleshooting.md`](https://github.com/SocketDev/socket-python-cli/blob/main/docs/troubleshooting.md#common-gotchas).
170
170
 
171
171
  ## Quick verification checks
172
172
 
@@ -187,7 +187,7 @@ jq '.runs[0].results | length' sarif-diff-reachable.sarif
187
187
 
188
188
  ## Documentation reference
189
189
 
190
- - Full CLI reference: [`docs/cli-reference.md`](docs/cli-reference.md)
191
- - CI/CD guide: [`docs/ci-cd.md`](docs/ci-cd.md)
192
- - Troubleshooting guide: [`docs/troubleshooting.md`](docs/troubleshooting.md)
193
- - Development guide: [`docs/development.md`](docs/development.md)
190
+ - Full CLI reference: [`docs/cli-reference.md`](https://github.com/SocketDev/socket-python-cli/blob/main/docs/cli-reference.md)
191
+ - CI/CD guide: [`docs/ci-cd.md`](https://github.com/SocketDev/socket-python-cli/blob/main/docs/ci-cd.md)
192
+ - Troubleshooting guide: [`docs/troubleshooting.md`](https://github.com/SocketDev/socket-python-cli/blob/main/docs/troubleshooting.md)
193
+ - Development guide: [`docs/development.md`](https://github.com/SocketDev/socket-python-cli/blob/main/docs/development.md)
@@ -6,8 +6,8 @@ build-backend = "hatchling.build"
6
6
 
7
7
  [project]
8
8
  name = "socketsecurity"
9
- version = "2.2.78"
10
- requires-python = ">= 3.10"
9
+ version = "2.2.80"
10
+ requires-python = ">= 3.11"
11
11
  license = {"file" = "LICENSE"}
12
12
  dependencies = [
13
13
  'requests',
@@ -166,4 +166,3 @@ include = ["socketsecurity", "LICENSE"]
166
166
  dev = [
167
167
  "pre-commit>=4.3.0",
168
168
  ]
169
-
@@ -1,3 +1,3 @@
1
1
  __author__ = 'socket.dev'
2
- __version__ = '2.2.78'
2
+ __version__ = '2.2.80'
3
3
  USER_AGENT = f'SocketPythonCLI/{__version__}'
@@ -1,5 +1,7 @@
1
+ from pathlib import Path
1
2
  import pytest
2
3
  from unittest.mock import patch
4
+ import tomllib
3
5
  from socketsecurity.core.socket_config import SocketConfig
4
6
  from socketsecurity.config import CliConfig
5
7
 
@@ -162,3 +164,16 @@ class TestCliConfigValidation:
162
164
  assert config.sarif_scope == "full"
163
165
  assert config.sarif_grouping == "alert"
164
166
  assert config.sarif_reachability == "reachable"
167
+
168
+
169
+ def test_pyproject_requires_python_matches_tomllib_usage():
170
+ pyproject = tomllib.loads(Path("pyproject.toml").read_text(encoding="utf-8"))
171
+ requires_python = pyproject["project"]["requires-python"]
172
+
173
+ assert requires_python.startswith(">=")
174
+
175
+ minimum_version = tuple(int(part) for part in requires_python.removeprefix(">=").split(".")[:2])
176
+ config_module = Path("socketsecurity/config.py").read_text(encoding="utf-8")
177
+
178
+ if "import tomllib" in config_module:
179
+ assert minimum_version >= (3, 11)
@@ -1,13 +1,12 @@
1
1
  version = 1
2
2
  revision = 3
3
- requires-python = ">=3.10"
3
+ requires-python = ">=3.11"
4
4
 
5
5
  [[package]]
6
6
  name = "anyio"
7
7
  version = "4.12.0"
8
8
  source = { registry = "https://pypi.org/simple" }
9
9
  dependencies = [
10
- { name = "exceptiongroup", marker = "python_full_version < '3.11'" },
11
10
  { name = "idna" },
12
11
  { name = "typing-extensions", marker = "python_full_version < '3.13'" },
13
12
  ]
@@ -16,15 +15,6 @@ wheels = [
16
15
  { url = "https://files.pythonhosted.org/packages/7f/9c/36c5c37947ebfb8c7f22e0eb6e4d188ee2d53aa3880f3f2744fb894f0cb1/anyio-4.12.0-py3-none-any.whl", hash = "sha256:dad2376a628f98eeca4881fc56cd06affd18f659b17a747d3ff0307ced94b1bb", size = 113362, upload-time = "2025-11-28T23:36:57.897Z" },
17
16
  ]
18
17
 
19
- [[package]]
20
- name = "backports-asyncio-runner"
21
- version = "1.2.0"
22
- source = { registry = "https://pypi.org/simple" }
23
- sdist = { url = "https://files.pythonhosted.org/packages/8e/ff/70dca7d7cb1cbc0edb2c6cc0c38b65cba36cccc491eca64cabd5fe7f8670/backports_asyncio_runner-1.2.0.tar.gz", hash = "sha256:a5aa7b2b7d8f8bfcaa2b57313f70792df84e32a2a746f585213373f900b42162", size = 69893, upload-time = "2025-07-02T02:27:15.685Z" }
24
- wheels = [
25
- { url = "https://files.pythonhosted.org/packages/a0/59/76ab57e3fe74484f48a53f8e337171b4a2349e506eabe136d7e01d059086/backports_asyncio_runner-1.2.0-py3-none-any.whl", hash = "sha256:0da0a936a8aeb554eccb426dc55af3ba63bcdc69fa1a600b5bb305413a4477b5", size = 12313, upload-time = "2025-07-02T02:27:14.263Z" },
26
- ]
27
-
28
18
  [[package]]
29
19
  name = "backports-tarfile"
30
20
  version = "1.2.0"
@@ -40,23 +30,6 @@ version = "1.3.0"
40
30
  source = { registry = "https://pypi.org/simple" }
41
31
  sdist = { url = "https://files.pythonhosted.org/packages/f4/b1/36a5182ce1d8ef9ef32bff69037bd28b389bbdb66338f8069e61da7028cb/backports_zstd-1.3.0.tar.gz", hash = "sha256:e8b2d68e2812f5c9970cabc5e21da8b409b5ed04e79b4585dbffa33e9b45ebe2", size = 997138, upload-time = "2025-12-29T17:28:06.143Z" }
42
32
  wheels = [
43
- { url = "https://files.pythonhosted.org/packages/76/70/766f6ebbb9db2ed75951f0a671ee15931dc69278c84d9f09b08dd6b67c3e/backports_zstd-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a2db17a6d9bf6b4dc223b3f6414aa9db6d1afe9de9bff61d582c2934ca456a0", size = 435664, upload-time = "2025-12-29T17:25:29.201Z" },
44
- { url = "https://files.pythonhosted.org/packages/55/f8/7b3fad9c6ee5ff3bcd7c941586675007330197ff4a388f01c73198ecc8bb/backports_zstd-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a7f16b98ba81780a9517ce6c493e1aea9b7d72de2b1efa08375136c270e1ecba", size = 362060, upload-time = "2025-12-29T17:25:30.94Z" },
45
- { url = "https://files.pythonhosted.org/packages/68/9e/cad0f508ed7c3fbd07398f22b5bf25aa0523fcf56c84c3def642909e80ae/backports_zstd-1.3.0-cp310-cp310-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:1124a169a647671ccb4654a0ef1d0b42d6735c45ce3d0adf609df22fb1f099db", size = 505958, upload-time = "2025-12-29T17:25:32.694Z" },
46
- { url = "https://files.pythonhosted.org/packages/b7/dc/96dc55c043b0d86e53ae9608b496196936244c1ecf7e95cdf66d0dbc0f23/backports_zstd-1.3.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8410fda08b36202d01ab4503f6787c763898888cb1a48c19fce94711563d3ee3", size = 475571, upload-time = "2025-12-29T17:25:33.9Z" },
47
- { url = "https://files.pythonhosted.org/packages/20/48/d9c8c8c2a5ac57fc5697f1945254af31407b0c5f80335a175a7c215b4118/backports_zstd-1.3.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ab139d1fc0e91a697e82fa834e6404098802f11b6035607174776173ded9a2cc", size = 581199, upload-time = "2025-12-29T17:25:35.566Z" },
48
- { url = "https://files.pythonhosted.org/packages/0d/ca/7fe70d2d39ed39e26a6c6f6c1dd229f1ab889500d5c90b17527702b1a21e/backports_zstd-1.3.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6f3115d203f387f77c23b5461fb6678d282d4f276f9f39298ad242b00120afc7", size = 640846, upload-time = "2025-12-29T17:25:36.86Z" },
49
- { url = "https://files.pythonhosted.org/packages/0e/d8/5b8580469e70b72402212885bf19b9d31eaf23549b602e0c294edf380e25/backports_zstd-1.3.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:116f65cce84e215dfac0414924b051faf8d29dc7188cf3944dd1e5be8dd15a32", size = 491061, upload-time = "2025-12-29T17:25:38.721Z" },
50
- { url = "https://files.pythonhosted.org/packages/cc/dd/17a752263fccd1ba24184b7e89c14cd31553d512e2e5b065f38e63a0ba86/backports_zstd-1.3.0-cp310-cp310-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:04def169e4a9ae291298124da4e097c6d6545d0e93164f934b716da04d24630a", size = 565071, upload-time = "2025-12-29T17:25:40.372Z" },
51
- { url = "https://files.pythonhosted.org/packages/1a/81/df23d3fe664b2497ab2ec01dc012cb9304e7d568c67f50b1b324fb2d8cbb/backports_zstd-1.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:481b586291ef02a250f03d4c31a37c9881e5e93556568abbd20ca1ad720d443f", size = 481518, upload-time = "2025-12-29T17:25:41.925Z" },
52
- { url = "https://files.pythonhosted.org/packages/ba/cd/e50dd85fde890c5d79e1ed5dc241f1c45f87b6c12571fdb60add57f2ee66/backports_zstd-1.3.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0290979eea67f7275fa42d5859cc5bea94f2c08cca6bc36396673476773d2bad", size = 509464, upload-time = "2025-12-29T17:25:43.844Z" },
53
- { url = "https://files.pythonhosted.org/packages/d3/bb/e429156e4b834837fe78b4f32ed512491aea39415444420c79ccd3aa0526/backports_zstd-1.3.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:01c699d8c803dc9f9c9d6ede21b75ec99f45c3b411821011692befca538928cb", size = 585563, upload-time = "2025-12-29T17:25:45.038Z" },
54
- { url = "https://files.pythonhosted.org/packages/95/c0/1a0d245325827242aefe76f4f3477ec183b996b8db5105698564f8303481/backports_zstd-1.3.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:2c662912cfc1a5ebd1d2162ac651549d58bd3c97a8096130ec13c703fca355f2", size = 562889, upload-time = "2025-12-29T17:25:46.576Z" },
55
- { url = "https://files.pythonhosted.org/packages/93/42/126b2bc7540a15452c3ebdf190ebfea8a8644e29b22f4e10e2a6aa2389e4/backports_zstd-1.3.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:3180c8eb085396928e9946167e610aa625922b82c3e2263c5f17000556370168", size = 631423, upload-time = "2025-12-29T17:25:47.81Z" },
56
- { url = "https://files.pythonhosted.org/packages/dc/32/018e49657411582569032b7d1bb5d62e514aad8b44952de740ec6250588d/backports_zstd-1.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5b9a8c75a294e7ffa18fc8425a763facc366435a8b442e4dffdc19fa9499a22c", size = 495122, upload-time = "2025-12-29T17:25:49.377Z" },
57
- { url = "https://files.pythonhosted.org/packages/c2/9e/cdd1d2e1d3612bb90d9cf9b23bea06f2155cdafccd8b6f28a1c4d7750004/backports_zstd-1.3.0-cp310-cp310-win32.whl", hash = "sha256:845defdb172385f17123d92a00d2e952d341e9ae310bfa2410c292bf03846034", size = 288573, upload-time = "2025-12-29T17:25:51.167Z" },
58
- { url = "https://files.pythonhosted.org/packages/55/7c/2e9c80f08375bd14262cefa69297a926134f517c9955c0795eec5e1d470e/backports_zstd-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:43a9fea6299c801da85221e387b32d90a9ad7c62aa2a34edf525359ce5ad8f3a", size = 313506, upload-time = "2025-12-29T17:25:52.778Z" },
59
- { url = "https://files.pythonhosted.org/packages/c5/5d/fa67e8174f54db44eb33498abb7f98bea4f2329e873b225391bda0113a5e/backports_zstd-1.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:df8473cb117e1316e6c6101f2724e025bd8f50af2dc009d0001c0aabfb5eb57c", size = 288688, upload-time = "2025-12-29T17:25:54.012Z" },
60
33
  { url = "https://files.pythonhosted.org/packages/ac/28/ed31a0e35feb4538a996348362051b52912d50f00d25c2d388eccef9242c/backports_zstd-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:249f90b39d3741c48620021a968b35f268ca70e35f555abeea9ff95a451f35f9", size = 435660, upload-time = "2025-12-29T17:25:55.207Z" },
61
34
  { url = "https://files.pythonhosted.org/packages/00/0d/3db362169d80442adda9dd563c4f0bb10091c8c1c9a158037f4ecd53988e/backports_zstd-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b0e71e83e46154a9d3ced6d4de9a2fea8207ee1e4832aeecf364dc125eda305c", size = 362056, upload-time = "2025-12-29T17:25:56.729Z" },
62
35
  { url = "https://files.pythonhosted.org/packages/bd/00/b67ba053a7d6f6dbe2f8a704b7d3a5e01b1d2e2e8edbc9b634f2702ef73c/backports_zstd-1.3.0-cp311-cp311-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:cbc6193acd21f96760c94dd71bf32b161223e8503f5277acb0a5ab54e5598957", size = 505957, upload-time = "2025-12-29T17:25:57.941Z" },
@@ -125,12 +98,6 @@ wheels = [
125
98
  { url = "https://files.pythonhosted.org/packages/32/04/cfab76878f360f124dbb533779e1e4603c801a0f5ada72ae5c742b7c4d7d/backports_zstd-1.3.0-cp313-cp313t-win32.whl", hash = "sha256:7d3f0f2499d2049ec53d2674c605a4b3052c217cc7ee49c05258046411685adc", size = 289389, upload-time = "2025-12-29T17:27:22.287Z" },
126
99
  { url = "https://files.pythonhosted.org/packages/cb/ff/dbcfb6c9c922ab6d98f3d321e7d0c7b34ecfa26f3ca71d930fe1ef639737/backports_zstd-1.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:eb2f8fab0b1ea05148394cb34a9e543a43477178765f2d6e7c84ed332e34935e", size = 314776, upload-time = "2025-12-29T17:27:23.458Z" },
127
100
  { url = "https://files.pythonhosted.org/packages/01/4b/82e4baae3117806639fe1c693b1f2f7e6133a7cefd1fa2e38018c8edcd68/backports_zstd-1.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:c66ad9eb5bfbe28c2387b7fc58ddcdecfb336d6e4e60bcba1694a906c1f21a6c", size = 289315, upload-time = "2025-12-29T17:27:24.601Z" },
128
- { url = "https://files.pythonhosted.org/packages/95/b7/e843d32122f25d9568e75d1e7a29c00eae5e5728015604f3f6d02259b3a5/backports_zstd-1.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:3ab0d5632b84eff4355c42a04668cfe6466f7d390890f718978582bd1ff36949", size = 409771, upload-time = "2025-12-29T17:27:48.869Z" },
129
- { url = "https://files.pythonhosted.org/packages/fa/a5/d6a897d4b91732f54b4506858f1da65d7a5b2dc0dbe36a23992a64f09f5a/backports_zstd-1.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:6b97cea95dbb1a97c02afd718155fad93f747815069722107a429804c355e206", size = 339289, upload-time = "2025-12-29T17:27:50.055Z" },
130
- { url = "https://files.pythonhosted.org/packages/3f/b0/f0ce566ec221b284508eebbf574a779ba4a8932830db6ea03b6176f336a2/backports_zstd-1.3.0-pp310-pypy310_pp73-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:477895f2642f9397aeba69618df2c91d7f336e02df83d1e623ac37c5d3a5115e", size = 420335, upload-time = "2025-12-29T17:27:51.455Z" },
131
- { url = "https://files.pythonhosted.org/packages/62/6d/bf55652c84c79b2565d3087265bcb097719540a313dee16359a54d83ab4e/backports_zstd-1.3.0-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:330172aaf5fd3bfa53f49318abc6d1d4238cb043c384cf71f7b8f0fe2fb7ce31", size = 393880, upload-time = "2025-12-29T17:27:52.869Z" },
132
- { url = "https://files.pythonhosted.org/packages/be/e0/d1feebb70ffeb150e2891c6f09700079f4a60085ebc67529eb1ca72fb5c2/backports_zstd-1.3.0-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:32974e71eff15897ed3f8b7766a753d9f3197ea4f1c9025d80f8de099a691b99", size = 413840, upload-time = "2025-12-29T17:27:54.527Z" },
133
- { url = "https://files.pythonhosted.org/packages/36/28/3b7be27ae51e418d3a724bbc4cb7fea77b6bd38b5007e333a56b0cb165c8/backports_zstd-1.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:993e3a34eaba5928a2065545e34bf75c65b9c34ecb67e43d5ef49b16cc182077", size = 299685, upload-time = "2025-12-29T17:27:56.149Z" },
134
101
  { url = "https://files.pythonhosted.org/packages/9a/d9/8c9c246e5ea79a4f45d551088b11b61f2dc7efcdc5dbe6df3be84a506e0c/backports_zstd-1.3.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:968167d29f012cee7b112ad031a8925e484e97e99288e55e4d62962c3a1013e3", size = 409666, upload-time = "2025-12-29T17:27:57.37Z" },
135
102
  { url = "https://files.pythonhosted.org/packages/a4/4f/a55b33c314ca8c9074e99daab54d04c5d212070ae7dbc435329baf1b139e/backports_zstd-1.3.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d8f6fc7d62b71083b574193dd8fb3a60e6bb34880cc0132aad242943af301f7a", size = 339199, upload-time = "2025-12-29T17:27:58.542Z" },
136
103
  { url = "https://files.pythonhosted.org/packages/9d/13/ce31bd048b1c88d0f65d7af60b6cf89cfbed826c7c978f0ebca9a8a71cfc/backports_zstd-1.3.0-pp311-pypy311_pp73-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:e0f2eca6aac280fdb77991ad3362487ee91a7fb064ad40043fb5a0bf5a376943", size = 420332, upload-time = "2025-12-29T17:28:00.332Z" },
@@ -182,14 +149,6 @@ dependencies = [
182
149
  ]
183
150
  sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" }
184
151
  wheels = [
185
- { url = "https://files.pythonhosted.org/packages/50/bd/b1a6362b80628111e6653c961f987faa55262b4002fcec42308cad1db680/cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c", size = 208811, upload-time = "2025-09-08T23:22:12.267Z" },
186
- { url = "https://files.pythonhosted.org/packages/4f/27/6933a8b2562d7bd1fb595074cf99cc81fc3789f6a6c05cdabb46284a3188/cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb", size = 216402, upload-time = "2025-09-08T23:22:13.455Z" },
187
- { url = "https://files.pythonhosted.org/packages/05/eb/b86f2a2645b62adcfff53b0dd97e8dfafb5c8aa864bd0d9a2c2049a0d551/cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0", size = 203217, upload-time = "2025-09-08T23:22:14.596Z" },
188
- { url = "https://files.pythonhosted.org/packages/9f/e0/6cbe77a53acf5acc7c08cc186c9928864bd7c005f9efd0d126884858a5fe/cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4", size = 203079, upload-time = "2025-09-08T23:22:15.769Z" },
189
- { url = "https://files.pythonhosted.org/packages/98/29/9b366e70e243eb3d14a5cb488dfd3a0b6b2f1fb001a203f653b93ccfac88/cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453", size = 216475, upload-time = "2025-09-08T23:22:17.427Z" },
190
- { url = "https://files.pythonhosted.org/packages/21/7a/13b24e70d2f90a322f2900c5d8e1f14fa7e2a6b3332b7309ba7b2ba51a5a/cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495", size = 218829, upload-time = "2025-09-08T23:22:19.069Z" },
191
- { url = "https://files.pythonhosted.org/packages/60/99/c9dc110974c59cc981b1f5b66e1d8af8af764e00f0293266824d9c4254bc/cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5", size = 211211, upload-time = "2025-09-08T23:22:20.588Z" },
192
- { url = "https://files.pythonhosted.org/packages/49/72/ff2d12dbf21aca1b32a40ed792ee6b40f6dc3a9cf1644bd7ef6e95e0ac5e/cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb", size = 218036, upload-time = "2025-09-08T23:22:22.143Z" },
193
152
  { url = "https://files.pythonhosted.org/packages/b1/b7/1200d354378ef52ec227395d95c2576330fd22a869f7a70e88e1447eb234/cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92", size = 209613, upload-time = "2025-09-08T23:22:29.475Z" },
194
153
  { url = "https://files.pythonhosted.org/packages/b8/56/6033f5e86e8cc9bb629f0077ba71679508bdf54a9a5e112a3c0b91870332/cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93", size = 216476, upload-time = "2025-09-08T23:22:31.063Z" },
195
154
  { url = "https://files.pythonhosted.org/packages/dc/7f/55fecd70f7ece178db2f26128ec41430d8720f2d12ca97bf8f0a628207d5/cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5", size = 203374, upload-time = "2025-09-08T23:22:32.507Z" },
@@ -241,22 +200,6 @@ version = "3.4.4"
241
200
  source = { registry = "https://pypi.org/simple" }
242
201
  sdist = { url = "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a", size = 129418, upload-time = "2025-10-14T04:42:32.879Z" }
243
202
  wheels = [
244
- { url = "https://files.pythonhosted.org/packages/1f/b8/6d51fc1d52cbd52cd4ccedd5b5b2f0f6a11bbf6765c782298b0f3e808541/charset_normalizer-3.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d", size = 209709, upload-time = "2025-10-14T04:40:11.385Z" },
245
- { url = "https://files.pythonhosted.org/packages/5c/af/1f9d7f7faafe2ddfb6f72a2e07a548a629c61ad510fe60f9630309908fef/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8", size = 148814, upload-time = "2025-10-14T04:40:13.135Z" },
246
- { url = "https://files.pythonhosted.org/packages/79/3d/f2e3ac2bbc056ca0c204298ea4e3d9db9b4afe437812638759db2c976b5f/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad", size = 144467, upload-time = "2025-10-14T04:40:14.728Z" },
247
- { url = "https://files.pythonhosted.org/packages/ec/85/1bf997003815e60d57de7bd972c57dc6950446a3e4ccac43bc3070721856/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8", size = 162280, upload-time = "2025-10-14T04:40:16.14Z" },
248
- { url = "https://files.pythonhosted.org/packages/3e/8e/6aa1952f56b192f54921c436b87f2aaf7c7a7c3d0d1a765547d64fd83c13/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d", size = 159454, upload-time = "2025-10-14T04:40:17.567Z" },
249
- { url = "https://files.pythonhosted.org/packages/36/3b/60cbd1f8e93aa25d1c669c649b7a655b0b5fb4c571858910ea9332678558/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313", size = 153609, upload-time = "2025-10-14T04:40:19.08Z" },
250
- { url = "https://files.pythonhosted.org/packages/64/91/6a13396948b8fd3c4b4fd5bc74d045f5637d78c9675585e8e9fbe5636554/charset_normalizer-3.4.4-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e", size = 151849, upload-time = "2025-10-14T04:40:20.607Z" },
251
- { url = "https://files.pythonhosted.org/packages/b7/7a/59482e28b9981d105691e968c544cc0df3b7d6133152fb3dcdc8f135da7a/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93", size = 151586, upload-time = "2025-10-14T04:40:21.719Z" },
252
- { url = "https://files.pythonhosted.org/packages/92/59/f64ef6a1c4bdd2baf892b04cd78792ed8684fbc48d4c2afe467d96b4df57/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0", size = 145290, upload-time = "2025-10-14T04:40:23.069Z" },
253
- { url = "https://files.pythonhosted.org/packages/6b/63/3bf9f279ddfa641ffa1962b0db6a57a9c294361cc2f5fcac997049a00e9c/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84", size = 163663, upload-time = "2025-10-14T04:40:24.17Z" },
254
- { url = "https://files.pythonhosted.org/packages/ed/09/c9e38fc8fa9e0849b172b581fd9803bdf6e694041127933934184e19f8c3/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e", size = 151964, upload-time = "2025-10-14T04:40:25.368Z" },
255
- { url = "https://files.pythonhosted.org/packages/d2/d1/d28b747e512d0da79d8b6a1ac18b7ab2ecfd81b2944c4c710e166d8dd09c/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db", size = 161064, upload-time = "2025-10-14T04:40:26.806Z" },
256
- { url = "https://files.pythonhosted.org/packages/bb/9a/31d62b611d901c3b9e5500c36aab0ff5eb442043fb3a1c254200d3d397d9/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6", size = 155015, upload-time = "2025-10-14T04:40:28.284Z" },
257
- { url = "https://files.pythonhosted.org/packages/1f/f3/107e008fa2bff0c8b9319584174418e5e5285fef32f79d8ee6a430d0039c/charset_normalizer-3.4.4-cp310-cp310-win32.whl", hash = "sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f", size = 99792, upload-time = "2025-10-14T04:40:29.613Z" },
258
- { url = "https://files.pythonhosted.org/packages/eb/66/e396e8a408843337d7315bab30dbf106c38966f1819f123257f5520f8a96/charset_normalizer-3.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d", size = 107198, upload-time = "2025-10-14T04:40:30.644Z" },
259
- { url = "https://files.pythonhosted.org/packages/b5/58/01b4f815bf0312704c267f2ccb6e5d42bcc7752340cd487bc9f8c3710597/charset_normalizer-3.4.4-cp310-cp310-win_arm64.whl", hash = "sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69", size = 100262, upload-time = "2025-10-14T04:40:32.108Z" },
260
203
  { url = "https://files.pythonhosted.org/packages/ed/27/c6491ff4954e58a10f69ad90aca8a1b6fe9c5d3c6f380907af3c37435b59/charset_normalizer-3.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8", size = 206988, upload-time = "2025-10-14T04:40:33.79Z" },
261
204
  { url = "https://files.pythonhosted.org/packages/94/59/2e87300fe67ab820b5428580a53cad894272dbb97f38a7a814a2a1ac1011/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0", size = 147324, upload-time = "2025-10-14T04:40:34.961Z" },
262
205
  { url = "https://files.pythonhosted.org/packages/07/fb/0cf61dc84b2b088391830f6274cb57c82e4da8bbc2efeac8c025edb88772/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3", size = 142742, upload-time = "2025-10-14T04:40:36.105Z" },
@@ -351,18 +294,6 @@ version = "7.13.1"
351
294
  source = { registry = "https://pypi.org/simple" }
352
295
  sdist = { url = "https://files.pythonhosted.org/packages/23/f9/e92df5e07f3fc8d4c7f9a0f146ef75446bf870351cd37b788cf5897f8079/coverage-7.13.1.tar.gz", hash = "sha256:b7593fe7eb5feaa3fbb461ac79aac9f9fc0387a5ca8080b0c6fe2ca27b091afd", size = 825862, upload-time = "2025-12-28T15:42:56.969Z" }
353
296
  wheels = [
354
- { url = "https://files.pythonhosted.org/packages/2d/9a/3742e58fd04b233df95c012ee9f3dfe04708a5e1d32613bd2d47d4e1be0d/coverage-7.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e1fa280b3ad78eea5be86f94f461c04943d942697e0dac889fa18fff8f5f9147", size = 218633, upload-time = "2025-12-28T15:40:10.165Z" },
355
- { url = "https://files.pythonhosted.org/packages/7e/45/7e6bdc94d89cd7c8017ce735cf50478ddfe765d4fbf0c24d71d30ea33d7a/coverage-7.13.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c3d8c679607220979434f494b139dfb00131ebf70bb406553d69c1ff01a5c33d", size = 219147, upload-time = "2025-12-28T15:40:12.069Z" },
356
- { url = "https://files.pythonhosted.org/packages/f7/38/0d6a258625fd7f10773fe94097dc16937a5f0e3e0cdf3adef67d3ac6baef/coverage-7.13.1-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:339dc63b3eba969067b00f41f15ad161bf2946613156fb131266d8debc8e44d0", size = 245894, upload-time = "2025-12-28T15:40:13.556Z" },
357
- { url = "https://files.pythonhosted.org/packages/27/58/409d15ea487986994cbd4d06376e9860e9b157cfbfd402b1236770ab8dd2/coverage-7.13.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:db622b999ffe49cb891f2fff3b340cdc2f9797d01a0a202a0973ba2562501d90", size = 247721, upload-time = "2025-12-28T15:40:15.37Z" },
358
- { url = "https://files.pythonhosted.org/packages/da/bf/6e8056a83fd7a96c93341f1ffe10df636dd89f26d5e7b9ca511ce3bcf0df/coverage-7.13.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d1443ba9acbb593fa7c1c29e011d7c9761545fe35e7652e85ce7f51a16f7e08d", size = 249585, upload-time = "2025-12-28T15:40:17.226Z" },
359
- { url = "https://files.pythonhosted.org/packages/f4/15/e1daff723f9f5959acb63cbe35b11203a9df77ee4b95b45fffd38b318390/coverage-7.13.1-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c832ec92c4499ac463186af72f9ed4d8daec15499b16f0a879b0d1c8e5cf4a3b", size = 246597, upload-time = "2025-12-28T15:40:19.028Z" },
360
- { url = "https://files.pythonhosted.org/packages/74/a6/1efd31c5433743a6ddbc9d37ac30c196bb07c7eab3d74fbb99b924c93174/coverage-7.13.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:562ec27dfa3f311e0db1ba243ec6e5f6ab96b1edfcfc6cf86f28038bc4961ce6", size = 247626, upload-time = "2025-12-28T15:40:20.846Z" },
361
- { url = "https://files.pythonhosted.org/packages/6d/9f/1609267dd3e749f57fdd66ca6752567d1c13b58a20a809dc409b263d0b5f/coverage-7.13.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:4de84e71173d4dada2897e5a0e1b7877e5eefbfe0d6a44edee6ce31d9b8ec09e", size = 245629, upload-time = "2025-12-28T15:40:22.397Z" },
362
- { url = "https://files.pythonhosted.org/packages/e2/f6/6815a220d5ec2466383d7cc36131b9fa6ecbe95c50ec52a631ba733f306a/coverage-7.13.1-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:a5a68357f686f8c4d527a2dc04f52e669c2fc1cbde38f6f7eb6a0e58cbd17cae", size = 245901, upload-time = "2025-12-28T15:40:23.836Z" },
363
- { url = "https://files.pythonhosted.org/packages/ac/58/40576554cd12e0872faf6d2c0eb3bc85f71d78427946ddd19ad65201e2c0/coverage-7.13.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:77cc258aeb29a3417062758975521eae60af6f79e930d6993555eeac6a8eac29", size = 246505, upload-time = "2025-12-28T15:40:25.421Z" },
364
- { url = "https://files.pythonhosted.org/packages/3b/77/9233a90253fba576b0eee81707b5781d0e21d97478e5377b226c5b096c0f/coverage-7.13.1-cp310-cp310-win32.whl", hash = "sha256:bb4f8c3c9a9f34423dba193f241f617b08ffc63e27f67159f60ae6baf2dcfe0f", size = 221257, upload-time = "2025-12-28T15:40:27.217Z" },
365
- { url = "https://files.pythonhosted.org/packages/e0/43/e842ff30c1a0a623ec80db89befb84a3a7aad7bfe44a6ea77d5a3e61fedd/coverage-7.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:c8e2706ceb622bc63bac98ebb10ef5da80ed70fbd8a7999a5076de3afaef0fb1", size = 222191, upload-time = "2025-12-28T15:40:28.916Z" },
366
297
  { url = "https://files.pythonhosted.org/packages/b4/9b/77baf488516e9ced25fc215a6f75d803493fc3f6a1a1227ac35697910c2a/coverage-7.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a55d509a1dc5a5b708b5dad3b5334e07a16ad4c2185e27b40e4dba796ab7f88", size = 218755, upload-time = "2025-12-28T15:40:30.812Z" },
367
298
  { url = "https://files.pythonhosted.org/packages/d7/cd/7ab01154e6eb79ee2fab76bf4d89e94c6648116557307ee4ebbb85e5c1bf/coverage-7.13.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4d010d080c4888371033baab27e47c9df7d6fb28d0b7b7adf85a4a49be9298b3", size = 219257, upload-time = "2025-12-28T15:40:32.333Z" },
368
299
  { url = "https://files.pythonhosted.org/packages/01/d5/b11ef7863ffbbdb509da0023fad1e9eda1c0eaea61a6d2ea5b17d4ac706e/coverage-7.13.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:d938b4a840fb1523b9dfbbb454f652967f18e197569c32266d4d13f37244c3d9", size = 249657, upload-time = "2025-12-28T15:40:34.1Z" },
@@ -455,7 +386,6 @@ version = "46.0.5"
455
386
  source = { registry = "https://pypi.org/simple" }
456
387
  dependencies = [
457
388
  { name = "cffi", marker = "platform_python_implementation != 'PyPy'" },
458
- { name = "typing-extensions", marker = "python_full_version < '3.11'" },
459
389
  ]
460
390
  sdist = { url = "https://files.pythonhosted.org/packages/60/04/ee2a9e8542e4fa2773b81771ff8349ff19cdd56b7258a0cc442639052edb/cryptography-46.0.5.tar.gz", hash = "sha256:abace499247268e3757271b2f1e244b36b06f8515cf27c4d49468fc9eb16e93d", size = 750064, upload-time = "2026-02-10T19:18:38.255Z" }
461
391
  wheels = [
@@ -522,18 +452,6 @@ wheels = [
522
452
  { url = "https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl", hash = "sha256:d0013f540772d1420576855455d050a2180186c91c15779301ac2ccb3eeb68de", size = 633196, upload-time = "2025-12-18T19:00:18.077Z" },
523
453
  ]
524
454
 
525
- [[package]]
526
- name = "exceptiongroup"
527
- version = "1.3.1"
528
- source = { registry = "https://pypi.org/simple" }
529
- dependencies = [
530
- { name = "typing-extensions", marker = "python_full_version < '3.13'" },
531
- ]
532
- 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" }
533
- wheels = [
534
- { 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" },
535
- ]
536
-
537
455
  [[package]]
538
456
  name = "filelock"
539
457
  version = "3.20.3"
@@ -612,7 +530,6 @@ dependencies = [
612
530
  { name = "packaging" },
613
531
  { name = "pathspec" },
614
532
  { name = "pluggy" },
615
- { name = "tomli", marker = "python_full_version < '3.11'" },
616
533
  { name = "trove-classifiers" },
617
534
  ]
618
535
  sdist = { url = "https://files.pythonhosted.org/packages/0b/8e/e480359492affde4119a131da729dd26da742c2c9b604dff74836e47eef9/hatchling-1.28.0.tar.gz", hash = "sha256:4d50b02aece6892b8cd0b3ce6c82cb218594d3ec5836dbde75bf41a21ab004c8", size = 55365, upload-time = "2025-11-27T00:31:13.766Z" }
@@ -982,12 +899,10 @@ version = "9.0.2"
982
899
  source = { registry = "https://pypi.org/simple" }
983
900
  dependencies = [
984
901
  { name = "colorama", marker = "sys_platform == 'win32'" },
985
- { name = "exceptiongroup", marker = "python_full_version < '3.11'" },
986
902
  { name = "iniconfig" },
987
903
  { name = "packaging" },
988
904
  { name = "pluggy" },
989
905
  { name = "pygments" },
990
- { name = "tomli", marker = "python_full_version < '3.11'" },
991
906
  ]
992
907
  sdist = { url = "https://files.pythonhosted.org/packages/d1/db/7ef3487e0fb0049ddb5ce41d3a49c235bf9ad299b6a25d5780a89f19230f/pytest-9.0.2.tar.gz", hash = "sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11", size = 1568901, upload-time = "2025-12-06T21:30:51.014Z" }
993
908
  wheels = [
@@ -999,7 +914,6 @@ name = "pytest-asyncio"
999
914
  version = "1.3.0"
1000
915
  source = { registry = "https://pypi.org/simple" }
1001
916
  dependencies = [
1002
- { name = "backports-asyncio-runner", marker = "python_full_version < '3.11'" },
1003
917
  { name = "pytest" },
1004
918
  { name = "typing-extensions", marker = "python_full_version < '3.13'" },
1005
919
  ]
@@ -1070,15 +984,6 @@ version = "6.0.3"
1070
984
  source = { registry = "https://pypi.org/simple" }
1071
985
  sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" }
1072
986
  wheels = [
1073
- { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" },
1074
- { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" },
1075
- { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" },
1076
- { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" },
1077
- { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" },
1078
- { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" },
1079
- { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" },
1080
- { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" },
1081
- { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" },
1082
987
  { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826, upload-time = "2025-09-25T21:31:58.655Z" },
1083
988
  { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577, upload-time = "2025-09-25T21:32:00.088Z" },
1084
989
  { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556, upload-time = "2025-09-25T21:32:01.31Z" },
@@ -1494,7 +1399,6 @@ dependencies = [
1494
1399
  { name = "distlib" },
1495
1400
  { name = "filelock" },
1496
1401
  { name = "platformdirs" },
1497
- { name = "typing-extensions", marker = "python_full_version < '3.11'" },
1498
1402
  ]
1499
1403
  sdist = { url = "https://files.pythonhosted.org/packages/aa/a3/4d310fa5f00863544e1d0f4de93bddec248499ccf97d4791bc3122c9d4f3/virtualenv-20.36.1.tar.gz", hash = "sha256:8befb5c81842c641f8ee658481e42641c68b5eab3521d8e092d18320902466ba", size = 6032239, upload-time = "2026-01-09T18:21:01.296Z" }
1500
1404
  wheels = [
@@ -1507,9 +1411,6 @@ version = "6.0.0"
1507
1411
  source = { registry = "https://pypi.org/simple" }
1508
1412
  sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220, upload-time = "2024-11-01T14:07:13.037Z" }
1509
1413
  wheels = [
1510
- { url = "https://files.pythonhosted.org/packages/0c/56/90994d789c61df619bfc5ce2ecdabd5eeff564e1eb47512bd01b5e019569/watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26", size = 96390, upload-time = "2024-11-01T14:06:24.793Z" },
1511
- { url = "https://files.pythonhosted.org/packages/55/46/9a67ee697342ddf3c6daa97e3a587a56d6c4052f881ed926a849fcf7371c/watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112", size = 88389, upload-time = "2024-11-01T14:06:27.112Z" },
1512
- { url = "https://files.pythonhosted.org/packages/44/65/91b0985747c52064d8701e1075eb96f8c40a79df889e59a399453adfb882/watchdog-6.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c897ac1b55c5a1461e16dae288d22bb2e412ba9807df8397a635d88f671d36c3", size = 89020, upload-time = "2024-11-01T14:06:29.876Z" },
1513
1414
  { url = "https://files.pythonhosted.org/packages/e0/24/d9be5cd6642a6aa68352ded4b4b10fb0d7889cb7f45814fb92cecd35f101/watchdog-6.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6eb11feb5a0d452ee41f824e271ca311a09e250441c262ca2fd7ebcf2461a06c", size = 96393, upload-time = "2024-11-01T14:06:31.756Z" },
1514
1415
  { url = "https://files.pythonhosted.org/packages/63/7a/6013b0d8dbc56adca7fdd4f0beed381c59f6752341b12fa0886fa7afc78b/watchdog-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2", size = 88392, upload-time = "2024-11-01T14:06:32.99Z" },
1515
1416
  { url = "https://files.pythonhosted.org/packages/d1/40/b75381494851556de56281e053700e46bff5b37bf4c7267e858640af5a7f/watchdog-6.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c", size = 89019, upload-time = "2024-11-01T14:06:34.963Z" },
@@ -1519,8 +1420,6 @@ wheels = [
1519
1420
  { url = "https://files.pythonhosted.org/packages/68/98/b0345cabdce2041a01293ba483333582891a3bd5769b08eceb0d406056ef/watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c", size = 96480, upload-time = "2024-11-01T14:06:42.952Z" },
1520
1421
  { url = "https://files.pythonhosted.org/packages/85/83/cdf13902c626b28eedef7ec4f10745c52aad8a8fe7eb04ed7b1f111ca20e/watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134", size = 88451, upload-time = "2024-11-01T14:06:45.084Z" },
1521
1422
  { url = "https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b", size = 89057, upload-time = "2024-11-01T14:06:47.324Z" },
1522
- { url = "https://files.pythonhosted.org/packages/30/ad/d17b5d42e28a8b91f8ed01cb949da092827afb9995d4559fd448d0472763/watchdog-6.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c7ac31a19f4545dd92fc25d200694098f42c9a8e391bc00bdd362c5736dbf881", size = 87902, upload-time = "2024-11-01T14:06:53.119Z" },
1523
- { url = "https://files.pythonhosted.org/packages/5c/ca/c3649991d140ff6ab67bfc85ab42b165ead119c9e12211e08089d763ece5/watchdog-6.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9513f27a1a582d9808cf21a07dae516f0fab1cf2d7683a742c498b93eedabb11", size = 88380, upload-time = "2024-11-01T14:06:55.19Z" },
1524
1423
  { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079, upload-time = "2024-11-01T14:06:59.472Z" },
1525
1424
  { url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078, upload-time = "2024-11-01T14:07:01.431Z" },
1526
1425
  { url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076, upload-time = "2024-11-01T14:07:02.568Z" },
@@ -1,44 +0,0 @@
1
- name: Mark Release as Stable
2
- on:
3
- workflow_dispatch:
4
- inputs:
5
- version:
6
- description: 'Version to mark as stable (e.g., 1.2.3)'
7
- required: true
8
-
9
- jobs:
10
- stable:
11
- runs-on: ubuntu-latest
12
- steps:
13
- - uses: actions/checkout@v4
14
-
15
- - name: Check if version exists in PyPI
16
- id: version_check
17
- run: |
18
- if ! curl -s -f https://pypi.org/pypi/socketsecurity/${{ inputs.version }}/json > /dev/null; then
19
- echo "Error: Version ${{ inputs.version }} not found on PyPI"
20
- exit 1
21
- fi
22
- echo "Version ${{ inputs.version }} found on PyPI - proceeding with release"
23
-
24
- - name: Set up QEMU
25
- uses: docker/setup-qemu-action@v3
26
-
27
- - name: Set up Docker Buildx
28
- uses: docker/setup-buildx-action@v3
29
-
30
- - name: Login to Docker Hub with Organization Token
31
- uses: docker/login-action@v3
32
- with:
33
- username: ${{ secrets.DOCKERHUB_USERNAME }}
34
- password: ${{ secrets.DOCKERHUB_TOKEN }}
35
-
36
- - name: Build & Push Stable Docker
37
- uses: docker/build-push-action@v5
38
- with:
39
- push: true
40
- platforms: linux/amd64,linux/arm64
41
- tags: socketdev/cli:stable
42
- build-args: |
43
- CLI_VERSION=${{ inputs.version }}
44
-
File without changes