Skip to main content

High-Performance Data Validation for Python

Project description

VLDT

VLDT: High-Performance Data Validation for Python

VLDT is an open-source Python library written in C++ that uses annotated dataclasses to create robust data models. It comes with built-in support for validation, parsing, and custom serialization/deserialization. Designed for scenarios where performance matters, VLDT streamlines data handling in Python applications without compromising on flexibility or correctness.


1. Key Features

  • Type Validation:
    Automatically checks that each field conforms to its expected type.

  • Custom Validators:

    • Field Validators: Run either before or after the main type validation, letting you adjust or verify individual field values.
    • Model Validators: Validate or transform the entire model, either prior to or after type checks.
    • Async Validators: Support asynchronous workflows via AsyncDataModel.
  • Parsing Capabilities:
    Easily convert Python dictionaries or JSON strings into validated models.

  • Field Aliasing:
    Define one or more alternate names for a field so that incoming data can use different keys.

  • Custom Serialization/Deserialization:
    Tailor how models are converted to and from dictionaries and JSON with a dedicated configuration system.

  • Performance:
    Thanks to its C++ implementation, VLDT delivers a significant speed boost in data parsing and validation.


2. Performance

VLDT is engineered for speed without sacrificing robust data validation. Our benchmarks focus on common operations—such as parsing, serialization, and list manipulation—where lower execution times indicate better performance.

Performance Comparison Chart Placeholder

In our tests, VLDT consistently demonstrated efficiency, especially in iterative operations like appending model objects to a list. While both libraries perform well in parsing and serialization tasks, VLDT's performance advantages make it well-suited for high-load or time-sensitive applications.

For those interested in reproducing these results, the complete load test script is available in the repository here.


3. Installation

Installing VLDT is simple. Use pip to install it:

pip install vldt

4. How to Use

This section explains how to build, validate, and serialize data models using VLDT. The examples include everyday scenarios such as user profile management, order processing, and handling configuration data.


4.1 Basic Model Instantiation

Define a model by subclassing DataModel and specifying type-annotated fields.

Example: User Profile

from vldt import DataModel

class UserProfile(DataModel):
    username: str
    email: str
    age: int

# Create a simple user profile.
profile = UserProfile(username="alice123", email="alice@example.com", age=28)
print(profile.username, profile.email, profile.age)  # Output: alice123 alice@example.com 28

4.2 Default Values

Assign default values so fields always have a value, even if not provided explicitly.

Example: Default Country in a User Profile

from vldt import DataModel

class UserProfile(DataModel):
    username: str
    email: str
    country: str = "USA"  # Defaults to "USA" if not provided.

profile = UserProfile(username="bob", email="bob@example.com")
print(profile.country)  # Output: USA

For optional fields, the default is typically set to None.

from vldt import DataModel
from typing import Optional

class UserProfile(DataModel):
    username: str
    phone: Optional[str]  # Optional phone number

profile = UserProfile(username="carol", phone=None)
print(profile.phone)  # Output: None

4.3 Advanced Field Options

VLDT’s Field function offers fine-grained control over field behavior, including dynamic defaults and alternative aliases.

4.3.1 Default Values with Field

Example: Order Status

from vldt import DataModel, Field

class Order(DataModel):
    order_id: int
    status: str = Field(default="pending")  # Defaults to "pending" if not specified.

order = Order(order_id=101)
print(order.status)  # Output: pending

order2 = Order(order_id=102, status="shipped")
print(order2.status)  # Output: shipped

4.3.2 Default Factories for Dynamic Defaults

For fields that require a fresh instance (like lists or dictionaries), use default_factory.

Example: Daily Log Entries

from vldt import DataModel, Field

class DailyLog(DataModel):
    date: str
    entries: list = Field(default_factory=list)  # Creates a new empty list for each instance.

log1 = DailyLog(date="2025-03-01")
log1.entries.append("User login")
print(log1.entries)  # Output: ['User login']

log2 = DailyLog(date="2025-03-02")
print(log2.entries)  # Output: []

Or use a factory for computed defaults:

from random import randint
from vldt import DataModel, Field

class Session(DataModel):
    session_id: int = Field(default_factory=lambda: randint(1000, 9999))

session1 = Session()
session2 = Session()
print(session1.session_id, session2.session_id)  # Likely different random IDs.

4.3.3 Field Aliasing

Allow and single and multiple alternative names for a field, making it easier to work with data from different sources.

Example: Configuring a System

from vldt import DataModel, Field

class SystemConfig(DataModel):
    timeout: int = Field(default=30, alias=["timeout_seconds", "t_timeout"])

# Input data might use different keys.
config = SystemConfig.from_dict({"t_timeout": 60})
print(config.timeout)  # Output: 60

Single aliases can be used as well:

from vldt import DataModel, Field

class SystemConfig(DataModel):
    timeout: int = Field(default=30, alias="timeout_seconds")
    
config = SystemConfig.from_dict({"timeout_seconds": 45})
print(config.timeout)  # Output: 45

4.3.4 Round-Trip Behavior

Converting a model to a dictionary and back retains the canonical field names and values.

Example: Product Data

from vldt import DataModel, Field

class Product(DataModel):
    id: int = Field(default=0)
    name: str = Field(default_factory=lambda: "Unknown")
    price: float = Field(default=0.0, alias="cost")

data = {"id": 12, "name": "Gadget", "cost": 19.99}
product = Product.from_dict(data)
# Converting back to a dict returns the standard field names.
print(product.to_dict())  # Expected: {"id": 12, "name": "Gadget", "price": 19.99}

4.4 Union Types and Nested Models

VLDT accommodates fields that accept multiple types and supports nested models, useful for representing real-world objects like addresses or orders.

Example: Order with Shipping Address

from typing import Union, List, Optional
from vldt import DataModel

class Address(DataModel):
    street: str
    zipcode: Union[int, str]
    country: str = "USA"

class Order(DataModel):
    order_id: int
    items: List[str]
    shipping_address: Optional[Address] = None

# Creating an order with a shipping address.
address = Address(street="123 Main St", zipcode=90210)
order = Order(order_id=1001, items=["book", "pen"], shipping_address=address)
print(order.shipping_address.zipcode)  # Output: 90210

4.5 Collection Types

VLDT can validate elements inside containers like lists and dictionaries, ensuring every element meets the defined type.

Example: Validating an Inventory List

from typing import List, Dict
from vldt import DataModel

class Inventory(DataModel):
    items: List[str]
    quantities: Dict[str, int]

inventory = Inventory(items=["apple", "banana"], quantities={"apple": 10, "banana": 5})

Or working with other containers:

from typing import Tuple, Set
from vldt import DataModel

class Metrics(DataModel):
    dimensions: Tuple[int, int]
    unique_values: Set[float]

metrics = Metrics(dimensions=(1920, 1080), unique_values={3.14, 2.718})

4.6 Custom Validators

Custom validators let you incorporate business logic into your model validation. They can adjust data before the main validation or check values afterward.

4.6.1 Synchronous Validators

Example: Validating User Age and Name Format

from vldt import DataModel, field_validator, model_validator, ValidatorMode

class User(DataModel):
    name: str
    age: int

    # Convert string age to int and enforce a minimum age.
    @field_validator(mode=ValidatorMode.BEFORE)
    @classmethod
    def validate_age(cls, age):
        if isinstance(age, str):
            if not age.isdigit():
                raise ValueError("Age must be a number")
            age = int(age)
        if age < 18:
            raise ValueError("User must be at least 18 years old")
        return age

    # Ensure the name is properly capitalized.
    @field_validator(mode=ValidatorMode.AFTER)
    @classmethod
    def format_name(cls, name):
        return name.capitalize()

    # Example of a model-level adjustment.
    @model_validator(mode=ValidatorMode.BEFORE)
    @classmethod
    def adjust_user(cls, data: dict):
        # For example, trim whitespace in the username.
        if "name" in data:
            data["name"] = data["name"].strip()
        return data

user = User(name="  john  ", age="25")
print(user.name, user.age)  # Output: John 25

4.6.2 Asynchronous Validators

For workflows involving asynchronous operations (like external API calls), VLDT provides async validators. In this case the AsyncDataModel class is used. Such models can be created using await. Example: Validating an Async User Registration

from vldt import AsyncDataModel, async_field_validator, async_model_validator, ValidatorMode
import asyncio

class AsyncUser(AsyncDataModel):
    name: str
    age: int

    @async_field_validator(mode=ValidatorMode.BEFORE)
    @classmethod
    async def check_age(cls, age):
        if isinstance(age, str):
            age = int(age)
        min_age = await get_minimum_age()  # Assume an async function to fetch the minimum age.
        if age < min_age:
            raise ValueError("User must be at least 18 years old")
        return age

    @async_field_validator(mode=ValidatorMode.AFTER)
    @classmethod
    async def check_name(cls, name):
        if await name_already_taken(name):  # Assume an async function to check if the name is taken.
            raise ValueError("Name already taken")
        return name

    @async_model_validator(mode=ValidatorMode.BEFORE)
    @classmethod
    async def adjust_user(cls, data: dict):
        is_correct = await check_user_data(data)  # Calling an async function.
        if not is_correct:
            raise ValueError("Invalid user data")
        return data

async def main():
    user = await AsyncUser(name="alice", age="30")  # await the model creation
    print(user.name, user.age)

asyncio.run(main())

4.7 Serialization and Deserialization

VLDT ensures that models can be accurately converted to dictionaries or JSON strings and then re-instantiated without loss of information. This round-trip conversion is essential for data storage, transmission, and integration with other systems. In addition to standard conversion, you can define custom rules for handling specific data types.

Dictionary Conversion

Convert a model to a dictionary using the to_dict method and re-instantiate it using from_dict.

Example: Converting a Customer Order

from vldt import DataModel

class Address(DataModel):
    street: str
    city: str
    postal_code: str

class CustomerOrder(DataModel):
    order_id: int
    customer: str
    address: Address
    notes: str

order_data = {
    "order_id": 5001,
    "customer": "Dana",
    "address": {"street": "456 Elm St", "city": "Metropolis", "postal_code": "54321"},
    "notes": "Leave package at the door.",
}

# Convert dictionary to model.
order_obj = CustomerOrder.from_dict(order_data)
# Serialize the model back to a dictionary.
order_dict = order_obj.to_dict()
print("Dictionary Conversion:", order_dict)

JSON Conversion

VLDT also provides built-in methods for converting models to JSON strings and back, useful for API communication or configuration storage.

Example: Converting a Customer Order to JSON and Back

import json
from vldt import DataModel

class Address(DataModel):
    street: str
    city: str
    postal_code: str

class CustomerOrder(DataModel):
    order_id: int
    customer: str
    address: Address
    notes: str

order_data = {
    "order_id": 5001,
    "customer": "Dana",
    "address": {"street": "456 Elm St", "city": "Metropolis", "postal_code": "54321"},
    "notes": "Leave package at the door.",
}

# Convert dictionary to model.
order_obj = CustomerOrder.from_dict(order_data)
# Serialize the model to a JSON string.
json_str = order_obj.to_json()
print("Serialized JSON:", json_str)

# Deserialize the JSON string back to a model.
order_obj2 = CustomerOrder.from_json(json_str)
print("Round-Trip JSON:", json.loads(order_obj2.to_json()))

Custom Serialization and Deserialization

The Config class in VLDT provides a way to customize how data is serialized and deserialized. By defining a Config instance within a DataModel, you can control how specific data types are transformed when converting models to and from dictionaries or JSON.

Understanding the Config Class

The Config class allows you to specify:

  • Custom serialization rules: Define how certain data types should be converted to dictionaries or JSON.
  • Custom deserialization rules: Specify how incoming data should be transformed back into the appropriate Python objects.

To apply custom serialization and deserialization behavior, a Config instance is assigned to the __vldt_config__ attribute within a DataModel.


Example 1: Custom DateTime Handling

By default, datetime objects may not serialize into JSON-friendly formats. With Config, we can ensure they are stored as ISO-formatted strings and correctly parsed back when deserializing.

from datetime import datetime
from vldt import DataModel, Config

def serialize_datetime(dt: datetime) -> str:
    return dt.isoformat()

def deserialize_datetime(value: str) -> datetime:
    return datetime.fromisoformat(value)

class Event(DataModel):
    name: str
    start_time: datetime

    __vldt_config__ = Config(
        dict_serializer={datetime: serialize_datetime},
        json_serializer={datetime: serialize_datetime},
        deserializer={
            datetime: {
                str: deserialize_datetime,
            }
        }
    )

event = Event(name="Conference", start_time=datetime(2025, 3, 15, 9, 0))
print("Serialized Event Dict:", event.to_dict())
json_str_event = event.to_json()
print("Serialized Event JSON:", json_str_event)

# Deserialize the JSON string back to an Event model.
event2 = Event.from_json(json_str_event)
print("Deserialized Event:", event2.name, event2.start_time)

Explanation:

  • The serialize_datetime function converts a datetime object to an ISO 8601 string.
  • The deserialize_datetime function converts the string back into a datetime object.
  • The Config class is used to ensure this transformation is applied whenever the model is serialized or deserialized.

Example 2: Custom Currency Formatting

In financial applications, floating-point numbers are often displayed as formatted currency strings. The following example demonstrates how to format a float as a currency string when serializing and convert it back when deserializing.

from vldt import DataModel, Config

def serialize_currency(amount: float) -> str:
    return f"${amount:,.2f}"

def deserialize_currency(value: str) -> float:
    return float(value.replace("$", "").replace(",", ""))

class Invoice(DataModel):
    invoice_number: int
    total: float

    __vldt_config__ = Config(
        dict_serializer={float: serialize_currency},
        json_serializer={float: serialize_currency},
        deserializer={
            float: {
                str: deserialize_currency,
            }
        }
    )

invoice = Invoice(invoice_number=2025, total=1234.56)
print("Serialized Invoice Dict:", invoice.to_dict())
json_invoice = invoice.to_json()
print("Serialized Invoice JSON:", json_invoice)

# Deserialize the JSON back to an Invoice model.
invoice2 = Invoice.from_json(json_invoice)
print("Deserialized Invoice:", invoice2.invoice_number, invoice2.total)

Explanation:

  • The serialize_currency function converts a float into a formatted string with a dollar sign and comma separators.
  • The deserialize_currency function reverses this transformation to extract a float value.
  • The Config class ensures that these transformations happen automatically whenever the model is serialized or deserialized.

4.8 Advanced Examples: Deeply Nested Structures and Complex Models

VLDT is capable of handling deeply nested data and complex models, which is common in real-world applications like configuration files or comprehensive business data.

Example: Inventory Management System

from typing import List, Dict, Union
from vldt import DataModel

class Warehouse(DataModel):
    name: str
    location: str

class InventoryItem(DataModel):
    sku: str
    quantity: int

class Inventory(DataModel):
    warehouses: Dict[str, Warehouse]
    items: List[InventoryItem]

inventory_data = {
    "warehouses": {
        "WH1": {"name": "Main Warehouse", "location": "New York"},
        "WH2": {"name": "Secondary Warehouse", "location": "Los Angeles"}
    },
    "items": [
        {"sku": "A123", "quantity": 100},
        {"sku": "B456", "quantity": 200}
    ]
}

inventory = Inventory.from_dict(inventory_data)
print(inventory.warehouses["WH2"].location)  # Output: Los Angeles

Example: Complex Model with Class Variables

from typing import ClassVar, List, Dict, Any, Optional
from vldt import DataModel

class ComplexModel(DataModel):
    MAX_ITEMS: ClassVar[int] = 100  # Example constant for business rules.
    TIMEOUT: ClassVar[float] = 5.0

    id: int
    metadata: Dict[str, Any]
    products: List[dict]  # Assume a product is represented as a dictionary.
    address: Optional[dict] = None
    history: List[int] = []

complex_obj = ComplexModel(
    id=1,
    metadata={"version": 1.0},
    products=[{"id": 1, "name": "Widget", "price": 9.99}],
    address={"street": "123 Main St", "zipcode": 90210}
)

Dependencies

VLDT uses rapidjson for JSON serialization and deserialization. The library is included as a submodule in the repository.

Minimal Python version is 3.11

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vldt-0.1.1.tar.gz (204.8 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

vldt-0.1.1-cp313-cp313-win_amd64.whl (89.6 kB view details)

Uploaded CPython 3.13Windows x86-64

vldt-0.1.1-cp313-cp313-win32.whl (85.3 kB view details)

Uploaded CPython 3.13Windows x86

vldt-0.1.1-cp313-cp313-musllinux_1_2_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

vldt-0.1.1-cp313-cp313-musllinux_1_2_i686.whl (1.9 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ i686

vldt-0.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (856.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

vldt-0.1.1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl (844.3 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ i686

vldt-0.1.1-cp313-cp313-macosx_11_0_arm64.whl (93.4 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

vldt-0.1.1-cp313-cp313-macosx_10_13_x86_64.whl (94.9 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

vldt-0.1.1-cp313-cp313-macosx_10_13_universal2.whl (147.8 kB view details)

Uploaded CPython 3.13macOS 10.13+ universal2 (ARM64, x86-64)

vldt-0.1.1-cp312-cp312-win_amd64.whl (89.6 kB view details)

Uploaded CPython 3.12Windows x86-64

vldt-0.1.1-cp312-cp312-win32.whl (85.3 kB view details)

Uploaded CPython 3.12Windows x86

vldt-0.1.1-cp312-cp312-musllinux_1_2_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

vldt-0.1.1-cp312-cp312-musllinux_1_2_i686.whl (1.9 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ i686

vldt-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (853.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

vldt-0.1.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (842.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ i686

vldt-0.1.1-cp312-cp312-macosx_11_0_arm64.whl (93.4 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

vldt-0.1.1-cp312-cp312-macosx_10_13_x86_64.whl (94.9 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

vldt-0.1.1-cp312-cp312-macosx_10_13_universal2.whl (147.8 kB view details)

Uploaded CPython 3.12macOS 10.13+ universal2 (ARM64, x86-64)

vldt-0.1.1-cp311-cp311-win_amd64.whl (89.3 kB view details)

Uploaded CPython 3.11Windows x86-64

vldt-0.1.1-cp311-cp311-win32.whl (84.6 kB view details)

Uploaded CPython 3.11Windows x86

vldt-0.1.1-cp311-cp311-musllinux_1_2_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

vldt-0.1.1-cp311-cp311-musllinux_1_2_i686.whl (1.9 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ i686

vldt-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (850.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

vldt-0.1.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (840.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ i686

vldt-0.1.1-cp311-cp311-macosx_11_0_arm64.whl (92.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

vldt-0.1.1-cp311-cp311-macosx_10_9_x86_64.whl (94.6 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

vldt-0.1.1-cp311-cp311-macosx_10_9_universal2.whl (147.0 kB view details)

Uploaded CPython 3.11macOS 10.9+ universal2 (ARM64, x86-64)

File details

Details for the file vldt-0.1.1.tar.gz.

File metadata

  • Download URL: vldt-0.1.1.tar.gz
  • Upload date:
  • Size: 204.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for vldt-0.1.1.tar.gz
Algorithm Hash digest
SHA256 7ae35c858a40b1f975b7a400cb171e8d83b9aad8b76cbf813830e40ddb72a6e6
MD5 b3b8a1148d081cb0836b932b88bd8745
BLAKE2b-256 abd0710ad27b6d3e200b74554bb854657434d5be87709d3445c0255d2d7c1c8a

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.1.tar.gz:

Publisher: build_and_publish.yaml on roman-right/vldt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vldt-0.1.1-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: vldt-0.1.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 89.6 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for vldt-0.1.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 cbc4bee4dbe30b02709bb4bc029cad80d62a23c1e3deac17ca6eead85e30e11d
MD5 c1d62f1f808b8fb915c6ee0195ba309f
BLAKE2b-256 aac2d567ffbcd2deaf6ca6bb8432bb021a30e16e60a5930c0c6030648eda5aa4

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.1-cp313-cp313-win_amd64.whl:

Publisher: build_and_publish.yaml on roman-right/vldt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vldt-0.1.1-cp313-cp313-win32.whl.

File metadata

  • Download URL: vldt-0.1.1-cp313-cp313-win32.whl
  • Upload date:
  • Size: 85.3 kB
  • Tags: CPython 3.13, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for vldt-0.1.1-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 ce043e2be0bb89eeccb8e18fe7df48754c99bba51077c97c52a0f0243fbca62d
MD5 cc0d07157b92cfc9bf03ef65cdf15903
BLAKE2b-256 6828743240e07d05f8a2a46050e1f461681959970fed854944255d6508899747

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.1-cp313-cp313-win32.whl:

Publisher: build_and_publish.yaml on roman-right/vldt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vldt-0.1.1-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for vldt-0.1.1-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 fbd975d360bf7ec531742f9ea263d1bd04a1ea25a77bdbf14320bc5f22159274
MD5 84fd289970874dc1b31a1d10c652b968
BLAKE2b-256 af4551e45bdc73249e89812489fe8afb2183ad6db451d30862997dd42091729a

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.1-cp313-cp313-musllinux_1_2_x86_64.whl:

Publisher: build_and_publish.yaml on roman-right/vldt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vldt-0.1.1-cp313-cp313-musllinux_1_2_i686.whl.

File metadata

  • Download URL: vldt-0.1.1-cp313-cp313-musllinux_1_2_i686.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.13, musllinux: musl 1.2+ i686
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for vldt-0.1.1-cp313-cp313-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 5d19e297577576fbc957bb3ced6864a78d6ad7b048538c584415b77e0d4ffd77
MD5 08acac53f9ecd321893561dde5e0ff49
BLAKE2b-256 afb7001841333ed576c18b2dd5d70c06e9a7713daa070175285e6183a2f64d7c

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.1-cp313-cp313-musllinux_1_2_i686.whl:

Publisher: build_and_publish.yaml on roman-right/vldt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vldt-0.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for vldt-0.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fcc66197fee686b97d0efa975204bf5a66cf782582284bf5a1cab1b9cdd36a81
MD5 29335ec7705446a7d35d67cd4461be1f
BLAKE2b-256 1a33fbcaa296d02386d5429d40b0163ed53f4f76725e9d9c2d9cfc7f4b03f85b

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: build_and_publish.yaml on roman-right/vldt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vldt-0.1.1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for vldt-0.1.1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 33562cbb743fe39e45d5ee91db3f84f7c8e286d298cbfea3ecaaee0a554aec3c
MD5 b4d323f44f255e1388989361dab23494
BLAKE2b-256 86aea9809f2070d4066858e5d8c2758613d5541344aa6c1fc5dc7c891d66f757

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: build_and_publish.yaml on roman-right/vldt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vldt-0.1.1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vldt-0.1.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d00756d02e037d562b2bdcec11cfb1d5d58ee3297517060f6bdb32bb9c7f25db
MD5 f2d19164af92c91d2ef5a68f8686e20a
BLAKE2b-256 ca7fc35015e28412bd5e878788f4ea4ef01bc71a78ca91d1eebf613696e43284

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.1-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: build_and_publish.yaml on roman-right/vldt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vldt-0.1.1-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for vldt-0.1.1-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 64ac727e1ded09dff6ac176f2407570f2f2581d0bae3ab631113dbabd33d4a83
MD5 eb74a6bf1b69b925558bf67291192a5c
BLAKE2b-256 44d3dbc327e9e74df519c16f9625a21db997cbf355a6143bc31059aa89024463

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.1-cp313-cp313-macosx_10_13_x86_64.whl:

Publisher: build_and_publish.yaml on roman-right/vldt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vldt-0.1.1-cp313-cp313-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for vldt-0.1.1-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 2842057f63af254ba42d01b33fcd4e002d89b3a50e3bfaa6fbae4b95f139c987
MD5 b6b1d884aade176181e0690e1064aac1
BLAKE2b-256 2f7d8326a77715ddf35038ffb392f13374639c6de7adc5150db5a19241f912b4

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.1-cp313-cp313-macosx_10_13_universal2.whl:

Publisher: build_and_publish.yaml on roman-right/vldt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vldt-0.1.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: vldt-0.1.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 89.6 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for vldt-0.1.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 d75e67284d6f9f5cb8c1e7661da1677d7a432d0b50ab6d56db3b06a650aa7ed3
MD5 f2fa929af462e86e11bc63cc205e2225
BLAKE2b-256 ba0cb5dcc6f9a57d9618370fc485cbd0b9984ae5f36816011dd3de3d0b1ca0f3

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.1-cp312-cp312-win_amd64.whl:

Publisher: build_and_publish.yaml on roman-right/vldt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vldt-0.1.1-cp312-cp312-win32.whl.

File metadata

  • Download URL: vldt-0.1.1-cp312-cp312-win32.whl
  • Upload date:
  • Size: 85.3 kB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for vldt-0.1.1-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 e15da1c68f85a1fc1b10e212332d85a291bb501b4e2d8696352198631bdd2c4a
MD5 c9f4f6ec5b9c82b0ef51cde1da0ebfef
BLAKE2b-256 bcf98c2d879f6b9f172731620448c9ffec4c3c948ee334298b9a2ae5f4628c12

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.1-cp312-cp312-win32.whl:

Publisher: build_and_publish.yaml on roman-right/vldt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vldt-0.1.1-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for vldt-0.1.1-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0b022f48749482db1e81b09778d8fcfa26bc45d240bbbc59067264a5b795c48d
MD5 e0cd510cce0afe5f62b9cb3685efc576
BLAKE2b-256 5956a639ab45ef085e0a0c9087f21df607a4276ad2d572c1a7a6ad0126a1e52c

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.1-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: build_and_publish.yaml on roman-right/vldt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vldt-0.1.1-cp312-cp312-musllinux_1_2_i686.whl.

File metadata

  • Download URL: vldt-0.1.1-cp312-cp312-musllinux_1_2_i686.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.12, musllinux: musl 1.2+ i686
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for vldt-0.1.1-cp312-cp312-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 38f85d7b3a41ce086f5d715d5d7d640d33dfda6e932c400847e88ca55335c966
MD5 73d79fd3792ec2fa4932c961bc0835d6
BLAKE2b-256 029af61ca56f3065f9fb808649ebe22e085b31cfd957b6319f0cfa7a61f28b62

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.1-cp312-cp312-musllinux_1_2_i686.whl:

Publisher: build_and_publish.yaml on roman-right/vldt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vldt-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for vldt-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 587d823783107a7578bff4d003575fb6e63fc1e3fbeebcb41807740d3246412e
MD5 f2a2a31ab800dace21e64e8ef838a9d0
BLAKE2b-256 01e69dff2de17967271e52c838bdae52b82c7dd99f66f21667825e6fdf0390e3

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: build_and_publish.yaml on roman-right/vldt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vldt-0.1.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for vldt-0.1.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 ea1bd4d94aadf9023a1860528469e3d6ed85b639ca013ca2f5102e1aec050b11
MD5 c17c449ba364628e3d27356e41ae1c17
BLAKE2b-256 dee5d928eb10a63aeabf92b3f2b702405ea1359793c106602be6f6c41dec5371

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: build_and_publish.yaml on roman-right/vldt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vldt-0.1.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vldt-0.1.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 59a5fc39a95691e328fce05d80cddfcf159c1fb5af97bb477a832b149521cbce
MD5 e2d95e31be5c3a5803cd48d0abadfd5f
BLAKE2b-256 16a6c56836dc5a8d1ba2eba78a1d039e96cd69f3f68c42c4f46ea47c85b23bba

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.1-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: build_and_publish.yaml on roman-right/vldt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vldt-0.1.1-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for vldt-0.1.1-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 ef0eb4882f2ee835c70de9b33ef45d913e5ecba4e411ddecbe779273611dcbb5
MD5 c21fe9653c1ffa3b63cea7ccfa0aa8c7
BLAKE2b-256 f2f2dc732a6e37900b7739da466e472e39717c7b1b576b3d25fa69196ca12fc2

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.1-cp312-cp312-macosx_10_13_x86_64.whl:

Publisher: build_and_publish.yaml on roman-right/vldt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vldt-0.1.1-cp312-cp312-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for vldt-0.1.1-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 5d2d23729feb37664d04557fa8f51196b281c0fb140c85fb51ada29729b08723
MD5 e53bc252b464cb1a0a7ad8cbfba0584b
BLAKE2b-256 74d28d5a68fe8aaf792c2d0c996d3d286fb72c1d8ba71c84dbf8ba1045481f1e

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.1-cp312-cp312-macosx_10_13_universal2.whl:

Publisher: build_and_publish.yaml on roman-right/vldt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vldt-0.1.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: vldt-0.1.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 89.3 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for vldt-0.1.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 06935d201d6d18957d0548adb0b801e693ff06e747883af64b4d1bf5fdb34b00
MD5 ad1cdad24c800fca1d5e804862c89b0d
BLAKE2b-256 63d1e122be3da5d93389497c1fa689014e831eff4ac47d74a4f024bade1a905d

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.1-cp311-cp311-win_amd64.whl:

Publisher: build_and_publish.yaml on roman-right/vldt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vldt-0.1.1-cp311-cp311-win32.whl.

File metadata

  • Download URL: vldt-0.1.1-cp311-cp311-win32.whl
  • Upload date:
  • Size: 84.6 kB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for vldt-0.1.1-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 0719c3cb73879f75defac4b7eaa995bc796d64df89ce55e40f89c43e643aaa78
MD5 9cabec9c355f1759eeab727f5b4053c3
BLAKE2b-256 b98bbfe143c423714174161cead0392a5007bbc6523d851cad55303aac781e00

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.1-cp311-cp311-win32.whl:

Publisher: build_and_publish.yaml on roman-right/vldt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vldt-0.1.1-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for vldt-0.1.1-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 fd8e0a40bde214d8a39da687c7984d21a6d6b42fc70168bdce3359ca51c55ed4
MD5 1997e454a3badb89ccf891f1ae6c327f
BLAKE2b-256 93f2d77306008f5b41dd964cdfdf9c4034e63e19866c1d2e3d1c754995f55437

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.1-cp311-cp311-musllinux_1_2_x86_64.whl:

Publisher: build_and_publish.yaml on roman-right/vldt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vldt-0.1.1-cp311-cp311-musllinux_1_2_i686.whl.

File metadata

  • Download URL: vldt-0.1.1-cp311-cp311-musllinux_1_2_i686.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.11, musllinux: musl 1.2+ i686
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for vldt-0.1.1-cp311-cp311-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 41c5271daf39a4b1685c0a9098948dabff5dab59d390ab991ce75a2e3bb3408d
MD5 6ea3f06c7ec87833023ca88e24227c02
BLAKE2b-256 ca0f298d09d5c03f363801792f32769ec51ce0cfe067aeb5c146c47b5f6966c2

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.1-cp311-cp311-musllinux_1_2_i686.whl:

Publisher: build_and_publish.yaml on roman-right/vldt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vldt-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for vldt-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d4c9b13b30e8a3c96571b08191e8a47c36dd63792d410743793dada26cdd298e
MD5 46aa85f1dcd15d6e79d495034e02af24
BLAKE2b-256 b3f6571afcee73091d0ec3084e2d536281b5d8ec32738e2d4c13d3f338d17846

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: build_and_publish.yaml on roman-right/vldt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vldt-0.1.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for vldt-0.1.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 29e69596e2f002c6e8afb52a3d6895358c5a0dd626ea21b516050cd3eb8cc36b
MD5 ef6e9337457647c6ac0a505f2e951789
BLAKE2b-256 ade8ca2e0c0608ade18d764486d44f63912e911ec141e290b017d4d2a1bcd69f

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: build_and_publish.yaml on roman-right/vldt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vldt-0.1.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vldt-0.1.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1e8749a767bc8d803a5ae35fc6bbcf7de69359a69c58dc2c8b144b60f4b8f0f9
MD5 4c8103e768ce89c7c8fe4674b8541dee
BLAKE2b-256 89b529809c4aefc371cf7621eba891d443cfe6f481b6fbc98703aed3c8f872ca

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.1-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: build_and_publish.yaml on roman-right/vldt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vldt-0.1.1-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for vldt-0.1.1-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 994faf24c30bfd281c3c4b0c1e13fa02d6a8ac23a4ce3eea191eb0d5e9d0eb9c
MD5 fb5e2eb09a82c75dde3622e4d5fa127c
BLAKE2b-256 46861aefc7cd17ca3859bcb4c15475afd8620b215d0e28565b0c0b200c0432b8

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.1-cp311-cp311-macosx_10_9_x86_64.whl:

Publisher: build_and_publish.yaml on roman-right/vldt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vldt-0.1.1-cp311-cp311-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for vldt-0.1.1-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 87dfb2015940870e314365d2874a7679da30e81df52081f690836555e806ae2e
MD5 8c582d74ceb2060c734316dcb255b2ad
BLAKE2b-256 5b32fb80fdbc4ba891f3fa75771a9e38f43a0a3142143408b74e4f3d2129bf05

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.1-cp311-cp311-macosx_10_9_universal2.whl:

Publisher: build_and_publish.yaml on roman-right/vldt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page