This project is deprecated. Use Teo instead.
JSONClasses is a declarative data flow pipeline and data graph framework.
Official Website: https://www.jsonclasses.com
Official Documentation: https://docs.jsonclasses.com
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 |
Python >= 3.10 is required. You can download it here.
Install JSONClasses is simple with pip
.
pip install jsonclasses
Depends on your need, you can install ORM integration and HTTP library integration with the following commands.
pip install jsonclasses-pymongo jsonclasses-server
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
-
JSON Classes Pymongo The mongodb integration through pymongo driver.
-
JSON Classes Server The server integration.
- 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.
Any questions or good ideas, please feel free to come to our Discussion. Any feedback would be greatly appreciated!