Skip to content

abdelrahman-t/falcontyping

Repository files navigation

Falcon typing

PyPI PyPI codecov Build Status License: MIT

Use type hints to specify request parameters with Marshmallow and Pydantic support.

**Uses typedjson

Example

"""API."""
from typing import Optional, Union

from pydantic import BaseModel as PydanticModel
from falcontyping import TypedAPI, TypedResource


class UserV1(PydanticModel):

    username: str


class UserV2(PydanticModel):

    username: str
    balance: float


class UsersResource(TypedResource):

    def on_post(self, request, response, user: Union[UserV2, UserV1]) -> Union[UserV2, UserV1]:
        if isinstance(user, UserV2):
            return UserV2(username=user.username, balance=user.balance)

        else:
            return UserV1(username=user.username)


class UserDetailsResource(TypedResource):

    def on_get(self, request, response, user_id: int) -> Optional[Union[UserV2, UserV1]]:
        if user_id == 2:
            return UserV2(username='user', balance=0.0)

        if user_id == 1:
            return UserV1(username='user')

        return None


API = TypedAPI()
API.add_route('/users', UsersResource())
API.add_route('/users/{user_id}', UserDetailsResource())

How to install

pip install falcontyping

About

Add type hints support to Falcon

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages