Skip to main content

vexipy

Validate codecov OpenSSF Scorecard OpenSSF Best Practices CodeQL

py-vex logo

A Python implementation of the OpenVEX specification.

This library aims to provide a simple-to-use API for creating, validating, and modifying OpenVEX data.

Installing

python3 -m pip install vexipy

Example Usage

from vexipy import Component, Document, Statement, Vulnerability

vulnerability = Vulnerability(
    id="https://nvd.nist.gov/vuln/detail/CVE-2019-17571",
    name="CVE-2019-17571",
    description="The product deserializes untrusted data without sufficiently verifying that the resulting data will be valid.",
    aliases=[
        "GHSA-2qrg-x229-3v8q",
        "openSUSE-SU-2020:0051-1",
        "SNYK-RHEL7-LOG4J-1472071",
        "DSA-4686-1",
        "USN-4495",
        "DLA-2065-1",
    ],
)
print(vulnerability.to_json())

document = Document.from_json(
    """
    {
        "@context": "https://openvex.dev/ns/v0.2.0",
        "@id": "https://openvex.dev/docs/example/vex-9fb3463de1b57",
        "author": "Wolfi J Inkinson",
        "role": "Document Creator",
        "timestamp": "2023-01-08T18:02:03.647787998-06:00",
        "version": "1",
        "statements": [
            {
            "vulnerability": {
                "name": "CVE-2014-123456"
            },
            "products": [
                {"@id": "pkg:apk/distro/git@2.39.0-r1?arch=armv7"},
                {"@id": "pkg:apk/distro/git@2.39.0-r1?arch=x86_64"}
            ],
            "status": "fixed"
            }
        ]
    }
    """
)

statement = Statement(
    vulnerability=Vulnerability(name="CVE-2014-123456"),
    status="fixed",
)

component = Component(
    identifiers={"purl": "pkg:deb/debian/curl@7.50.3-1?arch=i386&distro=jessie"},
    hashes={"md5": "a2eec1a40a5315b1e2ff273aa747504b"},
)

statement = statement.update(products=[component])

document = document.append_statements(statement)

Contributing

We welcome contributions to this project! To contribute, please follow these guidelines:

How to Contribute

  1. Fork the repository - Create a fork of this repository to your GitHub account
  2. Create a feature branch - Make your changes in a new branch off of main
  3. Make your changes - Implement your feature or bug fix
  4. Submit a Pull Request - Open a PR from your fork's branch to our main branch

Requirements

Code Quality Standards

  • Tests must pass - All existing tests must continue to pass
  • Test coverage - New code is expected to include appropriate test coverage
  • PEP standards - Code must follow Python Enhancement Proposal (PEP) standards
  • Linting and formatting - Code must pass all linting and formatting checks

Development Tools

Before submitting a PR, please run the following tools locally:

# Format code
ruff format .

# Check for linting issues
ruff check .

# Sort imports
isort .

# Type checking
mypy .

These tools are enforced by CI and your PR will not be merged if any checks fail.

Signed-off-by Line

All commits must include a Signed-off-by line. This certifies that you have the right to submit the code under the project's license and agrees to the Developer Certificate of Origin (DCO).

To add a signed-off-by line to your commit, use the -s flag:

git commit -s -m "Your commit message"

This will automatically add a line like:

Signed-off-by: Your Name <your.email@example.com>

Pull Request Process

  • Ensure your PR has a clear title and description
  • Reference any related issues in your PR description
  • Make sure all commits in your PR include the signed-off-by line
  • Verify that all tests pass and code meets quality standards
  • Run all development tools locally before submitting
  • Be prepared to address feedback and make changes if requested

Questions?

If you have questions about contributing, please open an issue or reach out to the maintainers.

Metadata

Release files for vexipy 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for vexipy 0.3.0
File Size Uploaded Provenance
vexipy-0.3.0.tar.gz 406.9 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for vexipy 0.3.0
File Interpreter ABI Platform
vexipy-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 420.9 kB

Release files / vexipy-0.3.0.tar.gz

Download URL vexipy-0.3.0.tar.gz
Size 406.9 kB
Tags Source
SHA-256 checksum
How to use checksums
7594d02a3d452daa1f1de8943c2bb7973997f639f9f9cbcb1cee33e55bd51512
BLAKE2b-256 checksum
How to use checksums
7166192a72f33891812530d91dbad874ff0c51417a34b8cd78cc67eea366cb20
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 29, 2025.

Transparency log

Release files / vexipy-0.3.0-py3-none-any.whl

Download URL vexipy-0.3.0-py3-none-any.whl
Size 14.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6d97afbe16cf6d74561aa705f96f534da2467048799fdc6f7389a31adbb20dd6
BLAKE2b-256 checksum
How to use checksums
c374f241c98cf9234e022091eaf149f6b536bf601e6d855909a52bf2fe1b511f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 29, 2025.

Transparency log

Security for vexipy 0.3.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for vexipy-0.3.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 29, 2025.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page