wr-schemas
Project description
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()
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
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 |