pysentry-rs 0.3.5__tar.gz → 0.3.6__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.
Potentially problematic release.
This version of pysentry-rs might be problematic. Click here for more details.
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/.github/dependabot.yml +0 -6
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/.github/workflows/ci.yml +2 -0
- pysentry_rs-0.3.6/.pre-commit-hooks.yaml +10 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/Cargo.lock +1 -1
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/Cargo.toml +1 -1
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/PKG-INFO +6 -3
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/README.md +5 -2
- pysentry_rs-0.3.6/benchmarks/results/0.3.5.md +141 -0
- pysentry_rs-0.3.6/benchmarks/results/latest.md +141 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/cli.rs +80 -71
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/dependency/scanner.rs +92 -39
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/lib.rs +5 -2
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/parsers/lock.rs +245 -6
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/parsers/mod.rs +59 -12
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/parsers/pipfile.rs +9 -7
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/parsers/pipfile_lock.rs +4 -4
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/parsers/poetry_lock.rs +4 -4
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/parsers/pyproject.rs +13 -10
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/parsers/requirements.rs +3 -3
- pysentry_rs-0.3.5/.pre-commit-hooks.yaml +0 -10
- pysentry_rs-0.3.5/benchmarks/results/latest.md +0 -141
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/.github/FUNDING.yml +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/.github/workflows/benchmark.yml +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/.github/workflows/release.yml +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/.gitignore +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/.pre-commit-config.yaml +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/LICENSE +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/benchmarks/.gitignore +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/benchmarks/.python-version +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/benchmarks/README.md +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/benchmarks/main.py +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/benchmarks/pyproject.toml +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/benchmarks/results/0.2.3.md +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/benchmarks/results/0.3.1.md +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/benchmarks/results/0.3.2.md +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/benchmarks/results/0.3.3.md +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/benchmarks/results/0.3.4.md +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/benchmarks/src/benchmark_runner.py +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/benchmarks/src/performance_monitor.py +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/benchmarks/src/report_generator.py +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/benchmarks/src/tool_wrapper.py +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/benchmarks/test_data/large_requirements.txt +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/benchmarks/test_data/small_requirements.txt +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/benchmarks/test_data/uv.lock +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/benchmarks/uv.lock +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/fixtures/pipfile-tests/Pipfile +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/fixtures/pipfile-tests/Pipfile.lock +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/fixtures/pipfile-vulnerable-tests/Pipfile +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/fixtures/requirements-tests/requirements-dev.txt +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/fixtures/requirements-tests/requirements.txt +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/fixtures/requirements-tests-vulnerable/requirements.txt +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/pyproject.toml +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/python/pysentry/__init__.py +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/cache/audit.rs +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/cache/mod.rs +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/cache/storage.rs +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/config.rs +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/dependency/mod.rs +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/dependency/resolvers/mod.rs +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/dependency/resolvers/pip_tools.rs +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/dependency/resolvers/uv.rs +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/error.rs +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/main.rs +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/output/mod.rs +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/output/report.rs +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/output/sarif.rs +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/providers/mod.rs +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/providers/osv.rs +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/providers/pypa.rs +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/providers/pypi.rs +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/python.rs +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/types.rs +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/vulnerability/database.rs +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/vulnerability/matcher.rs +0 -0
- {pysentry_rs-0.3.5 → pysentry_rs-0.3.6}/src/vulnerability/mod.rs +0 -0
|
@@ -11,16 +11,10 @@ updates:
|
|
|
11
11
|
patterns:
|
|
12
12
|
- "*"
|
|
13
13
|
|
|
14
|
-
# Python dependencies (pyproject.toml only)
|
|
15
14
|
- package-ecosystem: "pip"
|
|
16
15
|
directory: "/"
|
|
17
16
|
schedule:
|
|
18
17
|
interval: "weekly"
|
|
19
|
-
open-pull-requests-limit: 10
|
|
20
|
-
allow:
|
|
21
|
-
- dependency-type: "all"
|
|
22
|
-
ignore:
|
|
23
|
-
- dependency-name: "*"
|
|
24
18
|
groups:
|
|
25
19
|
python-dependencies:
|
|
26
20
|
patterns:
|
|
@@ -10,6 +10,7 @@ on:
|
|
|
10
10
|
- ".editorconfig"
|
|
11
11
|
- ".github/dependabot.yml"
|
|
12
12
|
- ".github/FUNDING.yml"
|
|
13
|
+
- ".pre-commit-hooks.yaml"
|
|
13
14
|
pull_request:
|
|
14
15
|
branches: [main]
|
|
15
16
|
paths-ignore:
|
|
@@ -19,6 +20,7 @@ on:
|
|
|
19
20
|
- ".editorconfig"
|
|
20
21
|
- ".github/dependabot.yml"
|
|
21
22
|
- ".github/FUNDING.yml"
|
|
23
|
+
- ".pre-commit-hooks.yaml"
|
|
22
24
|
|
|
23
25
|
env:
|
|
24
26
|
CARGO_TERM_COLOR: always
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
- id: pysentry
|
|
2
|
+
name: pysentry (DEPRECATED - moved to nyudenkov/pysentry-pre-commit)
|
|
3
|
+
description: "⚠️ DEPRECATED - See github.com/nyudenkov/pysentry-pre-commit"
|
|
4
|
+
entry: pysentry-rs
|
|
5
|
+
language: python
|
|
6
|
+
always_run: true
|
|
7
|
+
additional_dependencies:
|
|
8
|
+
["pysentry-rs==0.3.5", "uv==0.8.9", "pip-tools==7.5.0"]
|
|
9
|
+
minimum_pre_commit_version: "2.9.2"
|
|
10
|
+
types: [python]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pysentry-rs
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.6
|
|
4
4
|
Classifier: Development Status :: 4 - Beta
|
|
5
5
|
Classifier: Intended Audience :: Developers
|
|
6
6
|
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
|
@@ -27,6 +27,7 @@ Project-URL: Issues, https://github.com/nyudenkov/pysentry/issues
|
|
|
27
27
|
# 🐍 PySentry
|
|
28
28
|
|
|
29
29
|
[](https://google.github.io/osv.dev/)
|
|
30
|
+
[](https://pepy.tech/projects/pysentry-rs)
|
|
30
31
|
|
|
31
32
|
[Help to test and improve](https://github.com/nyudenkov/pysentry/issues/12) | [Latest PySentry - pip-audit benchmark](benchmarks/results/latest.md)
|
|
32
33
|
|
|
@@ -299,7 +300,8 @@ Add PySentry to your `.pre-commit-config.yaml`:
|
|
|
299
300
|
|
|
300
301
|
```yaml
|
|
301
302
|
repos:
|
|
302
|
-
- repo: https://github.com/
|
|
303
|
+
- repo: https://github.com/pysentry/pysentry-pre-commit
|
|
304
|
+
rev: v0.3.5
|
|
303
305
|
hooks:
|
|
304
306
|
- id: pysentry # default pysentry settings
|
|
305
307
|
```
|
|
@@ -308,7 +310,8 @@ repos:
|
|
|
308
310
|
|
|
309
311
|
```yaml
|
|
310
312
|
repos:
|
|
311
|
-
- repo: https://github.com/
|
|
313
|
+
- repo: https://github.com/pysentry/pysentry-pre-commit
|
|
314
|
+
rev: v0.3.5
|
|
312
315
|
hooks:
|
|
313
316
|
- id: pysentry
|
|
314
317
|
args: ["--sources", "pypa,osv", "--fail-on", "high"]
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# 🐍 PySentry
|
|
2
2
|
|
|
3
3
|
[](https://google.github.io/osv.dev/)
|
|
4
|
+
[](https://pepy.tech/projects/pysentry-rs)
|
|
4
5
|
|
|
5
6
|
[Help to test and improve](https://github.com/nyudenkov/pysentry/issues/12) | [Latest PySentry - pip-audit benchmark](benchmarks/results/latest.md)
|
|
6
7
|
|
|
@@ -273,7 +274,8 @@ Add PySentry to your `.pre-commit-config.yaml`:
|
|
|
273
274
|
|
|
274
275
|
```yaml
|
|
275
276
|
repos:
|
|
276
|
-
- repo: https://github.com/
|
|
277
|
+
- repo: https://github.com/pysentry/pysentry-pre-commit
|
|
278
|
+
rev: v0.3.5
|
|
277
279
|
hooks:
|
|
278
280
|
- id: pysentry # default pysentry settings
|
|
279
281
|
```
|
|
@@ -282,7 +284,8 @@ repos:
|
|
|
282
284
|
|
|
283
285
|
```yaml
|
|
284
286
|
repos:
|
|
285
|
-
- repo: https://github.com/
|
|
287
|
+
- repo: https://github.com/pysentry/pysentry-pre-commit
|
|
288
|
+
rev: v0.3.5
|
|
286
289
|
hooks:
|
|
287
290
|
- id: pysentry
|
|
288
291
|
args: ["--sources", "pypa,osv", "--fail-on", "high"]
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# PySentry - pip-audit Benchmark Report
|
|
2
|
+
|
|
3
|
+
**Generated:** 2025-08-18 17:01:27
|
|
4
|
+
**Duration:** 1m 57.61s
|
|
5
|
+
**Total Tests:** 20
|
|
6
|
+
|
|
7
|
+
## Executive Summary
|
|
8
|
+
|
|
9
|
+
**Overall Success Rate:** 100.0% (20/20 successful runs)
|
|
10
|
+
|
|
11
|
+
### Small_Requirements Dataset - Cold Cache
|
|
12
|
+
- **Fastest:** pysentry-pypi (0.326s) - 27.96x faster than slowest
|
|
13
|
+
- **Memory Efficient:** pysentry-osv (11.90 MB) - 7.77x less memory than highest
|
|
14
|
+
|
|
15
|
+
### Small_Requirements Dataset - Hot Cache
|
|
16
|
+
- **Fastest:** pysentry-pypi (0.227s) - 34.73x faster than slowest
|
|
17
|
+
- **Memory Efficient:** pysentry-pypi (9.57 MB) - 10.54x less memory than highest
|
|
18
|
+
|
|
19
|
+
### Large_Requirements Dataset - Cold Cache
|
|
20
|
+
- **Fastest:** pysentry-pypi (0.810s) - 25.84x faster than slowest
|
|
21
|
+
- **Memory Efficient:** pysentry-osv (11.85 MB) - 7.91x less memory than highest
|
|
22
|
+
|
|
23
|
+
### Large_Requirements Dataset - Hot Cache
|
|
24
|
+
- **Fastest:** pysentry-pypi (0.667s) - 23.10x faster than slowest
|
|
25
|
+
- **Memory Efficient:** pysentry-pypi (9.42 MB) - 10.74x less memory than highest
|
|
26
|
+
|
|
27
|
+
## Test Environment
|
|
28
|
+
|
|
29
|
+
- **Platform:** Linux-6.11.0-1018-azure-x86_64-with-glibc2.39
|
|
30
|
+
- **Python Version:** 3.11.13
|
|
31
|
+
- **CPU Cores:** 4
|
|
32
|
+
- **Total Memory:** 15.62 GB
|
|
33
|
+
- **Available Memory:** 14.63 GB
|
|
34
|
+
|
|
35
|
+
## Performance Comparison
|
|
36
|
+
|
|
37
|
+
### Small_Requirements Dataset - Cold Cache
|
|
38
|
+
|
|
39
|
+
#### Execution Time Comparison
|
|
40
|
+
|
|
41
|
+
| Tool Configuration | Execution Time | Relative Performance |
|
|
42
|
+
|---------------------|---------------------|---------------------|
|
|
43
|
+
| 🥇 pysentry-pypi | 0.326s | 1.00x |
|
|
44
|
+
| 🥈 pysentry-osv | 1.027s | 3.15x |
|
|
45
|
+
| pysentry-all-sources | 1.188s | 3.65x |
|
|
46
|
+
| pysentry-pypa | 1.232s | 3.78x |
|
|
47
|
+
| pip-audit-default | 9.108s | 27.96x |
|
|
48
|
+
|
|
49
|
+
#### Memory Usage Comparison
|
|
50
|
+
|
|
51
|
+
| Tool Configuration | Peak Memory | Relative Performance |
|
|
52
|
+
|---------------------|---------------------|---------------------|
|
|
53
|
+
| 🥇 pysentry-osv | 11.90 MB | 1.00x |
|
|
54
|
+
| 🥈 pysentry-pypi | 13.23 MB | 1.11x |
|
|
55
|
+
| pip-audit-default | 45.44 MB | 3.82x |
|
|
56
|
+
| pysentry-pypa | 75.45 MB | 6.34x |
|
|
57
|
+
| pysentry-all-sources | 92.43 MB | 7.77x |
|
|
58
|
+
|
|
59
|
+
### Small_Requirements Dataset - Hot Cache
|
|
60
|
+
|
|
61
|
+
#### Execution Time Comparison
|
|
62
|
+
|
|
63
|
+
| Tool Configuration | Execution Time | Relative Performance |
|
|
64
|
+
|---------------------|---------------------|---------------------|
|
|
65
|
+
| 🥇 pysentry-pypi | 0.227s | 1.00x |
|
|
66
|
+
| 🥈 pysentry-osv | 0.917s | 4.04x |
|
|
67
|
+
| pysentry-all-sources | 1.036s | 4.57x |
|
|
68
|
+
| pysentry-pypa | 1.107s | 4.88x |
|
|
69
|
+
| pip-audit-default | 7.881s | 34.73x |
|
|
70
|
+
|
|
71
|
+
#### Memory Usage Comparison
|
|
72
|
+
|
|
73
|
+
| Tool Configuration | Peak Memory | Relative Performance |
|
|
74
|
+
|---------------------|---------------------|---------------------|
|
|
75
|
+
| 🥇 pysentry-pypi | 9.57 MB | 1.00x |
|
|
76
|
+
| 🥈 pysentry-osv | 10.85 MB | 1.13x |
|
|
77
|
+
| pip-audit-default | 44.36 MB | 4.63x |
|
|
78
|
+
| pysentry-pypa | 53.60 MB | 5.60x |
|
|
79
|
+
| pysentry-all-sources | 100.87 MB | 10.54x |
|
|
80
|
+
|
|
81
|
+
### Large_Requirements Dataset - Cold Cache
|
|
82
|
+
|
|
83
|
+
#### Execution Time Comparison
|
|
84
|
+
|
|
85
|
+
| Tool Configuration | Execution Time | Relative Performance |
|
|
86
|
+
|---------------------|---------------------|---------------------|
|
|
87
|
+
| 🥇 pysentry-pypi | 0.810s | 1.00x |
|
|
88
|
+
| 🥈 pysentry-pypa | 1.324s | 1.63x |
|
|
89
|
+
| pysentry-osv | 3.834s | 4.73x |
|
|
90
|
+
| pysentry-all-sources | 3.965s | 4.89x |
|
|
91
|
+
| pip-audit-default | 20.942s | 25.84x |
|
|
92
|
+
|
|
93
|
+
#### Memory Usage Comparison
|
|
94
|
+
|
|
95
|
+
| Tool Configuration | Peak Memory | Relative Performance |
|
|
96
|
+
|---------------------|---------------------|---------------------|
|
|
97
|
+
| 🥇 pysentry-osv | 11.85 MB | 1.00x |
|
|
98
|
+
| 🥈 pysentry-pypi | 13.98 MB | 1.18x |
|
|
99
|
+
| pip-audit-default | 47.18 MB | 3.98x |
|
|
100
|
+
| pysentry-pypa | 71.19 MB | 6.01x |
|
|
101
|
+
| pysentry-all-sources | 93.71 MB | 7.91x |
|
|
102
|
+
|
|
103
|
+
### Large_Requirements Dataset - Hot Cache
|
|
104
|
+
|
|
105
|
+
#### Execution Time Comparison
|
|
106
|
+
|
|
107
|
+
| Tool Configuration | Execution Time | Relative Performance |
|
|
108
|
+
|---------------------|---------------------|---------------------|
|
|
109
|
+
| 🥇 pysentry-pypi | 0.667s | 1.00x |
|
|
110
|
+
| 🥈 pysentry-pypa | 1.321s | 1.98x |
|
|
111
|
+
| pysentry-all-sources | 3.341s | 5.01x |
|
|
112
|
+
| pysentry-osv | 3.600s | 5.40x |
|
|
113
|
+
| pip-audit-default | 15.406s | 23.10x |
|
|
114
|
+
|
|
115
|
+
#### Memory Usage Comparison
|
|
116
|
+
|
|
117
|
+
| Tool Configuration | Peak Memory | Relative Performance |
|
|
118
|
+
|---------------------|---------------------|---------------------|
|
|
119
|
+
| 🥇 pysentry-pypi | 9.42 MB | 1.00x |
|
|
120
|
+
| 🥈 pysentry-osv | 10.72 MB | 1.14x |
|
|
121
|
+
| pip-audit-default | 47.33 MB | 5.02x |
|
|
122
|
+
| pysentry-pypa | 72.12 MB | 7.65x |
|
|
123
|
+
| pysentry-all-sources | 101.22 MB | 10.74x |
|
|
124
|
+
|
|
125
|
+
## Detailed Analysis
|
|
126
|
+
|
|
127
|
+
### Pysentry Performance
|
|
128
|
+
|
|
129
|
+
- **Execution Time:** Avg: 1.620s, Min: 0.227s, Max: 3.965s
|
|
130
|
+
|
|
131
|
+
- **Memory Usage:** Avg: 47.01 MB, Min: 9.42 MB, Max: 101.22 MB
|
|
132
|
+
|
|
133
|
+
- **Success Rate:** 100.0% (16/16)
|
|
134
|
+
|
|
135
|
+
### Pip-Audit Performance
|
|
136
|
+
|
|
137
|
+
- **Execution Time:** Avg: 13.334s, Min: 7.881s, Max: 20.942s
|
|
138
|
+
|
|
139
|
+
- **Memory Usage:** Avg: 46.08 MB, Min: 44.36 MB, Max: 47.33 MB
|
|
140
|
+
|
|
141
|
+
- **Success Rate:** 100.0% (4/4)
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# PySentry - pip-audit Benchmark Report
|
|
2
|
+
|
|
3
|
+
**Generated:** 2025-08-18 17:01:27
|
|
4
|
+
**Duration:** 1m 57.61s
|
|
5
|
+
**Total Tests:** 20
|
|
6
|
+
|
|
7
|
+
## Executive Summary
|
|
8
|
+
|
|
9
|
+
**Overall Success Rate:** 100.0% (20/20 successful runs)
|
|
10
|
+
|
|
11
|
+
### Small_Requirements Dataset - Cold Cache
|
|
12
|
+
- **Fastest:** pysentry-pypi (0.326s) - 27.96x faster than slowest
|
|
13
|
+
- **Memory Efficient:** pysentry-osv (11.90 MB) - 7.77x less memory than highest
|
|
14
|
+
|
|
15
|
+
### Small_Requirements Dataset - Hot Cache
|
|
16
|
+
- **Fastest:** pysentry-pypi (0.227s) - 34.73x faster than slowest
|
|
17
|
+
- **Memory Efficient:** pysentry-pypi (9.57 MB) - 10.54x less memory than highest
|
|
18
|
+
|
|
19
|
+
### Large_Requirements Dataset - Cold Cache
|
|
20
|
+
- **Fastest:** pysentry-pypi (0.810s) - 25.84x faster than slowest
|
|
21
|
+
- **Memory Efficient:** pysentry-osv (11.85 MB) - 7.91x less memory than highest
|
|
22
|
+
|
|
23
|
+
### Large_Requirements Dataset - Hot Cache
|
|
24
|
+
- **Fastest:** pysentry-pypi (0.667s) - 23.10x faster than slowest
|
|
25
|
+
- **Memory Efficient:** pysentry-pypi (9.42 MB) - 10.74x less memory than highest
|
|
26
|
+
|
|
27
|
+
## Test Environment
|
|
28
|
+
|
|
29
|
+
- **Platform:** Linux-6.11.0-1018-azure-x86_64-with-glibc2.39
|
|
30
|
+
- **Python Version:** 3.11.13
|
|
31
|
+
- **CPU Cores:** 4
|
|
32
|
+
- **Total Memory:** 15.62 GB
|
|
33
|
+
- **Available Memory:** 14.63 GB
|
|
34
|
+
|
|
35
|
+
## Performance Comparison
|
|
36
|
+
|
|
37
|
+
### Small_Requirements Dataset - Cold Cache
|
|
38
|
+
|
|
39
|
+
#### Execution Time Comparison
|
|
40
|
+
|
|
41
|
+
| Tool Configuration | Execution Time | Relative Performance |
|
|
42
|
+
|---------------------|---------------------|---------------------|
|
|
43
|
+
| 🥇 pysentry-pypi | 0.326s | 1.00x |
|
|
44
|
+
| 🥈 pysentry-osv | 1.027s | 3.15x |
|
|
45
|
+
| pysentry-all-sources | 1.188s | 3.65x |
|
|
46
|
+
| pysentry-pypa | 1.232s | 3.78x |
|
|
47
|
+
| pip-audit-default | 9.108s | 27.96x |
|
|
48
|
+
|
|
49
|
+
#### Memory Usage Comparison
|
|
50
|
+
|
|
51
|
+
| Tool Configuration | Peak Memory | Relative Performance |
|
|
52
|
+
|---------------------|---------------------|---------------------|
|
|
53
|
+
| 🥇 pysentry-osv | 11.90 MB | 1.00x |
|
|
54
|
+
| 🥈 pysentry-pypi | 13.23 MB | 1.11x |
|
|
55
|
+
| pip-audit-default | 45.44 MB | 3.82x |
|
|
56
|
+
| pysentry-pypa | 75.45 MB | 6.34x |
|
|
57
|
+
| pysentry-all-sources | 92.43 MB | 7.77x |
|
|
58
|
+
|
|
59
|
+
### Small_Requirements Dataset - Hot Cache
|
|
60
|
+
|
|
61
|
+
#### Execution Time Comparison
|
|
62
|
+
|
|
63
|
+
| Tool Configuration | Execution Time | Relative Performance |
|
|
64
|
+
|---------------------|---------------------|---------------------|
|
|
65
|
+
| 🥇 pysentry-pypi | 0.227s | 1.00x |
|
|
66
|
+
| 🥈 pysentry-osv | 0.917s | 4.04x |
|
|
67
|
+
| pysentry-all-sources | 1.036s | 4.57x |
|
|
68
|
+
| pysentry-pypa | 1.107s | 4.88x |
|
|
69
|
+
| pip-audit-default | 7.881s | 34.73x |
|
|
70
|
+
|
|
71
|
+
#### Memory Usage Comparison
|
|
72
|
+
|
|
73
|
+
| Tool Configuration | Peak Memory | Relative Performance |
|
|
74
|
+
|---------------------|---------------------|---------------------|
|
|
75
|
+
| 🥇 pysentry-pypi | 9.57 MB | 1.00x |
|
|
76
|
+
| 🥈 pysentry-osv | 10.85 MB | 1.13x |
|
|
77
|
+
| pip-audit-default | 44.36 MB | 4.63x |
|
|
78
|
+
| pysentry-pypa | 53.60 MB | 5.60x |
|
|
79
|
+
| pysentry-all-sources | 100.87 MB | 10.54x |
|
|
80
|
+
|
|
81
|
+
### Large_Requirements Dataset - Cold Cache
|
|
82
|
+
|
|
83
|
+
#### Execution Time Comparison
|
|
84
|
+
|
|
85
|
+
| Tool Configuration | Execution Time | Relative Performance |
|
|
86
|
+
|---------------------|---------------------|---------------------|
|
|
87
|
+
| 🥇 pysentry-pypi | 0.810s | 1.00x |
|
|
88
|
+
| 🥈 pysentry-pypa | 1.324s | 1.63x |
|
|
89
|
+
| pysentry-osv | 3.834s | 4.73x |
|
|
90
|
+
| pysentry-all-sources | 3.965s | 4.89x |
|
|
91
|
+
| pip-audit-default | 20.942s | 25.84x |
|
|
92
|
+
|
|
93
|
+
#### Memory Usage Comparison
|
|
94
|
+
|
|
95
|
+
| Tool Configuration | Peak Memory | Relative Performance |
|
|
96
|
+
|---------------------|---------------------|---------------------|
|
|
97
|
+
| 🥇 pysentry-osv | 11.85 MB | 1.00x |
|
|
98
|
+
| 🥈 pysentry-pypi | 13.98 MB | 1.18x |
|
|
99
|
+
| pip-audit-default | 47.18 MB | 3.98x |
|
|
100
|
+
| pysentry-pypa | 71.19 MB | 6.01x |
|
|
101
|
+
| pysentry-all-sources | 93.71 MB | 7.91x |
|
|
102
|
+
|
|
103
|
+
### Large_Requirements Dataset - Hot Cache
|
|
104
|
+
|
|
105
|
+
#### Execution Time Comparison
|
|
106
|
+
|
|
107
|
+
| Tool Configuration | Execution Time | Relative Performance |
|
|
108
|
+
|---------------------|---------------------|---------------------|
|
|
109
|
+
| 🥇 pysentry-pypi | 0.667s | 1.00x |
|
|
110
|
+
| 🥈 pysentry-pypa | 1.321s | 1.98x |
|
|
111
|
+
| pysentry-all-sources | 3.341s | 5.01x |
|
|
112
|
+
| pysentry-osv | 3.600s | 5.40x |
|
|
113
|
+
| pip-audit-default | 15.406s | 23.10x |
|
|
114
|
+
|
|
115
|
+
#### Memory Usage Comparison
|
|
116
|
+
|
|
117
|
+
| Tool Configuration | Peak Memory | Relative Performance |
|
|
118
|
+
|---------------------|---------------------|---------------------|
|
|
119
|
+
| 🥇 pysentry-pypi | 9.42 MB | 1.00x |
|
|
120
|
+
| 🥈 pysentry-osv | 10.72 MB | 1.14x |
|
|
121
|
+
| pip-audit-default | 47.33 MB | 5.02x |
|
|
122
|
+
| pysentry-pypa | 72.12 MB | 7.65x |
|
|
123
|
+
| pysentry-all-sources | 101.22 MB | 10.74x |
|
|
124
|
+
|
|
125
|
+
## Detailed Analysis
|
|
126
|
+
|
|
127
|
+
### Pysentry Performance
|
|
128
|
+
|
|
129
|
+
- **Execution Time:** Avg: 1.620s, Min: 0.227s, Max: 3.965s
|
|
130
|
+
|
|
131
|
+
- **Memory Usage:** Avg: 47.01 MB, Min: 9.42 MB, Max: 101.22 MB
|
|
132
|
+
|
|
133
|
+
- **Success Rate:** 100.0% (16/16)
|
|
134
|
+
|
|
135
|
+
### Pip-Audit Performance
|
|
136
|
+
|
|
137
|
+
- **Execution Time:** Avg: 13.334s, Min: 7.881s, Max: 20.942s
|
|
138
|
+
|
|
139
|
+
- **Memory Usage:** Avg: 46.08 MB, Min: 44.36 MB, Max: 47.33 MB
|
|
140
|
+
|
|
141
|
+
- **Success Rate:** 100.0% (4/4)
|
|
@@ -841,80 +841,89 @@ async fn perform_audit(audit_args: &AuditArgs, cache_dir: &Path) -> Result<Audit
|
|
|
841
841
|
eprintln!("Scanning project dependencies...");
|
|
842
842
|
}
|
|
843
843
|
|
|
844
|
-
let dependencies
|
|
845
|
-
if !audit_args.
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
let parse_optional = audit_args.include_optional();
|
|
869
|
-
|
|
870
|
-
use crate::parsers::{DependencyType, ParserRegistry};
|
|
871
|
-
let parser_registry = ParserRegistry::new(Some(resolver_type));
|
|
872
|
-
let (raw_parsed_deps, parser_name) = parser_registry
|
|
873
|
-
.parse_project(
|
|
874
|
-
&audit_args.path,
|
|
875
|
-
parse_dev,
|
|
876
|
-
parse_optional,
|
|
877
|
-
audit_args.direct_only,
|
|
844
|
+
let (dependencies, skipped_packages, detected_parser_name) =
|
|
845
|
+
if !audit_args.requirements_files.is_empty() {
|
|
846
|
+
if !audit_args.quiet {
|
|
847
|
+
eprintln!(
|
|
848
|
+
"Using explicit requirements files: {}",
|
|
849
|
+
audit_args
|
|
850
|
+
.requirements_files
|
|
851
|
+
.iter()
|
|
852
|
+
.map(|p| p.display().to_string())
|
|
853
|
+
.collect::<Vec<_>>()
|
|
854
|
+
.join(", ")
|
|
855
|
+
);
|
|
856
|
+
}
|
|
857
|
+
(
|
|
858
|
+
scan_explicit_requirements(
|
|
859
|
+
&audit_args.requirements_files,
|
|
860
|
+
audit_args.include_dev(),
|
|
861
|
+
audit_args.include_optional(),
|
|
862
|
+
audit_args.direct_only,
|
|
863
|
+
audit_args.resolver.clone(),
|
|
864
|
+
)
|
|
865
|
+
.await?,
|
|
866
|
+
Vec::new(), // No skipped packages for explicit requirements files
|
|
867
|
+
"requirements.txt".to_string(),
|
|
878
868
|
)
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
);
|
|
887
|
-
let (
|
|
888
|
-
|
|
889
|
-
.
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
869
|
+
} else {
|
|
870
|
+
let resolver_type: ResolverType = audit_args.resolver.clone().into();
|
|
871
|
+
|
|
872
|
+
let parse_dev = audit_args.include_dev();
|
|
873
|
+
let parse_optional = audit_args.include_optional();
|
|
874
|
+
|
|
875
|
+
use crate::parsers::{DependencyType, ParserRegistry};
|
|
876
|
+
let parser_registry = ParserRegistry::new(Some(resolver_type));
|
|
877
|
+
let (raw_parsed_deps, skipped_packages, parser_name) = parser_registry
|
|
878
|
+
.parse_project(
|
|
879
|
+
&audit_args.path,
|
|
880
|
+
parse_dev,
|
|
881
|
+
parse_optional,
|
|
882
|
+
audit_args.direct_only,
|
|
883
|
+
)
|
|
884
|
+
.await?;
|
|
885
|
+
|
|
886
|
+
if audit_args.verbose {
|
|
887
|
+
eprintln!(
|
|
888
|
+
"Raw parsed dependencies before filtering: {} (from {})",
|
|
889
|
+
raw_parsed_deps.len(),
|
|
890
|
+
parser_name
|
|
891
|
+
);
|
|
892
|
+
let (main_count, optional_count) =
|
|
893
|
+
raw_parsed_deps
|
|
894
|
+
.iter()
|
|
895
|
+
.fold((0, 0), |(m, o), dep| match dep.dependency_type {
|
|
896
|
+
DependencyType::Main => (m + 1, o),
|
|
897
|
+
DependencyType::Optional => (m, o + 1),
|
|
898
|
+
});
|
|
899
|
+
eprintln!(" Main: {main_count}, Optional: {optional_count}");
|
|
900
|
+
}
|
|
896
901
|
|
|
897
|
-
|
|
902
|
+
let filtered_parsed_deps = audit_args.filter_dependencies(raw_parsed_deps);
|
|
898
903
|
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
904
|
+
if audit_args.verbose {
|
|
905
|
+
eprintln!(
|
|
906
|
+
"Filtered dependencies after scope filtering: {}",
|
|
907
|
+
filtered_parsed_deps.len()
|
|
908
|
+
);
|
|
909
|
+
eprintln!(" Scope: {}", audit_args.scope_description());
|
|
910
|
+
}
|
|
906
911
|
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
912
|
+
(
|
|
913
|
+
filtered_parsed_deps
|
|
914
|
+
.into_iter()
|
|
915
|
+
.map(|dep| crate::dependency::scanner::ScannedDependency {
|
|
916
|
+
name: dep.name,
|
|
917
|
+
version: dep.version,
|
|
918
|
+
is_direct: dep.is_direct,
|
|
919
|
+
source: dep.source.into(),
|
|
920
|
+
path: dep.path,
|
|
921
|
+
})
|
|
922
|
+
.collect(),
|
|
923
|
+
skipped_packages,
|
|
924
|
+
parser_name.to_string(),
|
|
925
|
+
)
|
|
926
|
+
};
|
|
918
927
|
|
|
919
928
|
let dependency_stats = if !audit_args.requirements_files.is_empty() {
|
|
920
929
|
calculate_dependency_stats(&dependencies)
|
|
@@ -945,7 +954,7 @@ async fn perform_audit(audit_args: &AuditArgs, cache_dir: &Path) -> Result<Audit
|
|
|
945
954
|
audit_args.direct_only,
|
|
946
955
|
None,
|
|
947
956
|
);
|
|
948
|
-
scanner.validate_dependencies(&dependencies)
|
|
957
|
+
scanner.validate_dependencies(&dependencies, &skipped_packages, &detected_parser_name)
|
|
949
958
|
};
|
|
950
959
|
|
|
951
960
|
for warning in &warnings {
|