๐
JSONClasses
JSONClasses is a declarative data flow pipeline and data graph framework.
Official Website: https://www.jsonclasses.com
Official Documentation: https://docs.jsonclasses.com
๐
Features
Features | |
---|---|
|
Data Modeling Declarative data model with Python type hints |
|
Data Sanitization Two strictness modes |
|
Data Validation Descriptive data validation rules without even a line of code |
|
Data Transformation Intuitive with modifier pipelines |
|
Data Presentation Custom key encoding & decoding strategies |
|
Data Graphing Models are linked with each other on the same graph |
|
Data Querying Well-designed protocols and implementations for databases |
|
Synthesized CRUD Only with a line of code |
|
Session & Authorization Builtin support for session and authorization |
|
Permission System Supports both object level and field level |
|
File Uploading A configuration is enough for file uploading |
|
Data Seeder Declarative named graph relationship |
๐
Getting Started
Prerequisites
Python >= 3.10 is required. You can download it here.
Install JSONClasses
Install JSONClasses is simple with pip
.
pip install jsonclasses
Install Components
Depends on your need, you can install ORM integration and HTTP library integration with the following commands.
pip install jsonclasses-pymongo jsonclasses-server
๐น
Examples
Business Logic Examples
Example 1: Dating App Users
Let's say, you are building the base user functionality for a cross-platform dating app.
The product requirements are:
- Unique phone number is required
- Password should be secure, encrypted, hidden from response
- Gender cannot be changed after set
- This product is adult only
- User intro should be brief
Let's transform the requirements into code.
from jsonclasses import jsonclass, types
from jsonclasses_pymongo import pymongo
from jsonclasses_server import api
@api
@pymongo
@jsonclass
class User:
id: str = types.readonly.str.primary.mongoid.required
phone_no: str = types.str.unique.index.match(local_phone_no_regex).required #1
email: str = types.str.match(email_regex)
password: str = types.str.writeonly.length(8, 16).match(secure_password_regex).transform(salt).required #2
nickname: str = types.str.required
gender: str = types.str.writeonce.oneof(['male', 'female']) #3
age: int = types.int.min(18).max(100) #4
intro: str = types.str.truncate(500) #5
created_at: datetime = types.readonly.datetime.tscreated.required
updated_at: datetime = types.readonly.datetime.tsupdated.required
โฝ๏ธ
Database & HTTP Library Integrations
-
JSON Classes Pymongo The mongodb integration through pymongo driver.
-
JSON Classes Server The server integration.
๐ฆธ
Contributing
- File a bug report. Be sure to include information like what version of YoMo you are using, what your operating system is, and steps to recreate the bug.
- Suggest a new feature.
๐คน๐ปโโ๏ธ Feedback
Any questions or good ideas, please feel free to come to our Discussion. Any feedback would be greatly appreciated!