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.0.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.0-cp313-cp313-win_amd64.whl (89.7 kB view details)

Uploaded CPython 3.13Windows x86-64

vldt-0.1.0-cp313-cp313-win32.whl (85.4 kB view details)

Uploaded CPython 3.13Windows x86

vldt-0.1.0-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.0-cp313-cp313-musllinux_1_2_i686.whl (1.9 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ i686

vldt-0.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (856.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

vldt-0.1.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl (845.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ i686

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

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.13macOS 10.13+ x86-64

vldt-0.1.0-cp313-cp313-macosx_10_13_universal2.whl (148.0 kB view details)

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

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12Windows x86

vldt-0.1.0-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.0-cp312-cp312-musllinux_1_2_i686.whl (1.9 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ i686

vldt-0.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (854.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

vldt-0.1.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (842.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ i686

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

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.12macOS 10.13+ x86-64

vldt-0.1.0-cp312-cp312-macosx_10_13_universal2.whl (148.0 kB view details)

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

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.11Windows x86

vldt-0.1.0-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.0-cp311-cp311-musllinux_1_2_i686.whl (1.9 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ i686

vldt-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (850.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

vldt-0.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (840.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ i686

vldt-0.1.0-cp311-cp311-macosx_11_0_arm64.whl (93.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.11macOS 10.9+ x86-64

vldt-0.1.0-cp311-cp311-macosx_10_9_universal2.whl (147.1 kB view details)

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

File details

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

File metadata

  • Download URL: vldt-0.1.0.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.0.tar.gz
Algorithm Hash digest
SHA256 84af92bc1b4d1bf96f9e8430403a42bf5685be7ec39eed4771c2ac149c449af3
MD5 1af1c4d72783947d0c01b41f21734488
BLAKE2b-256 9bcb350528e94c1c9c43844b3211eca478bb69f10bed10b15b82d222064469ae

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.0.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.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: vldt-0.1.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 89.7 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.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 220851099df1bb4f746d1dba431ec9cc26b7fd95b2a4dc666dfabc174745d93f
MD5 9181a82e725a72efbd99dfd7d986d7b0
BLAKE2b-256 7b3b1e1a52481f9ae6de8d615c00ffa196a3953c24eca209483cf71393603b49

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.0-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.0-cp313-cp313-win32.whl.

File metadata

  • Download URL: vldt-0.1.0-cp313-cp313-win32.whl
  • Upload date:
  • Size: 85.4 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.0-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 80b76149cf66c373cceed16ac5bfc7a2eb328299fcafefa54f382398f1673ddc
MD5 dc93f7a275d9ba2b054428e5eb7820d7
BLAKE2b-256 d719c8042c69e96b789d32006238434dd48f4e478cfed824a55d9ef9285010e6

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.0-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.0-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for vldt-0.1.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0fc6b5f940a8a65ae995dcfd059aa014a2b76b1368c17df7e21fe56224a3cf98
MD5 ab57d54f9a4df31b41863603b0585a9f
BLAKE2b-256 72e5cd0d52ef9e79004500ed48614203ace8237e40b9fc7a1e4f7c7536949f3f

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.0-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.0-cp313-cp313-musllinux_1_2_i686.whl.

File metadata

  • Download URL: vldt-0.1.0-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.0-cp313-cp313-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 8a73add2c82211b6f6fdc2333767392ebcb5b324b584053d5c55f70230071d5e
MD5 1e4ea0114aec871a19cf66cdf8ae8ee8
BLAKE2b-256 39d859c5193432d34bb16883582f64ecc0e9abaacda81b18c816da96ce7f9973

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.0-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.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for vldt-0.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 13a142149cde5daf27606746eafe0345fa955a196ea66d1d51fb2c5d8736abc5
MD5 5ccfa11bec9fbe58bdb465a555317fc3
BLAKE2b-256 537dc1cbc4025c3ba83263ef8e4d62a804b4eeb900f4185fff0edc1e5e615da4

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.0-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.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for vldt-0.1.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 87329dd8031f5152f32c2c964ddbcb17297a4a565a7f095f5dcbcced9cfc4c81
MD5 62a1bc9473ad85b370ed9be570374cea
BLAKE2b-256 d478b501ceca93090a3ae35b41adb3191cde42c641e4192d50ff1f1ef0405517

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.0-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.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vldt-0.1.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a954021f3e57a0f7a1c6b68f10568cb26b921f827843d1e2833b58f589bb5ae6
MD5 b6f96674c3fb84f4016c20b3db9e2f9b
BLAKE2b-256 1c692ef58fa2fd1f006f2013e2684c1e86948b136bc31dc86e6f4a51e027cc61

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.0-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.0-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for vldt-0.1.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 4f14e3d43ba748866a630341d255bccd1d44db9ccb3cad4a3af91cc530e21273
MD5 cb8a16ac6732e73a03e126b82cec2ff1
BLAKE2b-256 a0a65ded7c79b6ac433fdf85288200e7b32af7d8fece3338c48f59945bb4df83

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.0-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.0-cp313-cp313-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for vldt-0.1.0-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 3947307c29d4adf460625c88ab82a1b0aeb7b2ba7b9c155230662a7b695ecaa5
MD5 5f8dbd774de8837bf4db4906f57a2296
BLAKE2b-256 389aeec36cd3686e62ba20a19d9dcf05792e193e1a7ac499cb6b6c2e721ba950

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.0-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.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: vldt-0.1.0-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.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 632171baa83cce4801c09fc1fc2cc0a5a12cac2131f5e8b34129fb700698b71e
MD5 8f3c8aa678c88518bda4b03e67d22341
BLAKE2b-256 a0dfbf49b9247fee1e38e60f9b788865277c33c6b63617f0bf4ac9ac10ff8e7c

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.0-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.0-cp312-cp312-win32.whl.

File metadata

  • Download URL: vldt-0.1.0-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.0-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 e3c50b58437a654bcb333eec3f74985803c53262c7f62bc40e51f01d3b1a227a
MD5 c0ceb6ddc04c802fd1d6fbc51341f8a3
BLAKE2b-256 6ce04dc7a4dbc3eb6a367f72b24f78d7b6d6732036cf00cb691a14d5de80d7bf

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.0-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.0-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for vldt-0.1.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 78958169f6ebcfa259ff174be10b17bf8a156c40fb1019e5405339afa6c98bc4
MD5 c8abdca2a200e9410a3960e796981016
BLAKE2b-256 76031e29e902685d851c37a61f829c8bc94e82ac419df42bb0454a81ca5eddcb

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.0-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.0-cp312-cp312-musllinux_1_2_i686.whl.

File metadata

  • Download URL: vldt-0.1.0-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.0-cp312-cp312-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 6a0061c5917491be57e0c9652d240b48bba0089873752ef5eab98011c818d1b1
MD5 6c3aafe7295fab23ed86796e622bfe4c
BLAKE2b-256 bc88e849b3ca09fa004c789486df62c96475cc702dc379c31375556ddfc1a014

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.0-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.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for vldt-0.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bf361777f6e859cf8fe63a5ac0182b36c3c713523c7cf7b10dd08c40b7458d18
MD5 d04a150184158d12f381d54c1ec8ff19
BLAKE2b-256 d49e5b5079345c48da4ca1cfdde2abcb1af34996169dadc3a5162568ce3a9460

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.0-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.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for vldt-0.1.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 977d4b39454b29c996ff5b3ea9eda71fc9682390f618d75797d2e77ae071fdf5
MD5 f7cf2343807a2a4fd63f703d593707d2
BLAKE2b-256 79a359145411ced49984b1d9cfff8558111068b9ff86205fa6a6af04259e751e

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.0-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.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vldt-0.1.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9a233176274b31af1209fadb29b9036f639e81bd3aa5beb0a46837444d9164fe
MD5 2bc527797fc0651dd4d9b39a195ed53e
BLAKE2b-256 a458ebba8009601ca4905da9f5ff347e1c0802f052d58c38e4e43010908395c7

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.0-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.0-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for vldt-0.1.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 1c09b01ee6206ac8f1abe6fcadc06c96ef91afb4252d85e3f7d80645111b45cc
MD5 45a173cf28cd7f3c8ac5fcd6776c141f
BLAKE2b-256 f274240c09cc629424a2c6fcc1cbfcaab14ab8fbb4fd609cc4eaec3d46df1b46

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.0-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.0-cp312-cp312-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for vldt-0.1.0-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 f95ef4aa2bad75f89a4e212b0ede25f43a14d6b27d25399117790f865fa81fed
MD5 5f55df6d7b274fe83c2ba06ba4514e46
BLAKE2b-256 07aa51e584efdc1d4c6ce1de8022f20cfc8846339df67c47eb344e85a121470a

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.0-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.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: vldt-0.1.0-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.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 a15f1a9bc207246e4374700a816787cb734a94f5e314dcfcc75885a9bb4a8ab4
MD5 093c5ffd9a8e9b0902144862084ea74d
BLAKE2b-256 26f6ef1526b77bd74272a2524ede9bb089e2204519eebca9c56ba45d2f35c84f

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.0-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.0-cp311-cp311-win32.whl.

File metadata

  • Download URL: vldt-0.1.0-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.0-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 7cd44f5ad1ff7f60f993fef4f1c48deb849a5d36b1bd9075e23cd42d9e329f0a
MD5 4f1c59698d04a2cf5d0bef71999bdaae
BLAKE2b-256 427dd1fba55773654132df8f02ea6949081ddf80f0fcf6ec1fc3cfae3a37f71d

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.0-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.0-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for vldt-0.1.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e3b3873364e66618d23522c1c6f0d0b13f56dfa8b21ac1b394fb7566b3448ad0
MD5 1f38b2b72627e07c584c2fd8e42ca90a
BLAKE2b-256 cb04d3451c2814005d310f98ec4e362c78da1f8702c32d70b19508b81c15bc91

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.0-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.0-cp311-cp311-musllinux_1_2_i686.whl.

File metadata

  • Download URL: vldt-0.1.0-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.0-cp311-cp311-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 eb690b4978bc5d96d4ddf63144fed783614875aba826c300b2d7588e2eb8a5cc
MD5 b8de58ab541186dfb034f6f3354e1293
BLAKE2b-256 8b8129461bc25d90e9a8e64f0b7b3c70c0c28853178bc30d9d0dc29aa2c090b4

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.0-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.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for vldt-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 53348d19b0905dfcb58da05a9c5c2e172da42b57111d0e3766e3a18227ee85c8
MD5 e03c51f41e30d955ec830135fb255945
BLAKE2b-256 6fe2ef543db38d0432790775ce58930d638607cace2485a8f74ec878d4810fa7

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.0-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.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for vldt-0.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 0968463318d77ca088547dcfc2fc19211ccf325ffd755648201cd050ff61b025
MD5 2bd0b96d82e4dab94fef6bfa2c1b38fb
BLAKE2b-256 ad7fb896ed01e07df62da5c7deeca4ebeb3beee983d403278eb57ce179898716

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.0-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.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vldt-0.1.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6c96b3a94005322aeb1896af030688a6e9b6e8bcb06b8a4f3c17a4f550f6de2b
MD5 a148cf79975aebefc315108169f6d7e8
BLAKE2b-256 61ed80d5d408470baab2b548d89724238ba279f61ca6f9801c06ee36ea6d342b

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.0-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.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for vldt-0.1.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 3046c8f00772f29e68389598d84568b9a888f702f8f451f15d57fa03207d9fb1
MD5 3e13f253a759cc5c99f92fa3a8021e66
BLAKE2b-256 7db51531ac25e6c3a1b0e8eb96e260b70a2a4af58ef11f31612ac42f0ad170f4

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.0-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.0-cp311-cp311-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for vldt-0.1.0-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 4e58449b5e1a1066e5afd6aaf142950e5197c35e5198dddbbba825ec73af22d6
MD5 7017ab4baf410be8a7efad07f85e8a69
BLAKE2b-256 635b7526eccada93741a09deebd6a5bf52f97e59f9ee790bbd095e247d406daf

See more details on using hashes here.

Provenance

The following attestation bundles were made for vldt-0.1.0-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