Annotation

Models can also be used to annotate arguments or return values

import uuid

from requests import post

from models_manager import Model, Field
from models_manager.utils import random_string


class User(Model):
    id = Field(default=1, json='id')
    username = Field(default='some', json='username')
    email = Field(default='email@gmail.com', json='email')


def create_user(user: User) -> User:  # accepting user object
    ...
    user_json = user.manager.to_json  # getting user object as dict
    json_response = post(f'user/{user.id.value}', json=user_json).json()
    return User(**json_response)


new_user = User(**User.manager.to_json)
user = create_user(new_user)  # will return created user object

user.id.value
1
user.username.value
'some'
user.email.value
'email@gmail.com'