# pytest-snap
Minimal deterministic snapshot capture of a pytest run: per-test outcome +
duration (ns) stored in a JSON file. Intended as a small foundation for
optional future diff / perf / gating features.
Current scope:
* Pytest plugin auto‑loaded (entry point `snap`).
* `--snap` flag enables capture.
* `--snap-out PATH` chooses output file (default `.snap/current.json`).
* CLI wrapper for repeated labeled runs (`pytest-snap run`, `pytest-snap all`).
PyPi: https://pypi.org/project/pytest-snapcheck/#description
## Installation
```bash
pip install pytest-snapcheck
```
---
## Quick Start
Install:
```bash
pip install pytest-snapcheck
```
Run tests with snapshot capture:
```bash
pytest --snap
```
Result written to `.snap/current.json` (create the directory if needed). Change
destination:
```bash
pytest --snap --snap-out my_run.json
```
Use the helper CLI for labeled runs (writes `.artifacts/snap_<label>.json`):
```bash
pytest-snap run v1
pytest-snap run v2
# or
pytest-snapcheck run v1
```
Generate several labels in sequence:
```bash
pytest-snap all # default labels v1 v2 v3
```
### Using a custom tests folder
By default, the CLI runs your repo's `./tests` directory if it exists. To target a different folder, file, or a single test (node id), pass `--tests`:
```bash
# A specific directory
pytest-snap run v1 --tests ./path/to/tests
# A subfolder of your test tree
pytest-snap run v1 --tests tests/integration
# A single file or a single test node
pytest-snap run v1 --tests tests/test_api.py
pytest-snap run v1 --tests tests/test_api.py::test_happy_path
# Add regular pytest filters (forwarded as-is)
pytest-snap run v1 --tests tests/integration -k "smoke" -m "not flaky"
```
Prefer using plain pytest? The plugin doesn't change discovery; just supply paths as usual and add the flags:
```bash
pytest --snap --snap-out .artifacts/snap.json ./path/to/tests
# If plugin autoload is disabled:
pytest -p pytest_snap.plugin --snap --snap-out .artifacts/snap.json ./path/to/tests
```
### Artifacts and outputs
Where results are written by default and how to change it:
- Pure pytest (plugin)
- Default file: `.snap/current.json`
- Override with `--snap-out PATH`.
- Example:
```bash
pytest --snap --snap-out .artifacts/snap_v1.json tests/
```
- CLI (pytest-snap)
- Default directory: `.artifacts`
- Files created per run:
- `.artifacts/snap_<label>.json` (always)
- `.artifacts/run_<label>.html` (only with `--html` and pytest-html installed)
- Change directory with `--artifacts DIR`.
- Examples:
```bash
# Default outputs
pytest-snap run v1
# Custom output directory
pytest-snap run v1 --artifacts out/snapshots
# Diff reads from the same directory
pytest-snap diff v1 v2 --artifacts out/snapshots
```
- Housekeeping helpers
```bash
pytest-snap list # list available snapshots
pytest-snap show v1 # show summary for a snapshot
pytest-snap clean # remove the artifacts directory
# (all accept --artifacts DIR)
```
---
## Snapshot Schema (v0.1.0)
```json
{
"started_ns": 1234567890,
"finished_ns": 1234569999,
"env": {"pytest_version": "8.x"},
"results": [
{"nodeid": "tests/test_example.py::test_ok", "outcome": "passed", "dur_ns": 10423}
]
}
```
## Future Roadmap (High Level)
Planned incremental additions (subject to change):
1. Baseline diff & change bucket summarization.
2. Slower test detection & perf thresholds.
3. Budget YAML support and gating.
4. Historical flake scoring.
5. Rich diff / timeline CLI views.
Early adopters should pin minor versions if depending on emerging fields.
### Code-level Diff (`--code`)
In addition to outcome & timing changes you can compare the test function source between two labeled versions.
Typical layout:
```
project/
v1/tests/...
v2/tests/...
```
Run a snapshot diff including code changes:
```bash
pytest-snap diff v1 v2 --code
```
What happens:
* Auto-detects version directories `<A>` and `<B>` under the current working directory (or under `--versions-base` if provided).
* Lists added / removed / modified test functions (`def test_*`).
* Shows a unified diff (syntax-colored) for modified tests with simple performance hints (range() growth, added sleep time).
Options:
* `--code` Combine snapshot diff + code diff.
* `--code-only` Suppress snapshot outcome section; only show code diff.
* `--versions-base DIR` Look for version subdirectories under `DIR` instead of `.`.
Examples:
```bash
# Just code changes (no outcome buckets)
pytest-snap diff v1 v2 --code-only --code
# Custom versions base path
pytest-snap diff release_old release_new --code --versions-base ./releases
# Code + performance analysis together
pytest-snap diff v1 v2 --code --perf
```
Limitations:
* Only inspects top-level `test_*.py` files; helper modules not diffed.
* Function-level granularity (class-based tests appear as functions with node ids).
* Large diffs are truncated after 20 modified tests (increase by editing source if needed).
---
### Performance Diff (`--perf`) in the CLI
The CLI snapshot diff (`pytest-snap diff A B`) ignores timing changes unless you opt in:
```bash
pytest-snap diff v1 v2 --perf
```
This adds a "Slower Tests" section listing tests whose elapsed time increased beyond BOTH thresholds:
* ratio: new_duration / old_duration >= `--perf-ratio` (default 1.30 ⇒ at least 30% slower)
* absolute: new_duration - old_duration >= `--perf-abs` (default 0.05s)
Optional flags:
| Flag | Meaning |
|------|---------|
| `--perf-ratio 1.5` | Require 50%+ slow-down (instead of 30%) |
| `--perf-abs 0.02` | Require at least 20ms added latency |
| `--perf-show-faster` | Also list significantly faster tests |
To see only timings + code changes (skip outcome buckets):
```bash
pytest-snap diff v1 v2 --perf --code --code-only
```
### Performance Gating During Test Runs
Inside pytest runs (plugin), slower tests are tracked when you supply a baseline and choose a fail mode:
```bash
pytest --snap-baseline .artifacts/snap_base.json \
--snap-fail-on slower \
--snap-slower-threshold-ratio 1.25 \
--snap-slower-threshold-abs 0.10
```
Behavior:
* A test is considered slower if it exceeds both the ratio and absolute thresholds.
* `--snap-fail-on slower` turns any slower test into a non‑zero exit (CI gating).
* Adjust thresholds to tune sensitivity (raise ratio or abs to reduce noise).
Shortcut mental model: ratio filters relative regressions; absolute filters micro‑noise. Both must pass so a 2ms blip on a 1µs test won't alert even if ratio is large.
If you only care about functional changes, omit perf flags; if you want early perf regression visibility, add them.
---
### Timeline / Historical Progression (`timeline` subcommand)
Use the timeline view to see how snapshots evolved over time and when failures first appeared.
Create snapshots (labels arbitrary):
```bash
pytest-snap run v1
pytest-snap run v2
pytest-snap run v3
```
Show chronological summary:
```bash
pytest-snap timeline
```
Sample output:
```
TIMELINE (3 snapshots)
2025-09-04T19:20:21Z v1 commit=8e05100 total=28 fail=0 new_fail=0 fixes=0 regressions=0
2025-09-04T19:25:07Z v2 commit=8e05100 total=28 fail=1 new_fail=1 fixes=0 regressions=1
2025-09-04T19:30:44Z v3 commit=8e05100 total=28 fail=1 new_fail=0 fixes=1 regressions=0
```
Flags:
| Flag | Purpose |
|------|---------|
| `--since <commit>` | Start listing from first snapshot whose `git_commit` matches (short hash) |
| `--limit N` | Show only the last N snapshots after filtering |
| `--json` | Emit machine-readable JSON array |
| `--artifacts DIR` | Use alternate artifacts directory |
Computed per row (vs previous snapshot):
* `new_fail`: tests that newly failed.
* `fixes`: previously failing tests that now pass.
* `regressions`: passed → failed transitions.
Metadata:
* Each snapshot is enriched (best effort) with `git_commit` (short HEAD hash) after write.
* If git metadata isn’t available (outside a repo), the commit shows as `unknown` or `None`.
JSON example:
```bash
pytest-snap timeline --json | jq .
```
Produces entries like:
```json
[
{"label":"v1","git_commit":"8e05100","total":28,"failed":0,"passed":28,"xfailed":0,"xpassed":0,"new_fail":0,"fixes":0,"regressions":0},
{"label":"v2","git_commit":"8e05100","total":28,"failed":1,"passed":27,"xfailed":0,"xpassed":0,"new_fail":1,"fixes":0,"regressions":1}
]
```
Use cases:
* Quickly pinpoint when a regression first appeared before diving into full diff.
* Send the timeline JSON straight to a small dashboard (Prometheus push, simple web chart) without re-reading all snapshot files.
* In Continuous Integration (CI) pipelines, fail the run (block the merge) if the timeline shows new failures or regressions. CI = automated test/build system that runs on every change.
### Labels vs paths (what does `v1` mean?)
- `pytest-snap run <label>`
- The label only names the output file: `.artifacts/snap_<label>.json`.
- It does not select a folder named `<label>`; discovery defaults to `./tests` unless you pass `--tests`.
- Examples:
```bash
pytest-snap run v1 # runs ./tests, writes .artifacts/snap_v1.json
pytest-snap run mylabel --tests tests/api
pytest-snap run pr-123 --tests tests/test_api.py::test_happy_path
```
- `pytest-snap diff <A> <B>`
- Labels refer to snapshot files in the artifacts directory (default `.artifacts`).
- When you add `--code` (or `--code-only`), directories named `<A>` and `<B>` are looked up under `--versions-base` (default `.`).
- You can control the base with `--versions-base PATH`.
---
## Flaky Detection
When history logging is enabled (default in `pytest-snap run`), previous outcomes are tracked. A weighted score measures pass ↔ fail flips. Highly flaky tests can be excluded from "new failures" to reduce noise.
---
## Conceptual Model
1. Enable capture (flag / CLI) → write snapshot.
2. (Future) Compare snapshots → categorize changes.
3. (Future) Apply gating policies.
4. Refresh baseline as intent changes.
---
## FAQ
**Do I need the CLI?** No; it's convenience sugar for labeled runs.
**Why not a baseline diff yet?** Keeping 0.1.0 deliberately small; diffing lands next.
**Will the schema change?** Potentially (still pre-1.0.0) but additions will prefer backward compatibility.
---
## Glossary
| Term | Definition |
|------|------------|
| Snapshot | JSON record of one full test run |
| Nodeid | Pytest's canonical test identifier |
| Duration | Test call-phase elapsed time (ns stored) |
---
## Contributing
1. Fork / clone.
2. (Optional) Create venv & install: `pip install -e .[dev]`.
3. Add or adjust tests for your changes.
4. Keep documentation clear and concise.
5. Open a PR.
---
## License
MIT (see `LICENSE`).
## Compatibility
Runs on
* Operating systems: macOS, Linux, and Windows (pure Python, no native extensions).
* Python versions: 3.9+ (tox/CI test 3.9–3.12; builds also succeed on 3.13).
* Requirements: pytest>=8.0.
Raw data
{
"_id": null,
"home_page": null,
"name": "pytest-snapcheck",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "pytest, testing, snapshot, regression",
"author": "Cyril Rikh",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/ce/f6/b919f4eaf8317093465d62b8de62caa9a90ef7e7a6def778296aae94b0c6/pytest_snapcheck-0.1.5.tar.gz",
"platform": null,
"description": "# pytest-snap\n\nMinimal deterministic snapshot capture of a pytest run: per-test outcome +\nduration (ns) stored in a JSON file. Intended as a small foundation for\noptional future diff / perf / gating features.\n\nCurrent scope:\n* Pytest plugin auto\u2011loaded (entry point `snap`).\n* `--snap` flag enables capture.\n* `--snap-out PATH` chooses output file (default `.snap/current.json`).\n* CLI wrapper for repeated labeled runs (`pytest-snap run`, `pytest-snap all`).\n\nPyPi: https://pypi.org/project/pytest-snapcheck/#description\n\n## Installation\n\n```bash\npip install pytest-snapcheck\n```\n---\n\n## Quick Start\n\nInstall:\n\n```bash\npip install pytest-snapcheck\n```\n\nRun tests with snapshot capture:\n\n```bash\npytest --snap\n```\n\nResult written to `.snap/current.json` (create the directory if needed). Change\ndestination:\n\n```bash\npytest --snap --snap-out my_run.json\n```\n\nUse the helper CLI for labeled runs (writes `.artifacts/snap_<label>.json`):\n\n```bash\npytest-snap run v1\npytest-snap run v2\n# or\npytest-snapcheck run v1\n```\n\nGenerate several labels in sequence:\n\n```bash\npytest-snap all # default labels v1 v2 v3\n```\n\n### Using a custom tests folder\n\nBy default, the CLI runs your repo's `./tests` directory if it exists. To target a different folder, file, or a single test (node id), pass `--tests`:\n\n```bash\n# A specific directory\npytest-snap run v1 --tests ./path/to/tests\n\n# A subfolder of your test tree\npytest-snap run v1 --tests tests/integration\n\n# A single file or a single test node\npytest-snap run v1 --tests tests/test_api.py\npytest-snap run v1 --tests tests/test_api.py::test_happy_path\n\n# Add regular pytest filters (forwarded as-is)\npytest-snap run v1 --tests tests/integration -k \"smoke\" -m \"not flaky\"\n```\n\nPrefer using plain pytest? The plugin doesn't change discovery; just supply paths as usual and add the flags:\n\n```bash\npytest --snap --snap-out .artifacts/snap.json ./path/to/tests\n# If plugin autoload is disabled:\npytest -p pytest_snap.plugin --snap --snap-out .artifacts/snap.json ./path/to/tests\n```\n\n### Artifacts and outputs\n\nWhere results are written by default and how to change it:\n\n- Pure pytest (plugin)\n\t- Default file: `.snap/current.json`\n\t- Override with `--snap-out PATH`.\n\t- Example:\n\t\t```bash\n\t\tpytest --snap --snap-out .artifacts/snap_v1.json tests/\n\t\t```\n\n- CLI (pytest-snap)\n\t- Default directory: `.artifacts`\n\t- Files created per run:\n\t\t- `.artifacts/snap_<label>.json` (always)\n\t\t- `.artifacts/run_<label>.html` (only with `--html` and pytest-html installed)\n\t- Change directory with `--artifacts DIR`.\n\t- Examples:\n\t\t```bash\n\t\t# Default outputs\n\t\tpytest-snap run v1\n\n\t\t# Custom output directory\n\t\tpytest-snap run v1 --artifacts out/snapshots\n\n\t\t# Diff reads from the same directory\n\t\tpytest-snap diff v1 v2 --artifacts out/snapshots\n\t\t```\n\n- Housekeeping helpers\n\t```bash\n\tpytest-snap list # list available snapshots\n\tpytest-snap show v1 # show summary for a snapshot\n\tpytest-snap clean # remove the artifacts directory\n\t# (all accept --artifacts DIR)\n\t```\n\n---\n\n## Snapshot Schema (v0.1.0)\n\n```json\n{\n\t\"started_ns\": 1234567890,\n\t\"finished_ns\": 1234569999,\n\t\"env\": {\"pytest_version\": \"8.x\"},\n\t\"results\": [\n\t\t{\"nodeid\": \"tests/test_example.py::test_ok\", \"outcome\": \"passed\", \"dur_ns\": 10423}\n\t]\n}\n```\n\n## Future Roadmap (High Level)\nPlanned incremental additions (subject to change):\n1. Baseline diff & change bucket summarization.\n2. Slower test detection & perf thresholds.\n3. Budget YAML support and gating.\n4. Historical flake scoring.\n5. Rich diff / timeline CLI views.\n\nEarly adopters should pin minor versions if depending on emerging fields.\n\n### Code-level Diff (`--code`)\n\nIn addition to outcome & timing changes you can compare the test function source between two labeled versions.\n\nTypical layout:\n```\nproject/\n\tv1/tests/...\n\tv2/tests/...\n```\n\nRun a snapshot diff including code changes:\n```bash\npytest-snap diff v1 v2 --code\n```\n\nWhat happens:\n* Auto-detects version directories `<A>` and `<B>` under the current working directory (or under `--versions-base` if provided).\n* Lists added / removed / modified test functions (`def test_*`).\n* Shows a unified diff (syntax-colored) for modified tests with simple performance hints (range() growth, added sleep time).\n\nOptions:\n* `--code` Combine snapshot diff + code diff.\n* `--code-only` Suppress snapshot outcome section; only show code diff.\n* `--versions-base DIR` Look for version subdirectories under `DIR` instead of `.`.\n\nExamples:\n```bash\n# Just code changes (no outcome buckets)\npytest-snap diff v1 v2 --code-only --code\n\n# Custom versions base path\npytest-snap diff release_old release_new --code --versions-base ./releases\n\n# Code + performance analysis together\npytest-snap diff v1 v2 --code --perf\n```\n\nLimitations:\n* Only inspects top-level `test_*.py` files; helper modules not diffed.\n* Function-level granularity (class-based tests appear as functions with node ids).\n* Large diffs are truncated after 20 modified tests (increase by editing source if needed).\n\n---\n\n### Performance Diff (`--perf`) in the CLI\n\nThe CLI snapshot diff (`pytest-snap diff A B`) ignores timing changes unless you opt in:\n\n```bash\npytest-snap diff v1 v2 --perf\n```\n\nThis adds a \"Slower Tests\" section listing tests whose elapsed time increased beyond BOTH thresholds:\n\n* ratio: new_duration / old_duration >= `--perf-ratio` (default 1.30 \u21d2 at least 30% slower)\n* absolute: new_duration - old_duration >= `--perf-abs` (default 0.05s)\n\nOptional flags:\n\n| Flag | Meaning |\n|------|---------|\n| `--perf-ratio 1.5` | Require 50%+ slow-down (instead of 30%) |\n| `--perf-abs 0.02` | Require at least 20ms added latency |\n| `--perf-show-faster` | Also list significantly faster tests |\n\nTo see only timings + code changes (skip outcome buckets):\n```bash\npytest-snap diff v1 v2 --perf --code --code-only\n```\n\n### Performance Gating During Test Runs\n\nInside pytest runs (plugin), slower tests are tracked when you supply a baseline and choose a fail mode:\n\n```bash\npytest --snap-baseline .artifacts/snap_base.json \\\n\t--snap-fail-on slower \\\n\t--snap-slower-threshold-ratio 1.25 \\\n\t--snap-slower-threshold-abs 0.10\n```\n\nBehavior:\n\n* A test is considered slower if it exceeds both the ratio and absolute thresholds.\n* `--snap-fail-on slower` turns any slower test into a non\u2011zero exit (CI gating).\n* Adjust thresholds to tune sensitivity (raise ratio or abs to reduce noise).\n\nShortcut mental model: ratio filters relative regressions; absolute filters micro\u2011noise. Both must pass so a 2ms blip on a 1\u00b5s test won't alert even if ratio is large.\n\nIf you only care about functional changes, omit perf flags; if you want early perf regression visibility, add them.\n\n---\n\n### Timeline / Historical Progression (`timeline` subcommand)\n\nUse the timeline view to see how snapshots evolved over time and when failures first appeared.\n\nCreate snapshots (labels arbitrary):\n```bash\npytest-snap run v1\npytest-snap run v2\npytest-snap run v3\n```\n\nShow chronological summary:\n```bash\npytest-snap timeline\n```\nSample output:\n```\nTIMELINE (3 snapshots)\n2025-09-04T19:20:21Z v1 commit=8e05100 total=28 fail=0 new_fail=0 fixes=0 regressions=0\n2025-09-04T19:25:07Z v2 commit=8e05100 total=28 fail=1 new_fail=1 fixes=0 regressions=1\n2025-09-04T19:30:44Z v3 commit=8e05100 total=28 fail=1 new_fail=0 fixes=1 regressions=0\n```\n\nFlags:\n| Flag | Purpose |\n|------|---------|\n| `--since <commit>` | Start listing from first snapshot whose `git_commit` matches (short hash) |\n| `--limit N` | Show only the last N snapshots after filtering |\n| `--json` | Emit machine-readable JSON array |\n| `--artifacts DIR` | Use alternate artifacts directory |\n\nComputed per row (vs previous snapshot):\n* `new_fail`: tests that newly failed.\n* `fixes`: previously failing tests that now pass.\n* `regressions`: passed \u2192 failed transitions.\n\nMetadata:\n* Each snapshot is enriched (best effort) with `git_commit` (short HEAD hash) after write.\n* If git metadata isn\u2019t available (outside a repo), the commit shows as `unknown` or `None`.\n\nJSON example:\n```bash\npytest-snap timeline --json | jq .\n```\nProduces entries like:\n```json\n[\n\t{\"label\":\"v1\",\"git_commit\":\"8e05100\",\"total\":28,\"failed\":0,\"passed\":28,\"xfailed\":0,\"xpassed\":0,\"new_fail\":0,\"fixes\":0,\"regressions\":0},\n\t{\"label\":\"v2\",\"git_commit\":\"8e05100\",\"total\":28,\"failed\":1,\"passed\":27,\"xfailed\":0,\"xpassed\":0,\"new_fail\":1,\"fixes\":0,\"regressions\":1}\n]\n```\n\nUse cases:\n* Quickly pinpoint when a regression first appeared before diving into full diff.\n* Send the timeline JSON straight to a small dashboard (Prometheus push, simple web chart) without re-reading all snapshot files.\n* In Continuous Integration (CI) pipelines, fail the run (block the merge) if the timeline shows new failures or regressions. CI = automated test/build system that runs on every change.\n\n### Labels vs paths (what does `v1` mean?)\n\n- `pytest-snap run <label>`\n\t- The label only names the output file: `.artifacts/snap_<label>.json`.\n\t- It does not select a folder named `<label>`; discovery defaults to `./tests` unless you pass `--tests`.\n\t- Examples:\n\t\t```bash\n\t\tpytest-snap run v1 # runs ./tests, writes .artifacts/snap_v1.json\n\t\tpytest-snap run mylabel --tests tests/api\n\t\tpytest-snap run pr-123 --tests tests/test_api.py::test_happy_path\n\t\t```\n\n- `pytest-snap diff <A> <B>`\n\t- Labels refer to snapshot files in the artifacts directory (default `.artifacts`).\n\t- When you add `--code` (or `--code-only`), directories named `<A>` and `<B>` are looked up under `--versions-base` (default `.`).\n\t- You can control the base with `--versions-base PATH`.\n\n---\n\n## Flaky Detection\n\nWhen history logging is enabled (default in `pytest-snap run`), previous outcomes are tracked. A weighted score measures pass \u2194 fail flips. Highly flaky tests can be excluded from \"new failures\" to reduce noise.\n\n---\n\n## Conceptual Model\n1. Enable capture (flag / CLI) \u2192 write snapshot.\n2. (Future) Compare snapshots \u2192 categorize changes.\n3. (Future) Apply gating policies.\n4. Refresh baseline as intent changes.\n\n---\n\n## FAQ\n**Do I need the CLI?** No; it's convenience sugar for labeled runs.\n\n**Why not a baseline diff yet?** Keeping 0.1.0 deliberately small; diffing lands next.\n\n**Will the schema change?** Potentially (still pre-1.0.0) but additions will prefer backward compatibility.\n\n---\n\n## Glossary\n| Term | Definition |\n|------|------------|\n| Snapshot | JSON record of one full test run |\n| Nodeid | Pytest's canonical test identifier |\n| Duration | Test call-phase elapsed time (ns stored) |\n\n---\n\n## Contributing\n\n1. Fork / clone. \n2. (Optional) Create venv & install: `pip install -e .[dev]`. \n3. Add or adjust tests for your changes. \n4. Keep documentation clear and concise. \n5. Open a PR.\n\n---\n\n## License\n\nMIT (see `LICENSE`).\n\n## Compatibility\nRuns on\n* Operating systems: macOS, Linux, and Windows (pure Python, no native extensions).\n* Python versions: 3.9+ (tox/CI test 3.9\u20133.12; builds also succeed on 3.13).\n* Requirements: pytest>=8.0.\n\n",
"bugtrack_url": null,
"license": null,
"summary": "Minimal deterministic test-run snapshot capture for pytest.",
"version": "0.1.5",
"project_urls": {
"Homepage": "https://github.com/cr5459/pytest-snap",
"Issues": "https://github.com/cr5459/pytest-snap/issues"
},
"split_keywords": [
"pytest",
" testing",
" snapshot",
" regression"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "26b021686ccb067e466b9d6d805cefb72b38ad48768efc1ed759cd3fafcf0296",
"md5": "363cd5df64598a308d63e7ffeb06d759",
"sha256": "1bd0e6dddfb0440ebd969fc9e95f9e58dde9014898f6aa2359be2ef446cfe32f"
},
"downloads": -1,
"filename": "pytest_snapcheck-0.1.5-py3-none-any.whl",
"has_sig": false,
"md5_digest": "363cd5df64598a308d63e7ffeb06d759",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 26004,
"upload_time": "2025-09-07T00:26:15",
"upload_time_iso_8601": "2025-09-07T00:26:15.575181Z",
"url": "https://files.pythonhosted.org/packages/26/b0/21686ccb067e466b9d6d805cefb72b38ad48768efc1ed759cd3fafcf0296/pytest_snapcheck-0.1.5-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "cef6b919f4eaf8317093465d62b8de62caa9a90ef7e7a6def778296aae94b0c6",
"md5": "be2a84ae5021578c74f875bcd4465a37",
"sha256": "0ee574791e0a5aa80d1db14cbaaa5dbe7e9f0101a5524be4e91ca1b99f7fddf5"
},
"downloads": -1,
"filename": "pytest_snapcheck-0.1.5.tar.gz",
"has_sig": false,
"md5_digest": "be2a84ae5021578c74f875bcd4465a37",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 28620,
"upload_time": "2025-09-07T00:26:16",
"upload_time_iso_8601": "2025-09-07T00:26:16.709826Z",
"url": "https://files.pythonhosted.org/packages/ce/f6/b919f4eaf8317093465d62b8de62caa9a90ef7e7a6def778296aae94b0c6/pytest_snapcheck-0.1.5.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-09-07 00:26:16",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "cr5459",
"github_project": "pytest-snap",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "pytest",
"specs": [
[
">=",
"8.0"
]
]
}
],
"tox": true,
"lcname": "pytest-snapcheck"
}