Skip to main content
Archived

This project has been archived by its maintainers, and is no longer receiving any updates.

dataclass-type-validator

The dataclass-type-validator is a type validation library for the properties of dataclasses.dataclass using Python type hint information.

Installation

pip install dataclass-type-validator or add dataclass-type-validator line to requirements.txt

A Simple Example

Explicitly calling dataclass_type_validator from within your dataclass

from dataclasses import dataclass
from typing import List
from dataclass_type_validator import dataclass_type_validator
from dataclass_type_validator import TypeValidationError

@dataclass()
class User:
    id: int
    name: str
    friend_ids: List[int]

    def __post_init__(self):
        dataclass_type_validator(self)


# Valid User
User(id=10, name='John Smith', friend_ids=[1, 2])
# => User(id=10, name='John Smith', friend_ids=[1, 2])

# Invalid User
try:
    User(id='a', name=['John', 'Smith'], friend_ids=['a'])
except TypeValidationError as e:
    print(e)
# => TypeValidationError: Dataclass Type Validation (errors = {
#   'id': "must be an instance of <class 'int'>, but received <class 'str'>",
#   'name': "must be an instance of <class 'str'>, but received <class 'list'>",
#   'friend_ids': 'must be an instance of typing.List[int], but there are some errors:
#       ["must be an instance of <class \'int\'>, but received <class \'str\'>"]'})

The same, but using the class decorator instead

from dataclasses import dataclass
from typing import List
from dataclass_type_validator import dataclass_validate
from dataclass_type_validator import TypeValidationError

@dataclass_validate
@dataclass()
class User:
    id: int
    name: str
    friend_ids: List[int]


# Valid User
User(id=10, name='John Smith', friend_ids=[1, 2])
# => User(id=10, name='John Smith', friend_ids=[1, 2])

# Invalid User
try:
    User(id='a', name=['John', 'Smith'], friend_ids=['a'])
except TypeValidationError as e:
    print(e)
# => TypeValidationError: Dataclass Type Validation (errors = {
#   'id': "must be an instance of <class 'int'>, but received <class 'str'>",
#   'name': "must be an instance of <class 'str'>, but received <class 'list'>",
#   'friend_ids': 'must be an instance of typing.List[int], but there are some errors:
#       ["must be an instance of <class \'int\'>, but received <class \'str\'>"]'})

You can also pass the strict param (which defaults to False) to the decorator:

@dataclass_validate(strict=True)
@dataclass(frozen=True)
class SomeList:
    values: List[str]

# Invalid item contained in typed List
try:
    SomeList(values=["one", "two", 3])
except TypeValidationError as e:
    print(e)
# => TypeValidationError: Dataclass Type Validation Error (errors = {
#   'x': 'must be an instance of typing.List[str], but there are some errors: 
#       ["must be an instance of <class \'str\'>, but received <class \'int\'>"]'})

You can also pass the before_post_init param (which defaults to False) to the decorator, to force the type validation to occur before __post_init__() is called. This can be used to ensure the types of the field values have been validated before your higher-level semantic validation is performed in __post_init__().

@dataclass_validate(before_post_init=True)
@dataclass
class User:
    id: int
    name: str

    def __post_init__(self):
        # types of id and name have already been checked before this is called.
        # Otherwise, the following check will throw a TypeError if user passed 
        # `id` as a string or other type that cannot be compared to int.
        if id < 1:
            raise ValueError("superuser not allowed")

Release files for dataclass-type-validator 0.1.2

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

Source distribution (sdist)

Source distribution for dataclass-type-validator 0.1.2
File Size Uploaded
dataclass-type-validator-0.1.2.tar.gz 5.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dataclass-type-validator 0.1.2
File Interpreter ABI Platform
dataclass_type_validator-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 10.8 kB

Release files / dataclass-type-validator-0.1.2.tar.gz

Download URL dataclass-type-validator-0.1.2.tar.gz
Size 5.3 kB
Tags Source
SHA-256 checksum
How to use checksums
575f5ea89b5965ab5b3079cd67115b37a75a529fe221c35159e036e99faa0eb4
BLAKE2b-256 checksum
How to use checksums
6eee2b7d90951d396145262e6db360dbdacec0a4784d7aa71fe9f4892f4c9910
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.2 importlib_metadata/4.0.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.12

Release files / dataclass_type_validator-0.1.2-py3-none-any.whl

Download URL dataclass_type_validator-0.1.2-py3-none-any.whl
Size 5.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
85b759f17ee106245f8748b9f5381bd9ad225dbeef573feee3ce46cdbfaaa8a7
BLAKE2b-256 checksum
How to use checksums
a700b5e8fe114aad4fa1eb93efdcce87f1494f0ba6ba7275d676b5eaff12d842
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.2 importlib_metadata/4.0.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.12
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