What makes the world's most powerful batteries-included web framework even better? Automatically generating more batteries! 🔋
Inspired by the awesome .NET Coalesce project for accelerated web app development.
Generate Django Ninja API CRUD views — WIP
Given the following Django model:
# models.py
class User(models.Model):
id = models.BigAutoField(primary_key=True)
email = models.CharField()
Generates the following Django Ninja module:
# user_api.g.py
from django.shortcuts import get_object_or_404
from ninja import Router, Schema
from blog.models import User
router = Router()
class UserIn(Schema):
email: str
class UserOut(Schema):
id: int
email: str
@router.post("/", response=UserOut)
def create_user(request, payload: UserIn):
user = User.objects.create(**payload.dict())
return {"id": user.id}
@router.get("/{user_id}/", response=UserOut)
def get_user(request, user_id: int):
user = get_object_or_404(User, id=user_id)
return user
@router.get("/", response=list[UserOut])
def list_users(request):
users = User.objects.all()
return users
@router.put("/{user_id}/")
def update_user(request, user_id: int, payload: UserIn):
user = get_object_or_404(User, id=user_id)
for attr, value in payload.dict().items():
setattr(user, attr, value)
user.save()
return {"success": True}
@router.delete("/{user_id}/")
def delete_user(request, user_id: int):
user = get_object_or_404(User, id=user_id)
user.delete()
return {"success": True}
Given the following Django model:
# models.py
class User(models.Model):
id = models.BigAutoField(primary_key=True)
email = models.CharField()
Generates the following TypeScript model:
// user.g.ts
export interface user {
id: number;
email: string;
}
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
pip install -e '.[dev]'
# not required but makes setting PYTHONPATH and DJANGO_SETTINGS_MODULE easier
direnv allow
Run all tests
cd ./src/django_coalesce
pytest .
Run tests with coverage
cd ./src/django_coalesce
pytest --cov=django_coalesce .
python3 -m pip install --upgrade build twine
python3 -m build
Upload to test.pypi.org
python3 -m twine upload --repository testpypi dist/*
Upload to PyPI
python3 -m twine upload dist/*