Fast QVD file parser — Python bindings for qvd-parser (Rust)
Project description
qvd-parser
Fast, correct QVD (QlikView Data) file parser written in Rust.
Reads the binary format used by QlikView and Qlik Sense to store compressed data tables. Exposes a Rust API, a Python API (via PyO3), and a CLI. Export targets: JSON, CSV, Parquet.
Note: QVD is a proprietary file format associated with QlikView and Qlik Sense. This project is not affiliated with or endorsed by Qlik. See Legal & Interoperability for details.
Workspace structure
qvd-parser/
├── core/ # Core parsing library — QvdFile, QvdValue, RowIter
├── convert/ # Export backends: Parquet, JSON, CSV
├── cli/ # Command-line interface (qvd-parser-cli binary)
└── bindings-python/ # Python bindings via PyO3 + maturin
Prerequisites
- Rust toolchain (1.75+): https://rustup.rs
- For Python bindings:
pip install maturin
Build
# Build all crates
cargo build --workspace
# Build release (recommended for performance measurement)
cargo build --release --workspace
# Run all Rust unit tests
cargo test --workspace
# Run integration tests (requires QVD fixtures — see below)
cargo test --workspace --features integration-tests
# Build the Python extension in-place (for development)
maturin develop
# Run Python binding tests
pytest bindings-python/tests/
CLI usage
# Schema inspection
cargo run -p qvd-parser-cli -- schema --input data.qvd
# Export to JSON
cargo run -p qvd-parser-cli -- export --input data.qvd --format json --output out.json
# Export to CSV (semicolon delimiter)
cargo run -p qvd-parser-cli -- export --input data.qvd --format csv --output out.csv --csv-delimiter ";"
# Export to Parquet (verbose timing breakdown)
cargo run --release -p qvd-parser-cli -- export --input data.qvd --format parquet --output out.parquet --verbose
Parquet export options
| Flag | Default | Description |
|---|---|---|
--cast FIELD=TYPE |
— | Force a column to a specific Arrow type. Repeat for multiple fields. Valid types: INT32, INT64, FLOAT32, FLOAT64, STRING, DATE32, TIMESTAMP_MS, BOOLEAN. Takes priority over --schema-overrides on conflict. |
--schema-overrides FILE |
— | Path to a JSON file containing per-field type overrides. Same {"FieldName": "TYPE"} format as --cast but file-based. Inline --cast values take priority on conflict. |
--fallback-type TYPE |
STRING |
Type used when inference is inconclusive — i.e. a column's symbol table is all-null/empty and NumberFormat carries no recognised hint either. Same valid types as --cast. Never overrides a genuine text result from the symbol scan. |
--row-group-size N |
100000 | Rows per Parquet row group |
--strict-first |
off | Fail immediately on the first cast error instead of writing null. Mutually exclusive with --strict-all. |
--strict-all |
off | Run the full export collecting every cast error, then fail with the complete list if any occurred. The output file is still fully written (failed values as null) even though the command exits with an error. Mutually exclusive with --strict-first. |
--encoding auto|plain|dictionary |
auto |
Arrow array encoding strategy. CLI-only, experimental — not exposed in Python bindings (see performance notes below). |
--no-statistics |
off | Disable column min/max statistics (~20% faster export, less efficient predicate pushdown for consumers). CLI-only, experimental — not exposed in Python bindings. |
By default (no --strict-first/--strict-all), cast failures are written
as null and reported as warnings on stderr after the export completes —
nothing is silently lost without a trace:
warning: 3 value(s) failed to cast and were written as null:
field 'Amount' row 42: cannot parse 'N/A' as FLOAT64: invalid float literal
field 'Amount' row 109: cannot parse 'N/A' as FLOAT64: invalid float literal
field 'Date' row 7: cannot convert text 'unknown' to DATE32 — use a numeric day-offset value
# Force specific column types
cargo run --release -p qvd-parser-cli -- export \
--input data.qvd --format parquet --output out.parquet \
--cast DateField=DATE32 --cast Amount=FLOAT64
# Use a JSON override file
cargo run --release -p qvd-parser-cli -- export \
--input data.qvd --format parquet --output out.parquet \
--schema-overrides overrides.json
# Both combined — inline --cast takes priority on conflict
cargo run --release -p qvd-parser-cli -- export \
--input data.qvd --format parquet --output out.parquet \
--schema-overrides overrides.json --cast DateField=TIMESTAMP_MS
# Fail with a complete error report if any value fails to cast
cargo run --release -p qvd-parser-cli -- export \
--input data.qvd --format parquet --output out.parquet \
--strict-all
# All-null/empty columns default to STRING; force INT64 instead
cargo run --release -p qvd-parser-cli -- export \
--input data.qvd --format parquet --output out.parquet \
--fallback-type INT64
Verbose timing output
--verbose shows a per-phase breakdown of both parsing and export:
[qvd] export: data.qvd
load header+symbols+rows 124 ms [140 fields 119820 rows 126 B/rec]
header 1 ms
symbols 23 ms
rows 98 ms
export parquet 555 ms [out.parquet]
type inference 0 ms
index transpose 43 ms
cast to arrow 166 ms
parquet encode 296 ms
parquet close 49 ms
Type inference
For each column without an explicit --cast/schema_overrides entry, the
target Arrow type is resolved in this order:
- Symbol scan — the full symbol table is scanned; the dominant
non-null variant wins (
Int64/Float64only if zero text symbols are present — any text presence forcesSTRING, since a numeric type would silently null out non-numeric values). NumberFormat.type_namehint — used only when the symbol scan is inconclusive (column is all-null or empty).NumberFormatis a Qlik display format declaration, not a data-type guarantee — a pure-text field can legally carry<Type>REAL</Type>— so it is never trusted over actual stored data.--fallback-type— last resort, used only when both the symbol scan and theNumberFormathint are inconclusive. Defaults toSTRING.
Cast failures (e.g. a --cast Field=INT64 override on a column containing
non-numeric text) do not abort the export by default — see --strict-first
/ --strict-all above to change that, and the warning output shown there
for how failures are reported.
Python usage
import qvd_parser
# From a file path (Rust opens the file directly)
f = qvd_parser.QvdFile.open("data.qvd")
print(f.table_name, f.row_count, f.field_names())
for row in f.rows():
print(row) # list of Python-native values (int, float, str, tuple, None)
# Export
f.to_parquet("out.parquet")
f.to_parquet("out.parquet", cast_overrides={"DateField": "DATE32", "Amount": "FLOAT64"})
f.to_parquet("out.parquet", schema_overrides_file="overrides.json")
f.to_parquet("out.parquet", strict_mode="strict_first") # raise on first cast error
f.to_parquet("out.parquet", strict_mode="strict_all") # raise with the full error list
f.to_parquet("out.parquet", fallback_type="INT64") # all-null columns default to INT64 instead of STRING
f.to_json("out.json")
f.to_csv("out.csv", delimiter=";")
# to_parquet() returns a CastWarnings object (default strict_mode="silent"):
# empty/falsy if every value cast successfully, otherwise inspect .entries
warnings = f.to_parquet("out.parquet", cast_overrides={"Amount": "FLOAT64"})
if warnings:
for w in warnings.entries:
print(w) # "field 'Amount' row 42: cannot parse 'N/A' as FLOAT64: ..."
Parsing from in-memory bytes
When the QVD is already in memory — downloaded from a signed URL, read from
object storage, or loaded via any other source that does not produce a file
path — use from_bytes():
# From a signed URL (no temporary file needed)
import requests
data = requests.get(signed_url).content
f = qvd_parser.QvdFile.from_bytes(data)
# AWS S3
data = s3_client.get_object(Bucket="my-bucket", Key="data.qvd")["Body"].read()
f = qvd_parser.QvdFile.from_bytes(data)
# Python file handle (equivalent to open(), Python controls the lifecycle)
with open("data.qvd", "rb") as fh:
f = qvd_parser.QvdFile.from_bytes(fh.read())
All methods available on open() results are available on from_bytes()
results: rows(), to_dict(), to_parquet(), to_json(), to_csv(), etc.
Note on memory usage:
from_bytes()requires the entire QVD to be in RAM. This is unavoidable when the source is an in-memory buffer. If you have a file path and memory is a concern, preferopen()— it lets the OS manage buffering.
Python version compatibility
Tested against Python 3.13. CPython 3.11 and 3.12 are declared compatible for Snowflake runtime support but are not covered by CI.
Test fixtures
Integration tests require real QVD files generated by Qlik — synthetic QVD files are not possible due to the proprietary bit-packing format.
Place fixture files in fixtures/ at the workspace root:
| File | Content |
|---|---|
test-data-minimal.qvd |
2 columns (id: Int, label: Text), 2 rows: [1, "test1"], [2, "test2"] — primary fixture for Rust and Python tests |
all-nulls.qvd |
2 columns, nullable_col entirely NULL — 3 rows |
all-types.qvd |
6 columns covering all QvdValue variants: Int, Double, Text, DualInt, DualDouble, Null |
single-row.qvd |
Exactly 1 row — iterator and size_hint edge case |
empty-table.qvd |
0 rows, schema present — 2 columns |
large-integers.qvd |
Values at i32::MIN/i32::MAX and byte/word boundaries |
unicode-strings.qvd |
Multi-byte UTF-8 strings: accented Latin characters, CJK |
high-cardinality.qvd |
100 rows, unique_label with 100 distinct values |
wide-record.qvd |
RecordByteSize > 16 — regression fixture for the u128 overflow bug |
mixed-types.qvd |
Heterogeneous symbol table: Int, Double, Text, NULL in the same column |
bench-symbols.qvd |
1 000 rows × 3 fields, high-cardinality symbol tables — benchmark fixture |
bench-rows.qvd |
5 000 rows × 8 fields, mixed cardinality, all QvdValue variants — benchmark fixture |
All fixtures must be generated with Qlik (QlikView or Qlik Sense) using
generate-fixtures.qvs. Synthetic QVD generation is not possible due to the
proprietary bit-packing format.
Tests that rely on missing fixtures are skipped at runtime when
--features integration-tests is active.
Feature flags
| Flag | Crate | Effect |
|---|---|---|
integration-tests |
core, convert |
Enable tests that require fixture files |
serde |
core |
Derive Serialize/Deserialize on public types |
Python binding entry points
| Method | Input | Use case |
|---|---|---|
QvdFile.open(path: str) |
File path | Rust opens and buffers the file — preferred when a path is available |
QvdFile.from_bytes(data: bytes | bytearray | memoryview) |
In-memory bytes | QVD already in RAM (signed URL, object storage, BytesIO) |
Release workflow
This project uses two separate repositories:
- GitLab (private) — daily development, full commit history
- GitHub (public) — published releases only, single commit per version
GitHub receives only validated, committed code from GitLab. The full development history never appears on GitHub.
Publishing a new release (Windows)
Ensure the version to publish is committed and pushed on GitLab main:
# 1. From the GitLab workspace, export the clean content
cd C:\path\to\qvd-parser
git checkout main
git pull origin main
git archive HEAD | tar -x -C C:\path\to\qvd-parser-public
# 2. Commit and push to GitHub
cd C:\path\to\qvd-parser-public
git add .
git commit -m "Release vX.Y.Z"
git push github main
git archive HEAD exports exactly the content of the last commit, respecting
.gitignore. Files not committed (build artifacts, fixtures, .venv) are
automatically excluded.
GitHub repository setup (once)
mkdir C:\path\to\qvd-parser-public
cd C:\path\to\qvd-parser-public
git init
git remote add github git@github.com:nicolasstefaniuk/qvd-parser.git
git config user.email "287317062+nicolasstefaniuk@users.noreply.github.com"
git config user.name "Nicolas Stefaniuk"
Performance — Parquet export investigation
Context
QVD files use a columnar symbol table + row-major bit-packed index buffer. Parsing is inherently row-major (impossible to read one column without traversing all rows). Parquet is column-major. This impedance mismatch is the core performance challenge.
Measurements (release build, 140 fields × 119 820 rows × 16.5 MB QVD)
load header+symbols+rows ~120 ms
header 1 ms
symbols 23 ms
rows (bit-unpack) 95 ms
export parquet ~650 ms
type inference 0 ms
index transpose 43 ms ← column_indices_range
cast to arrow 160 ms ← QvdValue → Arrow arrays
parquet encode 400 ms ← RLE/dictionary encoding (Arrow writer)
parquet close 48 ms
Ratio parsing:export ≈ 1:5. The bottleneck is the Arrow/Parquet writer, not our code.
Hypotheses tested
1. Cache thrashing on strided index access (fixed)
The original export collected per-column indices by striding through the
row-major buffer (n_fields × 4 bytes per step), causing cache misses on
wide files. Fixed by adding QvdFile::column_indices_range() in core:
a single sequential pass that scatters into n_fields contiguous vectors.
Measured gain: ~15% on index transpose.
2. Dictionary encoding for string columns (implemented, marginal gain)
With only 11–15 distinct values per column out of 119 820 rows, passing
pre-built DictionaryArray<Int32, Utf8> to the Parquet writer should
avoid per-row string copies and skip the encoder's internal deduplication.
Result: ~6% total gain in release, negligible. The Arrow writer (arrow-rs 53.x)
still does substantial work on DictionaryArray. Additionally, numeric
dictionary arrays (DictionaryArray<Int32, Int64> etc.) are not supported
by ArrowWriter in this version and panic at runtime — restricted to Utf8 only.
Available as --encoding dictionary for experimentation. Not recommended for
production use until arrow-rs improves dictionary support.
3. Column statistics (implemented, ~20% gain)
Parquet column statistics (min/max per page) cost ~130 ms on this file. They are enabled by default because they allow query engines to skip row groups during reads, which typically saves far more time than the export cost.
Disabling them with --no-statistics saves ~20% export time. Use when
export speed is critical and the consumer does not rely on statistics.
Conclusion
The 5× ratio between parsing and Parquet export is inherent to the Arrow writer, not to our code. The practical levers available in our layer are:
| Optimisation | Gain | Status |
|---|---|---|
column_indices_range (sequential scatter) |
~15% index transpose | Enabled by default |
--no-statistics |
~20% parquet encode | Opt-in flag |
--encoding dictionary |
<10% on Utf8 columns | Experimental, opt-in |
A more significant improvement would require either a lower-level Parquet
crate (e.g. parquet2) or parallelising column encoding — both are
substantial changes outside the current scope.
Legal & Interoperability
Trademark notice
"Qlik", "QlikView", and "Qlik Sense" are registered trademarks of Qlik Technologies Inc. The file extension "QVD" is a technical descriptor for the file format, not a registered trademark.
This project is not affiliated with, endorsed by, or sponsored by Qlik in
any way. The name qvd-parser is used solely to describe what the library
does — reading files in the QVD format — and constitutes nominative
descriptive use, not trademark infringement.
Reverse engineering and interoperability
This library was developed by observing the structure of QVD files produced by Qlik software. No Qlik source code was copied, decompiled, or incorporated. The parser is an independent implementation.
Reading a file format for the purpose of interoperability is explicitly permitted under applicable law:
- European Union — Directive 2009/24/EC on the legal protection of computer programs, Article 6, permits decompilation and reverse engineering for interoperability purposes, notwithstanding any contractual restriction to the contrary.
- United States — 17 U.S.C. § 1201(f) (DMCA) provides a specific exemption for reverse engineering undertaken to achieve interoperability. This is supported by established case law (Sega Enterprises Ltd. v. Accolade, Inc., 977 F.2d 1510; Sony Computer Entertainment, Inc. v. Connectix Corp., 203 F.3d 596).
File formats — as distinct from software implementations — are not protected by copyright as a matter of EU and US law (SAS Institute Inc. v. World Programming Ltd, CJEU C-406/10, 2012).
Enterprise users who require legal sign-off before adopting a dependency are encouraged to share this section with their legal team.
License
This project is licensed under the MIT License. See LICENSE for the full text.
Copyright (c) 2025 Nicolas Stefaniuk
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file qvd_parser-0.2.1.tar.gz.
File metadata
- Download URL: qvd_parser-0.2.1.tar.gz
- Upload date:
- Size: 118.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ca15e36fa7fdbbe4f0668d5fa20ad05fa6c35a05f169e540a716e47abe35aba3
|
|
| MD5 |
23932eb3851f041c7e8d1718058d45e8
|
|
| BLAKE2b-256 |
14ae4f829e3cdcf63db96e464e115d73a636df99eb15e3e12e3c9add57108006
|
Provenance
The following attestation bundles were made for qvd_parser-0.2.1.tar.gz:
Publisher:
publish.yml on nicolasstefaniuk/qvd-parser
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qvd_parser-0.2.1.tar.gz -
Subject digest:
ca15e36fa7fdbbe4f0668d5fa20ad05fa6c35a05f169e540a716e47abe35aba3 - Sigstore transparency entry: 2088758863
- Sigstore integration time:
-
Permalink:
nicolasstefaniuk/qvd-parser@7fd957f4f5928972f5dbc297e775334f84c08ddb -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/nicolasstefaniuk
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7fd957f4f5928972f5dbc297e775334f84c08ddb -
Trigger Event:
push
-
Statement type:
File details
Details for the file qvd_parser-0.2.1-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: qvd_parser-0.2.1-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 3.1 MB
- Tags: CPython 3.13, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e0d30141c40529e9ee96efcf1a82e47800b2017db22eb49fe53113b483fabfb2
|
|
| MD5 |
b0f03f9701d30b7031e9f11bfa6ffeab
|
|
| BLAKE2b-256 |
29c32c235fad1b22f54351f439a41c7827df268327aaf1ddaa9dd10ccfaf9e18
|
Provenance
The following attestation bundles were made for qvd_parser-0.2.1-cp313-cp313-win_amd64.whl:
Publisher:
publish.yml on nicolasstefaniuk/qvd-parser
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qvd_parser-0.2.1-cp313-cp313-win_amd64.whl -
Subject digest:
e0d30141c40529e9ee96efcf1a82e47800b2017db22eb49fe53113b483fabfb2 - Sigstore transparency entry: 2088762151
- Sigstore integration time:
-
Permalink:
nicolasstefaniuk/qvd-parser@7fd957f4f5928972f5dbc297e775334f84c08ddb -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/nicolasstefaniuk
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7fd957f4f5928972f5dbc297e775334f84c08ddb -
Trigger Event:
push
-
Statement type:
File details
Details for the file qvd_parser-0.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: qvd_parser-0.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 3.6 MB
- Tags: CPython 3.13, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
554447e82a4171c633712d2cfd31431e246f373540739ba76e3df50ba1815486
|
|
| MD5 |
0ca44a95117c87f8e6d76143fe5482da
|
|
| BLAKE2b-256 |
bd092540be0b0dded254cb3748cc052e9c2b4b1728c14e0c3aa7b87e66c340e3
|
Provenance
The following attestation bundles were made for qvd_parser-0.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
publish.yml on nicolasstefaniuk/qvd-parser
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qvd_parser-0.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
554447e82a4171c633712d2cfd31431e246f373540739ba76e3df50ba1815486 - Sigstore transparency entry: 2088763920
- Sigstore integration time:
-
Permalink:
nicolasstefaniuk/qvd-parser@7fd957f4f5928972f5dbc297e775334f84c08ddb -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/nicolasstefaniuk
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7fd957f4f5928972f5dbc297e775334f84c08ddb -
Trigger Event:
push
-
Statement type:
File details
Details for the file qvd_parser-0.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: qvd_parser-0.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 3.5 MB
- Tags: CPython 3.13, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b176758dff1e7830fed4d58d245a56aef104f08ce1bf71c648fd6cfb599cc7d6
|
|
| MD5 |
418815eb1a97e4b71da7da589692ed9f
|
|
| BLAKE2b-256 |
cc95ce391dbf161395e44953a2481cb228471a81ca377c0f80133a6a0fe4071c
|
Provenance
The following attestation bundles were made for qvd_parser-0.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
publish.yml on nicolasstefaniuk/qvd-parser
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qvd_parser-0.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
b176758dff1e7830fed4d58d245a56aef104f08ce1bf71c648fd6cfb599cc7d6 - Sigstore transparency entry: 2088759595
- Sigstore integration time:
-
Permalink:
nicolasstefaniuk/qvd-parser@7fd957f4f5928972f5dbc297e775334f84c08ddb -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/nicolasstefaniuk
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7fd957f4f5928972f5dbc297e775334f84c08ddb -
Trigger Event:
push
-
Statement type:
File details
Details for the file qvd_parser-0.2.1-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: qvd_parser-0.2.1-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 3.1 MB
- Tags: CPython 3.13, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
63070c12ae1f5fae7d90b48b985a357f44e51cd71e517fcd2e19b4d51f2024fd
|
|
| MD5 |
787f5a226cd9988cbb619a1b382a8300
|
|
| BLAKE2b-256 |
7708209642b280482c0425862db33429ce170857b477bade28ab83b7f18397be
|
Provenance
The following attestation bundles were made for qvd_parser-0.2.1-cp313-cp313-macosx_11_0_arm64.whl:
Publisher:
publish.yml on nicolasstefaniuk/qvd-parser
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qvd_parser-0.2.1-cp313-cp313-macosx_11_0_arm64.whl -
Subject digest:
63070c12ae1f5fae7d90b48b985a357f44e51cd71e517fcd2e19b4d51f2024fd - Sigstore transparency entry: 2088759998
- Sigstore integration time:
-
Permalink:
nicolasstefaniuk/qvd-parser@7fd957f4f5928972f5dbc297e775334f84c08ddb -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/nicolasstefaniuk
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7fd957f4f5928972f5dbc297e775334f84c08ddb -
Trigger Event:
push
-
Statement type:
File details
Details for the file qvd_parser-0.2.1-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: qvd_parser-0.2.1-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 3.1 MB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5a98321c52b3a485230d13b5a2d97f9b596f0bb3219f676f7f10140abb333201
|
|
| MD5 |
5641d49c34706096076be3f8620ac707
|
|
| BLAKE2b-256 |
d1acba1ae5aad2486851dd2720aa75488d40efeb8edc4032e0b51a69827382cd
|
Provenance
The following attestation bundles were made for qvd_parser-0.2.1-cp312-cp312-win_amd64.whl:
Publisher:
publish.yml on nicolasstefaniuk/qvd-parser
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qvd_parser-0.2.1-cp312-cp312-win_amd64.whl -
Subject digest:
5a98321c52b3a485230d13b5a2d97f9b596f0bb3219f676f7f10140abb333201 - Sigstore transparency entry: 2088763342
- Sigstore integration time:
-
Permalink:
nicolasstefaniuk/qvd-parser@7fd957f4f5928972f5dbc297e775334f84c08ddb -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/nicolasstefaniuk
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7fd957f4f5928972f5dbc297e775334f84c08ddb -
Trigger Event:
push
-
Statement type:
File details
Details for the file qvd_parser-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: qvd_parser-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 3.6 MB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
05ed30164f8d3d741a25fd02b839b14d376812ab0f4be30b03e54750d09cbe2b
|
|
| MD5 |
b92235e61e5284395fa271b43d0ac27c
|
|
| BLAKE2b-256 |
2d57edb70c9dd1b219247267a5937988aed02998ec83ceabf5afc878af6410e8
|
Provenance
The following attestation bundles were made for qvd_parser-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
publish.yml on nicolasstefaniuk/qvd-parser
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qvd_parser-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
05ed30164f8d3d741a25fd02b839b14d376812ab0f4be30b03e54750d09cbe2b - Sigstore transparency entry: 2088760900
- Sigstore integration time:
-
Permalink:
nicolasstefaniuk/qvd-parser@7fd957f4f5928972f5dbc297e775334f84c08ddb -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/nicolasstefaniuk
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7fd957f4f5928972f5dbc297e775334f84c08ddb -
Trigger Event:
push
-
Statement type:
File details
Details for the file qvd_parser-0.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: qvd_parser-0.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 3.5 MB
- Tags: CPython 3.12, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
db7e372d710cfe3cad948b08a2f92c42cad20945ac2d293879e44947d5f86147
|
|
| MD5 |
77480a2988e5205db185ae4aca9007ba
|
|
| BLAKE2b-256 |
972463cc54e1d2d7f2c245f02882411c4443592fda16fbd73c8c4196d316c08f
|
Provenance
The following attestation bundles were made for qvd_parser-0.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
publish.yml on nicolasstefaniuk/qvd-parser
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qvd_parser-0.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
db7e372d710cfe3cad948b08a2f92c42cad20945ac2d293879e44947d5f86147 - Sigstore transparency entry: 2088761326
- Sigstore integration time:
-
Permalink:
nicolasstefaniuk/qvd-parser@7fd957f4f5928972f5dbc297e775334f84c08ddb -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/nicolasstefaniuk
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7fd957f4f5928972f5dbc297e775334f84c08ddb -
Trigger Event:
push
-
Statement type:
File details
Details for the file qvd_parser-0.2.1-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: qvd_parser-0.2.1-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 3.1 MB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9cb0103cb664fea3d8eb122d7f7142bedab0c63505d6c1ab8b0dd3c3f538fecd
|
|
| MD5 |
f734aec77379ebc273952c224c073e31
|
|
| BLAKE2b-256 |
1a1e58f34994c8f69a1e9428965a46fcf398eacb9e5e3381158380dbc318c6aa
|
Provenance
The following attestation bundles were made for qvd_parser-0.2.1-cp312-cp312-macosx_11_0_arm64.whl:
Publisher:
publish.yml on nicolasstefaniuk/qvd-parser
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qvd_parser-0.2.1-cp312-cp312-macosx_11_0_arm64.whl -
Subject digest:
9cb0103cb664fea3d8eb122d7f7142bedab0c63505d6c1ab8b0dd3c3f538fecd - Sigstore transparency entry: 2088762730
- Sigstore integration time:
-
Permalink:
nicolasstefaniuk/qvd-parser@7fd957f4f5928972f5dbc297e775334f84c08ddb -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/nicolasstefaniuk
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7fd957f4f5928972f5dbc297e775334f84c08ddb -
Trigger Event:
push
-
Statement type:
File details
Details for the file qvd_parser-0.2.1-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: qvd_parser-0.2.1-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 3.1 MB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cf631d8a7fc0ff413e3c46e1dd65ec38c1e911547bfa7d1779dffdaf5542a0cb
|
|
| MD5 |
b162580ad5f57702a04dc68fcf668fc1
|
|
| BLAKE2b-256 |
f13b1a2f7957a7d40ace8f2066ca697a321ff27612265543bf24a09bf704d1d7
|
Provenance
The following attestation bundles were made for qvd_parser-0.2.1-cp311-cp311-win_amd64.whl:
Publisher:
publish.yml on nicolasstefaniuk/qvd-parser
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qvd_parser-0.2.1-cp311-cp311-win_amd64.whl -
Subject digest:
cf631d8a7fc0ff413e3c46e1dd65ec38c1e911547bfa7d1779dffdaf5542a0cb - Sigstore transparency entry: 2088763568
- Sigstore integration time:
-
Permalink:
nicolasstefaniuk/qvd-parser@7fd957f4f5928972f5dbc297e775334f84c08ddb -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/nicolasstefaniuk
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7fd957f4f5928972f5dbc297e775334f84c08ddb -
Trigger Event:
push
-
Statement type:
File details
Details for the file qvd_parser-0.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: qvd_parser-0.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 3.6 MB
- Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cab82b52c386fafd5a8b3e74cca133c99a6b2a3cbdc7ba1dcdda67cf51aecc2c
|
|
| MD5 |
b816255cbc33944d2537bbbc6d680b6d
|
|
| BLAKE2b-256 |
36e266a0897424e8568fa0b84f5cb72fc49c24d8da47b2d27bfd0d6ed7e00f6a
|
Provenance
The following attestation bundles were made for qvd_parser-0.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
publish.yml on nicolasstefaniuk/qvd-parser
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qvd_parser-0.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
cab82b52c386fafd5a8b3e74cca133c99a6b2a3cbdc7ba1dcdda67cf51aecc2c - Sigstore transparency entry: 2088759190
- Sigstore integration time:
-
Permalink:
nicolasstefaniuk/qvd-parser@7fd957f4f5928972f5dbc297e775334f84c08ddb -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/nicolasstefaniuk
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7fd957f4f5928972f5dbc297e775334f84c08ddb -
Trigger Event:
push
-
Statement type:
File details
Details for the file qvd_parser-0.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: qvd_parser-0.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 3.5 MB
- Tags: CPython 3.11, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
765a1e9b84bb519f85b48fd686de7ccd997866fc22103ccd2f1949eb551c9649
|
|
| MD5 |
df5e5d24b78db876e5cadfed47c9a161
|
|
| BLAKE2b-256 |
48b97ec5b96c789f489b08ab4bceea34f929fe1b9200b2cd698b75dd34ec3d6a
|
Provenance
The following attestation bundles were made for qvd_parser-0.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
publish.yml on nicolasstefaniuk/qvd-parser
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qvd_parser-0.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
765a1e9b84bb519f85b48fd686de7ccd997866fc22103ccd2f1949eb551c9649 - Sigstore transparency entry: 2088761713
- Sigstore integration time:
-
Permalink:
nicolasstefaniuk/qvd-parser@7fd957f4f5928972f5dbc297e775334f84c08ddb -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/nicolasstefaniuk
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7fd957f4f5928972f5dbc297e775334f84c08ddb -
Trigger Event:
push
-
Statement type:
File details
Details for the file qvd_parser-0.2.1-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: qvd_parser-0.2.1-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 3.1 MB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
be5ceea89108f6c72349c4a50b275523924ec00fbcf9b307e093946551691ea7
|
|
| MD5 |
1fd06cd2b2abc66ad56327e0fcca8813
|
|
| BLAKE2b-256 |
6d4d638d10d2b29f402ff76f7c3b1e231cc69bb7b3663346d9ae4452a28f8bd3
|
Provenance
The following attestation bundles were made for qvd_parser-0.2.1-cp311-cp311-macosx_11_0_arm64.whl:
Publisher:
publish.yml on nicolasstefaniuk/qvd-parser
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qvd_parser-0.2.1-cp311-cp311-macosx_11_0_arm64.whl -
Subject digest:
be5ceea89108f6c72349c4a50b275523924ec00fbcf9b307e093946551691ea7 - Sigstore transparency entry: 2088760609
- Sigstore integration time:
-
Permalink:
nicolasstefaniuk/qvd-parser@7fd957f4f5928972f5dbc297e775334f84c08ddb -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/nicolasstefaniuk
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7fd957f4f5928972f5dbc297e775334f84c08ddb -
Trigger Event:
push
-
Statement type: