a declarative data validator
Project description
cleaned
pypi: https://pypi.org/project/cleand/
(pypi's project name is not cleaned because it wasn't available then)
Overview
cleaned
is a declarative data validator.
Examples
import json
import cleaned as cl
class Request(cl.Cleaned):
username = cl.Str(pattern='^[a-zA-Z_]+$', blank=False, min_length=3)
password = cl.Str(blank=False, min_length=8)
age = cl.Int()
def register_user_api(request_json: str) -> ...:
dirty_data = json.loads(request_json)
cleaned_data = Request(**dirty_data)
# username matches ^[a-zA-Z_]+$ and it has at least 3 characters
username = cleaned_data.username
# password is at least 8 characters
password = cleaned_data.password
# age is a int value
age = cleaned_data.age
# do something with the data
print(username, password, age)
...
register_user_api(json.dumps({
'username': 'user',
'password': 'KJF83h9q3FAS',
'age': '20',
}))
try:
Request(username='invalid format', password='short')
except cl.ValidationError as e:
print(e.nested['username'])
# ('The value must match: ^[a-zA-Z_]+$', 'pattern')
print(e.nested['password'])
# ('The length of the value must be longer than or equal to 8.', 'min_length')
print(e.nested['age'])
# ('This field is required', 'required')
Static Typing
mypy can handle almost all cleaned values in the library.
import cleaned as cl
import enum
class Examples(cl.Cleaned):
class NestedExample(cl.Cleaned):
a = cl.Int()
class EnumExample(enum.Enum):
a = 1
b = 2
a = cl.Either(cl.Int(), cl.Str(blank=False))
b = cl.Int().opt()
c = cl.Dict(key=cl.Int(), value=cl.Float().opt()).opt()
d = cl.Nested(NestedExample)
e = cl.Enum(EnumExample)
f = cl.List(cl.Nested(NestedExample))
g = cl.List(cl.Nested(lambda: Examples))
ex = Examples()
reveal_type(ex.a)
# Revealed type is 'Union[builtins.int*, builtins.str*]'
reveal_type(ex.b)
# Revealed type is 'Union[builtins.int*, None]'
reveal_type(ex.c)
# Revealed type is 'Union[builtins.dict*[builtins.int*, Union[builtins.float*, None]], None]'
reveal_type(ex.d)
# Revealed type is 'Examples.NestedExample*'
reveal_type(ex.e)
# Revealed type is 'Examples.EnumExample*'
reveal_type(ex.f)
# Revealed type is 'builtins.list*[Examples.NestedExample*]'
reveal_type(ex.g)
# Revealed type is 'builtins.list*[hoge.Examples*]'
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
cleand-1.3.1.tar.gz
(13.7 kB
view details)
Built Distribution
cleand-1.3.1-py3-none-any.whl
(11.9 kB
view details)
File details
Details for the file cleand-1.3.1.tar.gz
.
File metadata
- Download URL: cleand-1.3.1.tar.gz
- Upload date:
- Size: 13.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6864eb136d036e4c6c4e4014cf75b648b57367917d7d1b3c448165321e091f1f |
|
MD5 | f7c25b3711449967922a72ee2c0eaa12 |
|
BLAKE2b-256 | 17283b6a0d9b36297daf8b11b61d589216356b601fe4d53693a259a7940195e4 |
File details
Details for the file cleand-1.3.1-py3-none-any.whl
.
File metadata
- Download URL: cleand-1.3.1-py3-none-any.whl
- Upload date:
- Size: 11.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e077a7acb5eddfdc6202bc33b8d99976d1a8c4e94aab5c78d7aa758b3a88b1ff |
|
MD5 | d8af17de372e6ff1bfdb3043ad5e6d91 |
|
BLAKE2b-256 | 9a83ee8267039e74f354f392dd75956ddd3bf1d8abcf2ef94178a37265d8db2b |