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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
|