๐Ÿ“ฆ joeriddles / django-coalesce

Generate boilerplate API code from your Django models

โ˜… 0 stars โ‘‚ 0 forks ๐Ÿ‘ 0 watching โš–๏ธ Apache License 2.0
djangopython
๐Ÿ“ฅ Clone https://github.com/joeriddles/django-coalesce.git
HTTPS git clone https://github.com/joeriddles/django-coalesce.git
SSH git clone git@github.com:joeriddles/django-coalesce.git
CLI gh repo clone joeriddles/django-coalesce
Joseph Riddle Joseph Riddle Fix not including .ts template files b87c846 1 years ago ๐Ÿ“ History
๐Ÿ“‚ main View all commits โ†’
๐Ÿ“ .vscode
๐Ÿ“ example
๐Ÿ“ src
๐Ÿ“„ .envrc
๐Ÿ“„ .gitignore
๐Ÿ“„ LICENSE
๐Ÿ“„ MANIFEST.in
๐Ÿ“„ pyproject.toml
๐Ÿ“„ pytest.ini
๐Ÿ“„ README.md
๐Ÿ“„ requirements.txt
๐Ÿ“„ README.md

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