Metadata-Version: 2.1
Name: tortoise-serializer
Version: 1.0.1
Summary: Pydantic serialization for tortoise-orm
License: MIT
Author: Sebastien Nicolet
Author-email: snicolet95@gmail.com
Requires-Python: >=3.12,<4.0
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Requires-Dist: frozendict (>=2.4.6,<3.0.0)
Requires-Dist: pydantic (>=2.10.3,<3.0.0)
Requires-Dist: structlog (>=24.4.0,<25.0.0)
Requires-Dist: tortoise-orm (>=0.22.1,<0.23.0)
Description-Content-Type: text/markdown

# Tortoise Serializer
## Installation
```shell
pip add tortoise-serializer
```

## Usage
### Reading
```python
from tortoise_serializer import Serializer
from tortoise import Model, fields
from pydantic import Field
from fastapi.routing import APIRouter

class MyUser(Model):
    id = fields.IntegerField(primary_key=True)
    name = fields.CharField(max_length=100, unique=True)


class MyUserSerializer(Serializer):
    id: int
    name: str = Field(max_length=100, description="User unique name")



router = APIRouter(prefix="/users")
@router.get("")
async def get_users() -> list[MyUserSerializer]:
    return await MyUserSerializer.from_queryset(MyUser.all(), context={"user": ...})
```

(note that you "can" specify `context` to pass information to serializers but you don't have to)


### Writing
```python
from fastapi import Body



class MyUserCreationSerializer(Serializer):
    name: str


@router.post("")
async def create_user(user_serializer: MyUserCreationSerializer = Body(...)) -> MyUserSerializer:
    user = await user_serializer.create_tortoise_instance()
    # here you can also pass `context=` to that function
    return await MyUserSerializer.from_tortoise_orm(user)
```

