A lightweight model validator for modern projects.
Project description
bike
A lightweight model validator for modern projects.
Instalation
pip install bike
First Pedals
Lets define a simple model to represent a person.
import bike
@bike.model()
class Person:
name: str
height: float
weight: float
...
p1 = Person(
name='Patrick Love',
height=75,
weight=180
)
A Person instance can be created passing the attributes. Also can be instantiated by a dict.
...
data = {
'name': 'Patrick Love',
'height': 75,
'weight': 180
}
p1 = Person(**data)
Nested Models
We can create and mananger more complex structs by nested models. It's simply by using a model as field type of other model.
# implement.py
import bike
@bike.model()
class Address:
address_1: str
address_2: str = ''
city: str
state: str
code: str
country: str
@bike.model()
class Phone:
country_code: str
local_code: str
number: str
@bike.model()
class Person:
name: str
address: Address
phones: list[Phone]
...
payload = {
'name': 'Aline Mark',
'address': {
'address_1': '239 W 45th St',
'address_2': '',
'city': 'New York',
'state': 'NY',
'code': '10036',
'country': 'EUA'
},
'phones': [
{
'country_code': '+1',
'local_code': '010',
'number': '134354325'
},
{
'country_code': '+2',
'local_code': '011',
'number': '134565436'
}
]
}
p1 = Person(**payload)
print(p1.phones[0].country_code)
# +1
print(p1.phones[1].local_code)
# 011
print(p1.address.state)
# NY
Parsing to Json and Dict
We can parse data to dict or json by using .dict() or json() methods respectively.
import bike
@bike.model()
class Make:
name: str
country: str
@bike.model()
class Car:
name: str
make: Make
m1 = Make(name='Nissan', country='JP')
c1 = Car(name='Leaf', make=m1)
c1_dict = c1.dict()
print(c1_dict['make']['country'])
# JP
c1_json = c1.json()
print(c1_json)
# {"name": "Leaf", "make": {"name": "Nissan", "country": "JP"}}
Validating Fields
Fields can be validated adding the validator annotation.
import bike
@bike.model()
class Character:
name: str
health: float = 1.0
@bike.validator('name')
def name_validator(cls, val):
return val.title()
@bike.validator('health')
def health_validator(cls, val):
if val < 0:
return 0.0
elif val > 1:
return 1.0
return val
c1 = Character(name='ninki walker', health=2.0)
print(c1.name)
# Ninki Walker
print(c1.health)
# 1.0
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
bike-0.3.6.tar.gz
(5.9 kB
view details)
Built Distribution
bike-0.3.6-py3-none-any.whl
(6.9 kB
view details)
File details
Details for the file bike-0.3.6.tar.gz
.
File metadata
- Download URL: bike-0.3.6.tar.gz
- Upload date:
- Size: 5.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.5.1 CPython/3.10.6 Linux/5.19.0-45-generic
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a65349b58528a2d6e0ad2b67ac0e2fadb653e41bbc05294130294030748b2ca2 |
|
MD5 | b9def0b091f083b54c7b811d2bd7da23 |
|
BLAKE2b-256 | ef6f6a8528ea250ad075dc6255d60b30d4d6c5815ea535d154d2cb208cad150b |
File details
Details for the file bike-0.3.6-py3-none-any.whl
.
File metadata
- Download URL: bike-0.3.6-py3-none-any.whl
- Upload date:
- Size: 6.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.5.1 CPython/3.10.6 Linux/5.19.0-45-generic
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c7303e235b682b4386db7b57bd1674328822c54b2bce432184ccf951c9358444 |
|
MD5 | 5a729efc4b6336f395e7feea5226bb53 |
|
BLAKE2b-256 | 204fa643bd0c2f258515d2cd3da520f12d810c61f34647bb81722f1277f5bfff |