A schema describes:
a data structure
a mapping of one data structure into another
A schema consists of a list of fields.
A field doesn’t have a type – it is a type itself, in a way. Instead of a type, a field has a bi-directional mapping. Given two different data structures x and y, a mapping describes how to calculate x.f from y.f and how to calculate y.f from x.f.
Fields support following attributes:
name
mapping
default
source_name (source_names)
min_len, max_len, auto_trim
min, max
choices
regex
required, forbidden
nullable
Also:
Nested fields are supported.
Fields are easy to clone for reuse.
Fields and schemas are easy to reverse.
Schemas are easy to chain.
from wr_schemas import Field, Schema, Mappings
class Fields:
user_id = Field('id', mapping=int, min=1)
user_username = Field('username', min_len=5, max_len=100, regex=r'^[a-zA-Z0-9_\-\.@]+$')
user_password = Field('password', min_len=10, max_len=100, regex=r'^[a-zA-Z0-9]+$')
user_dob = Field('date_of_birth', mapping=Mappings.date())
CreateUser = Schema(
Fields.user_username.clone(required=True),
Fields.user_password.clone(default=None),
Fields.user_dob.clone(default=None),
)
payload = CreateUser.load({'username': 'marcus.aurelius@rome.gov'})
assert payload.username == 'marcus.aurelius@rome.gov'
assert payload.password is None
assert payload.date_of_birth is None
print(CreateUser.dump(payload))
Flask:
from wr_schemas import Field, Schema, Mappings
from wr_schemas.flask_request import FlaskRequestSchemaMixin
CreateUser = Schema(
Field('username', required=True),
Field('password', required=True),
mixins=[FlaskRequestSchemaMixin],
)
user = CreateUser.from_request()
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file wr-schemas-0.5.0.tar.gz.
File metadata
- Download URL: wr-schemas-0.5.0.tar.gz
- Upload date:
- Size: 10.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
defd0ae7e4bfae34924035a6b816b92640c74feb30239aa1dbae2297f42cf064
|
|
| MD5 |
0a56878aae0f04763861e019126f8e3e
|
|
| BLAKE2b-256 |
6ad21b2b6d72a149b2d1d7dacad98a77db2ebe88aaf4f676311b03a155057e7b
|