pysentry-rs 0.3.1__tar.gz → 0.3.3__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.3/.pre-commit-hooks.yaml +10 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/Cargo.lock +9 -9
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/Cargo.toml +3 -3
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/PKG-INFO +96 -20
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/README.md +95 -19
- pysentry_rs-0.3.3/benchmarks/results/0.3.1.md +141 -0
- pysentry_rs-0.3.3/benchmarks/results/0.3.2.md +141 -0
- pysentry_rs-0.3.3/benchmarks/results/latest.md +141 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/src/cli.rs +383 -7
- pysentry_rs-0.3.3/src/config.rs +584 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/src/lib.rs +5 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/src/main.rs +39 -5
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/src/parsers/pyproject.rs +367 -11
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/src/python.rs +20 -0
- pysentry_rs-0.3.1/benchmarks/results/latest.md +0 -141
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/.github/FUNDING.yml +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/.github/dependabot.yml +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/.github/workflows/benchmark.yml +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/.github/workflows/ci.yml +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/.github/workflows/release.yml +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/.gitignore +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/.pre-commit-config.yaml +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/LICENSE +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/benchmarks/.gitignore +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/benchmarks/.python-version +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/benchmarks/README.md +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/benchmarks/main.py +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/benchmarks/pyproject.toml +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/benchmarks/results/0.2.3.md +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/benchmarks/src/benchmark_runner.py +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/benchmarks/src/performance_monitor.py +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/benchmarks/src/report_generator.py +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/benchmarks/src/tool_wrapper.py +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/benchmarks/test_data/large_requirements.txt +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/benchmarks/test_data/small_requirements.txt +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/benchmarks/uv.lock +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/fixtures/requirements-tests/requirements-dev.txt +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/fixtures/requirements-tests/requirements.txt +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/fixtures/requirements-tests-vulnerable/requirements.txt +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/pyproject.toml +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/python/pysentry/__init__.py +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/src/cache/audit.rs +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/src/cache/mod.rs +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/src/cache/storage.rs +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/src/dependency/mod.rs +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/src/dependency/resolvers/mod.rs +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/src/dependency/resolvers/pip_tools.rs +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/src/dependency/resolvers/uv.rs +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/src/dependency/scanner.rs +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/src/error.rs +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/src/output/mod.rs +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/src/output/report.rs +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/src/output/sarif.rs +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/src/parsers/lock.rs +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/src/parsers/mod.rs +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/src/parsers/poetry_lock.rs +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/src/parsers/requirements.rs +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/src/providers/mod.rs +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/src/providers/osv.rs +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/src/providers/pypa.rs +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/src/providers/pypi.rs +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/src/types.rs +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/src/vulnerability/database.rs +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/src/vulnerability/matcher.rs +0 -0
- {pysentry_rs-0.3.1 → pysentry_rs-0.3.3}/src/vulnerability/mod.rs +0 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
- id: pysentry
|
|
2
|
+
name: pysentry
|
|
3
|
+
description: "Fast security vulnerability scanner for Python dependencies"
|
|
4
|
+
entry: pysentry
|
|
5
|
+
language: python
|
|
6
|
+
always_run: true
|
|
7
|
+
additional_dependencies:
|
|
8
|
+
["pysentry-rs==0.3.3", "uv==0.8.9", "pip-tools==7.5.0"]
|
|
9
|
+
minimum_pre_commit_version: "2.9.2"
|
|
10
|
+
types: [python]
|
|
@@ -93,9 +93,9 @@ dependencies = [
|
|
|
93
93
|
|
|
94
94
|
[[package]]
|
|
95
95
|
name = "anyhow"
|
|
96
|
-
version = "1.0.
|
|
96
|
+
version = "1.0.99"
|
|
97
97
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
98
|
-
checksum = "
|
|
98
|
+
checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100"
|
|
99
99
|
|
|
100
100
|
[[package]]
|
|
101
101
|
name = "arbitrary"
|
|
@@ -209,9 +209,9 @@ dependencies = [
|
|
|
209
209
|
|
|
210
210
|
[[package]]
|
|
211
211
|
name = "clap"
|
|
212
|
-
version = "4.5.
|
|
212
|
+
version = "4.5.45"
|
|
213
213
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
214
|
-
checksum = "
|
|
214
|
+
checksum = "1fc0e74a703892159f5ae7d3aac52c8e6c392f5ae5f359c70b5881d60aaac318"
|
|
215
215
|
dependencies = [
|
|
216
216
|
"clap_builder",
|
|
217
217
|
"clap_derive",
|
|
@@ -219,9 +219,9 @@ dependencies = [
|
|
|
219
219
|
|
|
220
220
|
[[package]]
|
|
221
221
|
name = "clap_builder"
|
|
222
|
-
version = "4.5.
|
|
222
|
+
version = "4.5.44"
|
|
223
223
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
224
|
-
checksum = "
|
|
224
|
+
checksum = "b3e7f4214277f3c7aa526a59dd3fbe306a370daee1f8b7b8c987069cd8e888a8"
|
|
225
225
|
dependencies = [
|
|
226
226
|
"anstream",
|
|
227
227
|
"anstyle",
|
|
@@ -231,9 +231,9 @@ dependencies = [
|
|
|
231
231
|
|
|
232
232
|
[[package]]
|
|
233
233
|
name = "clap_derive"
|
|
234
|
-
version = "4.5.
|
|
234
|
+
version = "4.5.45"
|
|
235
235
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
236
|
-
checksum = "
|
|
236
|
+
checksum = "14cb31bb0a7d536caef2639baa7fad459e15c3144efefa6dbd1c84562c4739f6"
|
|
237
237
|
dependencies = [
|
|
238
238
|
"heck",
|
|
239
239
|
"proc-macro2",
|
|
@@ -1121,7 +1121,7 @@ dependencies = [
|
|
|
1121
1121
|
|
|
1122
1122
|
[[package]]
|
|
1123
1123
|
name = "pysentry"
|
|
1124
|
-
version = "0.3.
|
|
1124
|
+
version = "0.3.3"
|
|
1125
1125
|
dependencies = [
|
|
1126
1126
|
"anyhow",
|
|
1127
1127
|
"async-trait",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "pysentry"
|
|
3
|
-
version = "0.3.
|
|
3
|
+
version = "0.3.3"
|
|
4
4
|
edition = "2021"
|
|
5
5
|
rust-version = "1.79"
|
|
6
6
|
description = "Security vulnerability auditing for Python packages"
|
|
@@ -22,10 +22,10 @@ path = "src/main.rs"
|
|
|
22
22
|
python = ["pyo3"]
|
|
23
23
|
|
|
24
24
|
[dependencies]
|
|
25
|
-
anyhow = "1.0.
|
|
25
|
+
anyhow = "1.0.99"
|
|
26
26
|
async-trait = "0.1.88"
|
|
27
27
|
chrono = { version = "0.4.41", features = ["serde"] }
|
|
28
|
-
clap = { version = "4.5.
|
|
28
|
+
clap = { version = "4.5.45", features = ["derive"] }
|
|
29
29
|
dirs = "6.0.0"
|
|
30
30
|
fs-err = "3.1.1"
|
|
31
31
|
futures = "0.3.31"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pysentry-rs
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.3
|
|
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)
|
|
@@ -287,29 +287,105 @@ pysentry --clear-resolution-cache --sources pypa,osv --format sarif
|
|
|
287
287
|
pysentry --no-resolution-cache --format json --output security-report.json
|
|
288
288
|
```
|
|
289
289
|
|
|
290
|
+
## Pre-commit Integration
|
|
291
|
+
|
|
292
|
+
PySentry integrates seamlessly with [pre-commit](https://pre-commit.com/) to automatically scan for vulnerabilities before commits.
|
|
293
|
+
|
|
294
|
+
### Setup
|
|
295
|
+
|
|
296
|
+
Add PySentry to your `.pre-commit-config.yaml`:
|
|
297
|
+
|
|
298
|
+
```yaml
|
|
299
|
+
repos:
|
|
300
|
+
- repo: https://github.com/nyudenkov/pysentry
|
|
301
|
+
hooks:
|
|
302
|
+
- id: pysentry # default pysentry settings
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
### Advanced Configuration
|
|
306
|
+
|
|
307
|
+
```yaml
|
|
308
|
+
repos:
|
|
309
|
+
- repo: https://github.com/nyudenkov/pysentry
|
|
310
|
+
hooks:
|
|
311
|
+
- id: pysentry
|
|
312
|
+
args: ["--sources", "pypa,osv", "--fail-on", "high"]
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
### Installation Requirements
|
|
316
|
+
|
|
317
|
+
Pre-commit will automatically install PySentry, uv and pip-tools via PyPI.
|
|
318
|
+
|
|
290
319
|
## Configuration
|
|
291
320
|
|
|
321
|
+
PySentry supports TOML-based configuration files for persistent settings management. Configuration files follow a hierarchical discovery pattern:
|
|
322
|
+
|
|
323
|
+
1. **Project-level**: `.pysentry.toml` in current or parent directories
|
|
324
|
+
2. **User-level**: `~/.config/pysentry/config.toml` (Linux/macOS)
|
|
325
|
+
3. **System-level**: `/etc/pysentry/config.toml` (Unix systems)
|
|
326
|
+
|
|
327
|
+
### Configuration File Example
|
|
328
|
+
|
|
329
|
+
```toml
|
|
330
|
+
version = 1
|
|
331
|
+
|
|
332
|
+
[defaults]
|
|
333
|
+
format = "json"
|
|
334
|
+
severity = "medium"
|
|
335
|
+
fail_on = "high"
|
|
336
|
+
scope = "all"
|
|
337
|
+
direct_only = false
|
|
338
|
+
|
|
339
|
+
[sources]
|
|
340
|
+
enabled = ["pypa", "osv"]
|
|
341
|
+
|
|
342
|
+
[resolver]
|
|
343
|
+
type = "uv"
|
|
344
|
+
fallback = "pip-tools"
|
|
345
|
+
|
|
346
|
+
[cache]
|
|
347
|
+
enabled = true
|
|
348
|
+
resolution_ttl = 48
|
|
349
|
+
vulnerability_ttl = 72
|
|
350
|
+
|
|
351
|
+
[output]
|
|
352
|
+
quiet = false
|
|
353
|
+
verbose = false
|
|
354
|
+
color = "auto"
|
|
355
|
+
|
|
356
|
+
[ignore]
|
|
357
|
+
ids = ["CVE-2023-12345", "GHSA-xxxx-yyyy-zzzz"]
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
### Environment Variables
|
|
361
|
+
|
|
362
|
+
| Variable | Description | Example |
|
|
363
|
+
| -------------------- | ------------------------------- | -------------------------------------- |
|
|
364
|
+
| `PYSENTRY_CONFIG` | Override config file path | `PYSENTRY_CONFIG=/path/to/config.toml` |
|
|
365
|
+
| `PYSENTRY_NO_CONFIG` | Disable all config file loading | `PYSENTRY_NO_CONFIG=1` |
|
|
366
|
+
|
|
292
367
|
### Command Line Options
|
|
293
368
|
|
|
294
|
-
| Option | Description
|
|
295
|
-
| -------------------------- |
|
|
296
|
-
| `--format` | Output format: `human`, `json`, `sarif`, `markdown`
|
|
297
|
-
| `--severity` | Minimum severity: `low`, `medium`, `high`, `critical`
|
|
298
|
-
| `--fail-on` | Fail (exit non-zero) on vulnerabilities ≥ severity
|
|
299
|
-
| `--sources` | Vulnerability sources: `pypa`, `pypi`, `osv` (multiple)
|
|
300
|
-
| `--all-extras` | Include all dependencies (main + dev + optional)
|
|
301
|
-
| `--direct-only` | Check only direct dependencies
|
|
302
|
-
| `--
|
|
303
|
-
| `--
|
|
304
|
-
| `--
|
|
305
|
-
| `--cache
|
|
306
|
-
| `--
|
|
307
|
-
| `--
|
|
308
|
-
| `--
|
|
309
|
-
| `--
|
|
310
|
-
| `--
|
|
311
|
-
| `--
|
|
312
|
-
| `--
|
|
369
|
+
| Option | Description | Default |
|
|
370
|
+
| -------------------------- | --------------------------------------------------------- | ----------------- |
|
|
371
|
+
| `--format` | Output format: `human`, `json`, `sarif`, `markdown` | `human` |
|
|
372
|
+
| `--severity` | Minimum severity: `low`, `medium`, `high`, `critical` | `low` |
|
|
373
|
+
| `--fail-on` | Fail (exit non-zero) on vulnerabilities ≥ severity | `medium` |
|
|
374
|
+
| `--sources` | Vulnerability sources: `pypa`, `pypi`, `osv` (multiple) | `pypa` |
|
|
375
|
+
| `--all-extras` | Include all dependencies (main + dev + optional) | `false` |
|
|
376
|
+
| `--direct-only` | Check only direct dependencies | `false` |
|
|
377
|
+
| `--detailed` | Show full vulnerability descriptions instead of truncated | `false` |
|
|
378
|
+
| `--ignore` | Vulnerability IDs to ignore (repeatable) | `[]` |
|
|
379
|
+
| `--output` | Output file path | `stdout` |
|
|
380
|
+
| `--no-cache` | Disable all caching | `false` |
|
|
381
|
+
| `--cache-dir` | Custom cache directory | Platform-specific |
|
|
382
|
+
| `--resolution-cache-ttl` | Resolution cache TTL in hours | `24` |
|
|
383
|
+
| `--no-resolution-cache` | Disable resolution caching only | `false` |
|
|
384
|
+
| `--clear-resolution-cache` | Clear resolution cache on startup | `false` |
|
|
385
|
+
| `--verbose` | Enable verbose output | `false` |
|
|
386
|
+
| `--quiet` | Suppress non-error output | `false` |
|
|
387
|
+
| `--resolver` | Dependency resolver: `auto`, `uv`, `pip-tools` | `auto` |
|
|
388
|
+
| `--requirements` | Additional requirements files (repeatable) | `[]` |
|
|
313
389
|
|
|
314
390
|
### Cache Management
|
|
315
391
|
|
|
@@ -261,29 +261,105 @@ pysentry --clear-resolution-cache --sources pypa,osv --format sarif
|
|
|
261
261
|
pysentry --no-resolution-cache --format json --output security-report.json
|
|
262
262
|
```
|
|
263
263
|
|
|
264
|
+
## Pre-commit Integration
|
|
265
|
+
|
|
266
|
+
PySentry integrates seamlessly with [pre-commit](https://pre-commit.com/) to automatically scan for vulnerabilities before commits.
|
|
267
|
+
|
|
268
|
+
### Setup
|
|
269
|
+
|
|
270
|
+
Add PySentry to your `.pre-commit-config.yaml`:
|
|
271
|
+
|
|
272
|
+
```yaml
|
|
273
|
+
repos:
|
|
274
|
+
- repo: https://github.com/nyudenkov/pysentry
|
|
275
|
+
hooks:
|
|
276
|
+
- id: pysentry # default pysentry settings
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
### Advanced Configuration
|
|
280
|
+
|
|
281
|
+
```yaml
|
|
282
|
+
repos:
|
|
283
|
+
- repo: https://github.com/nyudenkov/pysentry
|
|
284
|
+
hooks:
|
|
285
|
+
- id: pysentry
|
|
286
|
+
args: ["--sources", "pypa,osv", "--fail-on", "high"]
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
### Installation Requirements
|
|
290
|
+
|
|
291
|
+
Pre-commit will automatically install PySentry, uv and pip-tools via PyPI.
|
|
292
|
+
|
|
264
293
|
## Configuration
|
|
265
294
|
|
|
295
|
+
PySentry supports TOML-based configuration files for persistent settings management. Configuration files follow a hierarchical discovery pattern:
|
|
296
|
+
|
|
297
|
+
1. **Project-level**: `.pysentry.toml` in current or parent directories
|
|
298
|
+
2. **User-level**: `~/.config/pysentry/config.toml` (Linux/macOS)
|
|
299
|
+
3. **System-level**: `/etc/pysentry/config.toml` (Unix systems)
|
|
300
|
+
|
|
301
|
+
### Configuration File Example
|
|
302
|
+
|
|
303
|
+
```toml
|
|
304
|
+
version = 1
|
|
305
|
+
|
|
306
|
+
[defaults]
|
|
307
|
+
format = "json"
|
|
308
|
+
severity = "medium"
|
|
309
|
+
fail_on = "high"
|
|
310
|
+
scope = "all"
|
|
311
|
+
direct_only = false
|
|
312
|
+
|
|
313
|
+
[sources]
|
|
314
|
+
enabled = ["pypa", "osv"]
|
|
315
|
+
|
|
316
|
+
[resolver]
|
|
317
|
+
type = "uv"
|
|
318
|
+
fallback = "pip-tools"
|
|
319
|
+
|
|
320
|
+
[cache]
|
|
321
|
+
enabled = true
|
|
322
|
+
resolution_ttl = 48
|
|
323
|
+
vulnerability_ttl = 72
|
|
324
|
+
|
|
325
|
+
[output]
|
|
326
|
+
quiet = false
|
|
327
|
+
verbose = false
|
|
328
|
+
color = "auto"
|
|
329
|
+
|
|
330
|
+
[ignore]
|
|
331
|
+
ids = ["CVE-2023-12345", "GHSA-xxxx-yyyy-zzzz"]
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
### Environment Variables
|
|
335
|
+
|
|
336
|
+
| Variable | Description | Example |
|
|
337
|
+
| -------------------- | ------------------------------- | -------------------------------------- |
|
|
338
|
+
| `PYSENTRY_CONFIG` | Override config file path | `PYSENTRY_CONFIG=/path/to/config.toml` |
|
|
339
|
+
| `PYSENTRY_NO_CONFIG` | Disable all config file loading | `PYSENTRY_NO_CONFIG=1` |
|
|
340
|
+
|
|
266
341
|
### Command Line Options
|
|
267
342
|
|
|
268
|
-
| Option | Description
|
|
269
|
-
| -------------------------- |
|
|
270
|
-
| `--format` | Output format: `human`, `json`, `sarif`, `markdown`
|
|
271
|
-
| `--severity` | Minimum severity: `low`, `medium`, `high`, `critical`
|
|
272
|
-
| `--fail-on` | Fail (exit non-zero) on vulnerabilities ≥ severity
|
|
273
|
-
| `--sources` | Vulnerability sources: `pypa`, `pypi`, `osv` (multiple)
|
|
274
|
-
| `--all-extras` | Include all dependencies (main + dev + optional)
|
|
275
|
-
| `--direct-only` | Check only direct dependencies
|
|
276
|
-
| `--
|
|
277
|
-
| `--
|
|
278
|
-
| `--
|
|
279
|
-
| `--cache
|
|
280
|
-
| `--
|
|
281
|
-
| `--
|
|
282
|
-
| `--
|
|
283
|
-
| `--
|
|
284
|
-
| `--
|
|
285
|
-
| `--
|
|
286
|
-
| `--
|
|
343
|
+
| Option | Description | Default |
|
|
344
|
+
| -------------------------- | --------------------------------------------------------- | ----------------- |
|
|
345
|
+
| `--format` | Output format: `human`, `json`, `sarif`, `markdown` | `human` |
|
|
346
|
+
| `--severity` | Minimum severity: `low`, `medium`, `high`, `critical` | `low` |
|
|
347
|
+
| `--fail-on` | Fail (exit non-zero) on vulnerabilities ≥ severity | `medium` |
|
|
348
|
+
| `--sources` | Vulnerability sources: `pypa`, `pypi`, `osv` (multiple) | `pypa` |
|
|
349
|
+
| `--all-extras` | Include all dependencies (main + dev + optional) | `false` |
|
|
350
|
+
| `--direct-only` | Check only direct dependencies | `false` |
|
|
351
|
+
| `--detailed` | Show full vulnerability descriptions instead of truncated | `false` |
|
|
352
|
+
| `--ignore` | Vulnerability IDs to ignore (repeatable) | `[]` |
|
|
353
|
+
| `--output` | Output file path | `stdout` |
|
|
354
|
+
| `--no-cache` | Disable all caching | `false` |
|
|
355
|
+
| `--cache-dir` | Custom cache directory | Platform-specific |
|
|
356
|
+
| `--resolution-cache-ttl` | Resolution cache TTL in hours | `24` |
|
|
357
|
+
| `--no-resolution-cache` | Disable resolution caching only | `false` |
|
|
358
|
+
| `--clear-resolution-cache` | Clear resolution cache on startup | `false` |
|
|
359
|
+
| `--verbose` | Enable verbose output | `false` |
|
|
360
|
+
| `--quiet` | Suppress non-error output | `false` |
|
|
361
|
+
| `--resolver` | Dependency resolver: `auto`, `uv`, `pip-tools` | `auto` |
|
|
362
|
+
| `--requirements` | Additional requirements files (repeatable) | `[]` |
|
|
287
363
|
|
|
288
364
|
### Cache Management
|
|
289
365
|
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# PySentry - pip-audit Benchmark Report
|
|
2
|
+
|
|
3
|
+
**Generated:** 2025-08-12 18:55:26
|
|
4
|
+
**Duration:** 1m 54.40s
|
|
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.213s) - 42.00x faster than slowest
|
|
13
|
+
- **Memory Efficient:** pysentry-osv (10.02 MB) - 10.69x less memory than highest
|
|
14
|
+
|
|
15
|
+
### Small_Requirements Dataset - Hot Cache
|
|
16
|
+
- **Fastest:** pysentry-pypi (0.223s) - 35.50x faster than slowest
|
|
17
|
+
- **Memory Efficient:** pysentry-osv (10.18 MB) - 9.89x less memory than highest
|
|
18
|
+
|
|
19
|
+
### Large_Requirements Dataset - Cold Cache
|
|
20
|
+
- **Fastest:** pysentry-pypi (0.679s) - 28.20x faster than slowest
|
|
21
|
+
- **Memory Efficient:** pysentry-osv (10.27 MB) - 10.21x less memory than highest
|
|
22
|
+
|
|
23
|
+
### Large_Requirements Dataset - Hot Cache
|
|
24
|
+
- **Fastest:** pysentry-pypi (0.692s) - 23.06x faster than slowest
|
|
25
|
+
- **Memory Efficient:** pysentry-pypi (9.86 MB) - 9.55x 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.60 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.213s | 1.00x |
|
|
44
|
+
| 🥈 pysentry-pypa | 1.004s | 4.71x |
|
|
45
|
+
| pysentry-osv | 1.006s | 4.72x |
|
|
46
|
+
| pysentry-all-sources | 1.013s | 4.75x |
|
|
47
|
+
| pip-audit-default | 8.951s | 42.00x |
|
|
48
|
+
|
|
49
|
+
#### Memory Usage Comparison
|
|
50
|
+
|
|
51
|
+
| Tool Configuration | Peak Memory | Relative Performance |
|
|
52
|
+
|---------------------|---------------------|---------------------|
|
|
53
|
+
| 🥇 pysentry-osv | 10.02 MB | 1.00x |
|
|
54
|
+
| 🥈 pysentry-pypi | 11.68 MB | 1.17x |
|
|
55
|
+
| pip-audit-default | 45.42 MB | 4.53x |
|
|
56
|
+
| pysentry-pypa | 52.72 MB | 5.26x |
|
|
57
|
+
| pysentry-all-sources | 107.07 MB | 10.69x |
|
|
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.223s | 1.00x |
|
|
66
|
+
| 🥈 pysentry-pypa | 0.723s | 3.24x |
|
|
67
|
+
| pysentry-osv | 0.969s | 4.34x |
|
|
68
|
+
| pysentry-all-sources | 1.037s | 4.65x |
|
|
69
|
+
| pip-audit-default | 7.922s | 35.50x |
|
|
70
|
+
|
|
71
|
+
#### Memory Usage Comparison
|
|
72
|
+
|
|
73
|
+
| Tool Configuration | Peak Memory | Relative Performance |
|
|
74
|
+
|---------------------|---------------------|---------------------|
|
|
75
|
+
| 🥇 pysentry-osv | 10.18 MB | 1.00x |
|
|
76
|
+
| 🥈 pysentry-pypi | 10.59 MB | 1.04x |
|
|
77
|
+
| pip-audit-default | 44.28 MB | 4.35x |
|
|
78
|
+
| pysentry-pypa | 73.74 MB | 7.24x |
|
|
79
|
+
| pysentry-all-sources | 100.68 MB | 9.89x |
|
|
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.679s | 1.00x |
|
|
88
|
+
| 🥈 pysentry-pypa | 1.142s | 1.68x |
|
|
89
|
+
| pysentry-osv | 3.365s | 4.95x |
|
|
90
|
+
| pysentry-all-sources | 3.649s | 5.37x |
|
|
91
|
+
| pip-audit-default | 19.161s | 28.20x |
|
|
92
|
+
|
|
93
|
+
#### Memory Usage Comparison
|
|
94
|
+
|
|
95
|
+
| Tool Configuration | Peak Memory | Relative Performance |
|
|
96
|
+
|---------------------|---------------------|---------------------|
|
|
97
|
+
| 🥇 pysentry-osv | 10.27 MB | 1.00x |
|
|
98
|
+
| 🥈 pysentry-pypi | 10.36 MB | 1.01x |
|
|
99
|
+
| pip-audit-default | 47.43 MB | 4.62x |
|
|
100
|
+
| pysentry-pypa | 70.21 MB | 6.84x |
|
|
101
|
+
| pysentry-all-sources | 104.85 MB | 10.21x |
|
|
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.692s | 1.00x |
|
|
110
|
+
| 🥈 pysentry-pypa | 1.119s | 1.62x |
|
|
111
|
+
| pysentry-osv | 2.963s | 4.28x |
|
|
112
|
+
| pysentry-all-sources | 4.382s | 6.33x |
|
|
113
|
+
| pip-audit-default | 15.954s | 23.06x |
|
|
114
|
+
|
|
115
|
+
#### Memory Usage Comparison
|
|
116
|
+
|
|
117
|
+
| Tool Configuration | Peak Memory | Relative Performance |
|
|
118
|
+
|---------------------|---------------------|---------------------|
|
|
119
|
+
| 🥇 pysentry-pypi | 9.86 MB | 1.00x |
|
|
120
|
+
| 🥈 pysentry-osv | 10.14 MB | 1.03x |
|
|
121
|
+
| pip-audit-default | 47.00 MB | 4.77x |
|
|
122
|
+
| pysentry-pypa | 73.75 MB | 7.48x |
|
|
123
|
+
| pysentry-all-sources | 94.11 MB | 9.55x |
|
|
124
|
+
|
|
125
|
+
## Detailed Analysis
|
|
126
|
+
|
|
127
|
+
### Pysentry Performance
|
|
128
|
+
|
|
129
|
+
- **Execution Time:** Avg: 1.511s, Min: 0.213s, Max: 4.382s
|
|
130
|
+
|
|
131
|
+
- **Memory Usage:** Avg: 47.51 MB, Min: 9.86 MB, Max: 107.07 MB
|
|
132
|
+
|
|
133
|
+
- **Success Rate:** 100.0% (16/16)
|
|
134
|
+
|
|
135
|
+
### Pip-Audit Performance
|
|
136
|
+
|
|
137
|
+
- **Execution Time:** Avg: 12.997s, Min: 7.922s, Max: 19.161s
|
|
138
|
+
|
|
139
|
+
- **Memory Usage:** Avg: 46.03 MB, Min: 44.28 MB, Max: 47.43 MB
|
|
140
|
+
|
|
141
|
+
- **Success Rate:** 100.0% (4/4)
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# PySentry - pip-audit Benchmark Report
|
|
2
|
+
|
|
3
|
+
**Generated:** 2025-08-13 12:12:39
|
|
4
|
+
**Duration:** 1m 46.86s
|
|
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.179s) - 46.37x faster than slowest
|
|
13
|
+
- **Memory Efficient:** pysentry-pypi (8.52 MB) - 12.47x less memory than highest
|
|
14
|
+
|
|
15
|
+
### Small_Requirements Dataset - Hot Cache
|
|
16
|
+
- **Fastest:** pysentry-pypi (0.163s) - 48.14x faster than slowest
|
|
17
|
+
- **Memory Efficient:** pysentry-pypi (8.43 MB) - 11.45x less memory than highest
|
|
18
|
+
|
|
19
|
+
### Large_Requirements Dataset - Cold Cache
|
|
20
|
+
- **Fastest:** pysentry-pypi (0.642s) - 26.63x faster than slowest
|
|
21
|
+
- **Memory Efficient:** pysentry-osv (10.42 MB) - 9.72x less memory than highest
|
|
22
|
+
|
|
23
|
+
### Large_Requirements Dataset - Hot Cache
|
|
24
|
+
- **Fastest:** pysentry-pypi (0.594s) - 25.42x faster than slowest
|
|
25
|
+
- **Memory Efficient:** pysentry-pypi (8.40 MB) - 12.41x 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.74 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.179s | 1.00x |
|
|
44
|
+
| 🥈 pysentry-all-sources | 1.024s | 5.71x |
|
|
45
|
+
| pysentry-osv | 1.051s | 5.86x |
|
|
46
|
+
| pysentry-pypa | 1.063s | 5.93x |
|
|
47
|
+
| pip-audit-default | 8.310s | 46.37x |
|
|
48
|
+
|
|
49
|
+
#### Memory Usage Comparison
|
|
50
|
+
|
|
51
|
+
| Tool Configuration | Peak Memory | Relative Performance |
|
|
52
|
+
|---------------------|---------------------|---------------------|
|
|
53
|
+
| 🥇 pysentry-pypi | 8.52 MB | 1.00x |
|
|
54
|
+
| 🥈 pysentry-osv | 10.50 MB | 1.23x |
|
|
55
|
+
| pip-audit-default | 45.38 MB | 5.32x |
|
|
56
|
+
| pysentry-pypa | 65.20 MB | 7.65x |
|
|
57
|
+
| pysentry-all-sources | 106.33 MB | 12.47x |
|
|
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.163s | 1.00x |
|
|
66
|
+
| 🥈 pysentry-pypa | 0.651s | 3.99x |
|
|
67
|
+
| pysentry-osv | 0.811s | 4.98x |
|
|
68
|
+
| pysentry-all-sources | 0.980s | 6.01x |
|
|
69
|
+
| pip-audit-default | 7.849s | 48.14x |
|
|
70
|
+
|
|
71
|
+
#### Memory Usage Comparison
|
|
72
|
+
|
|
73
|
+
| Tool Configuration | Peak Memory | Relative Performance |
|
|
74
|
+
|---------------------|---------------------|---------------------|
|
|
75
|
+
| 🥇 pysentry-pypi | 8.43 MB | 1.00x |
|
|
76
|
+
| 🥈 pysentry-osv | 10.28 MB | 1.22x |
|
|
77
|
+
| pip-audit-default | 44.97 MB | 5.33x |
|
|
78
|
+
| pysentry-pypa | 67.79 MB | 8.04x |
|
|
79
|
+
| pysentry-all-sources | 96.55 MB | 11.45x |
|
|
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.642s | 1.00x |
|
|
88
|
+
| 🥈 pysentry-pypa | 1.071s | 1.67x |
|
|
89
|
+
| pysentry-all-sources | 3.248s | 5.06x |
|
|
90
|
+
| pysentry-osv | 3.644s | 5.67x |
|
|
91
|
+
| pip-audit-default | 17.106s | 26.63x |
|
|
92
|
+
|
|
93
|
+
#### Memory Usage Comparison
|
|
94
|
+
|
|
95
|
+
| Tool Configuration | Peak Memory | Relative Performance |
|
|
96
|
+
|---------------------|---------------------|---------------------|
|
|
97
|
+
| 🥇 pysentry-osv | 10.42 MB | 1.00x |
|
|
98
|
+
| 🥈 pysentry-pypi | 13.56 MB | 1.30x |
|
|
99
|
+
| pip-audit-default | 47.45 MB | 4.55x |
|
|
100
|
+
| pysentry-pypa | 64.17 MB | 6.16x |
|
|
101
|
+
| pysentry-all-sources | 101.29 MB | 9.72x |
|
|
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.594s | 1.00x |
|
|
110
|
+
| 🥈 pysentry-pypa | 1.133s | 1.91x |
|
|
111
|
+
| pysentry-all-sources | 3.124s | 5.26x |
|
|
112
|
+
| pysentry-osv | 3.124s | 5.26x |
|
|
113
|
+
| pip-audit-default | 15.104s | 25.42x |
|
|
114
|
+
|
|
115
|
+
#### Memory Usage Comparison
|
|
116
|
+
|
|
117
|
+
| Tool Configuration | Peak Memory | Relative Performance |
|
|
118
|
+
|---------------------|---------------------|---------------------|
|
|
119
|
+
| 🥇 pysentry-pypi | 8.40 MB | 1.00x |
|
|
120
|
+
| 🥈 pysentry-osv | 10.40 MB | 1.24x |
|
|
121
|
+
| pip-audit-default | 47.29 MB | 5.63x |
|
|
122
|
+
| pysentry-pypa | 72.68 MB | 8.65x |
|
|
123
|
+
| pysentry-all-sources | 104.25 MB | 12.41x |
|
|
124
|
+
|
|
125
|
+
## Detailed Analysis
|
|
126
|
+
|
|
127
|
+
### Pysentry Performance
|
|
128
|
+
|
|
129
|
+
- **Execution Time:** Avg: 1.406s, Min: 0.163s, Max: 3.644s
|
|
130
|
+
|
|
131
|
+
- **Memory Usage:** Avg: 47.42 MB, Min: 8.40 MB, Max: 106.33 MB
|
|
132
|
+
|
|
133
|
+
- **Success Rate:** 100.0% (16/16)
|
|
134
|
+
|
|
135
|
+
### Pip-Audit Performance
|
|
136
|
+
|
|
137
|
+
- **Execution Time:** Avg: 12.092s, Min: 7.849s, Max: 17.106s
|
|
138
|
+
|
|
139
|
+
- **Memory Usage:** Avg: 46.27 MB, Min: 44.97 MB, Max: 47.45 MB
|
|
140
|
+
|
|
141
|
+
- **Success Rate:** 100.0% (4/4)
|