Skip to main content

ValidatedDC

PyPI version Build Status Coverage Status Language grade: Python Total alerts PyPI - Python Version

Dataclass with data validation. Checks the value of its fields by their annotations.

Capabilities

ValidatedDC is a regular Python dataclass.

  1. Support for standard types and custom Python classes.
  2. Support for some aliases from the typing module, namely: Any, List, Literal, Optional, Union. These aliases can be embedded in each other.
  3. When initializing an instance of a class, you can use the value of the field dict instead of the ValidatedDC instance specified in the field annotation (useful, for example, when retrieving data via api).
  4. Data validation occurs immediately after an instance is created, and can also be run by the is_valid() function at any time.
  5. The get_errors() function will show the full traceback of errors in the fields, including errors of nested classes.

See detailed in the examples folder.

Installation

pip install validated-dc

Python versions support

Versions 3.7, 3.8 and 3.9 are currently supported.

To work with version python 3.7 you need to install:

pip install typing_extensions

Quick example

from dataclasses import dataclass
from typing import List, Union

from validated_dc import ValidatedDC, get_errors, is_valid


# Some combinations of List and Union

@dataclass
class Foo(ValidatedDC):
    value: Union[int, List[int]]


@dataclass
class Bar(ValidatedDC):
    foo: Union[Foo, List[Foo]]


# --- Valid input ---

foo = {'value': 1}
instance = Bar(foo=foo)
assert get_errors(instance) is None
assert instance == Bar(foo=Foo(value=1))

foo = {'value': [1, 2]}
instance = Bar(foo=foo)
assert get_errors(instance) is None
assert instance == Bar(foo=Foo(value=[1, 2]))

foo = [{'value': 1}, {'value': 2}]
instance = Bar(foo=foo)
assert get_errors(instance) is None
assert instance == Bar(foo=[Foo(value=1), Foo(value=2)])

foo = [{'value': [1, 2]}, {'value': [3, 4]}]
instance = Bar(foo=foo)
assert get_errors(instance) is None
assert instance == Bar(foo=[Foo(value=[1, 2]), Foo(value=[3, 4])])


# --- Invalid input ---

foo = {'value': 'S'}
instance = Bar(foo=foo)
assert get_errors(instance)
assert instance == Bar(foo={'value': 'S'})
# fix
instance.foo['value'] = 1
assert is_valid(instance)
assert get_errors(instance) is None
assert instance == Bar(foo=Foo(value=1))

foo = [{'value': [1, 2]}, {'value': ['S', 4]}]
instance = Bar(foo=foo)
assert get_errors(instance)
assert instance == Bar(foo=[{'value': [1, 2]}, {'value': ['S', 4]}])
# fix
instance.foo[1]['value'][0] = 3
assert is_valid(instance)
assert get_errors(instance) is None
assert instance == Bar(foo=[Foo(value=[1, 2]), Foo(value=[3, 4])])


# --- get_errors() ---

foo = {'value': 'S'}
instance = Bar(foo=foo)
print(get_errors(instance))
# {
#   'foo': [
#       # An unsuccessful attempt to use the dictionary to create a Foo instance
#       InstanceValidationError(
#           value_repr="{'value': 'S'}",
#           value_type=<class 'dict'>,
#           annotation=<class '__main__.Foo'>,
#           exception=None,
#           errors={
#               'value': [
#                   BasicValidationError(  # because the str isn't an int
#                       value_repr='S', value_type=<class 'str'>,
#                       annotation=<class 'int'>, exception=None
#                   ),
#                   BasicValidationError(  # and the str is not a list of int
#                       value_repr='S', value_type=<class 'str'>,
#                       annotation=typing.List[int], exception=None
#                   )
#               ]
#           }
#       ),
#       BasicValidationError(  # the dict is not a list of Foo
#           value_repr="{'value': 'S'}",
#           value_type=<class 'dict'>,
#           annotation=typing.List[__main__.Foo],
#           exception=None
#       )
#   ]
# }

Metadata

Release files for validated-dc 1.3.3

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

Source distribution (sdist)

Source distribution for validated-dc 1.3.3
File Size Uploaded
validated-dc-1.3.3.tar.gz 7.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for validated-dc 1.3.3
File Interpreter ABI Platform
validated_dc-1.3.3-py3-none-any.whl Python 3 none any Details

Total release size: 15.6 kB

Release files / validated-dc-1.3.3.tar.gz

Download URL validated-dc-1.3.3.tar.gz
Size 7.4 kB
Tags Source
SHA-256 checksum
How to use checksums
d4a2e018b5d42a641e48addc9d8bd2804d38046a62ba112eca7c03cae98f2335
BLAKE2b-256 checksum
How to use checksums
36b9509310a15ac9c1e6bca9bd59a62ff924a3a2cd296885b37cf7c2c2fe0cdf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.3.0 pkginfo/1.6.1 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.55.1 CPython/3.8.5

Release files / validated_dc-1.3.3-py3-none-any.whl

Download URL validated_dc-1.3.3-py3-none-any.whl
Size 8.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6f4c849c23cdf6a21b95828da141f0a703fadd7e3f5252857a4b84b9b8196c21
BLAKE2b-256 checksum
How to use checksums
325c3c1ccdda94efd64cb3c3c0e1d4ccebab5848f64f12f3bb150b571ab55df3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.3.0 pkginfo/1.6.1 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.55.1 CPython/3.8.5

Release history Release notifications | RSS feed

This release

1.3.3 This release

2 release files

1.3.2

2 release files

1.3.0

2 release files

1.2.5

2 release files

1.2.4

2 release files

1.2.3

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2

2 release files

1.1

2 release files

1.0

2 release files

0.5.1

2 release files

0.5

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2

2 release files

0.1

2 release files

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