๐ 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!