Skip to content

joeriddles/django-coalesce

Repository files navigation

django-coalesce

PyPI version

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.

Features

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}

Generate TypeScript models from Django models — WIP

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;
}

Development

Getting Started

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

Testing

Run all tests

cd ./src/django_coalesce
pytest .

Run tests with coverage

cd ./src/django_coalesce
pytest --cov=django_coalesce .

Build

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/*

About

Generate boilerplate API code from your Django models

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published