Skip to content

asynq-io/fastapi-views

Repository files navigation

fastapi-views

Tests Build License Mypy Ruff Pydantic v2 security: bandit Python Format PyPi

FastAPI Class Views and utilities


Documentation: https://asynq-io.github.io/fastapi-views/

Repository: https://github.com/asynq-io/fastapi-views


Installation

pip install fastapi-views

Usage

from typing import ClassVar, Optional
from uuid import UUID

from fastapi import FastAPI
from pydantic import BaseModel

from fastapi_views import ViewRouter, configure_app
from fastapi_views.views.viewsets import AsyncAPIViewSet


class UpdateItemSchema(BaseModel):
    name: str
    price: int


class ItemSchema(BaseModel):
    id: UUID
    name: str
    price: int


class MyViewSet(AsyncAPIViewSet):
    api_component_name = "Item"
    response_schema = ItemSchema
    items: ClassVar[dict[UUID, ItemSchema]] = {}

    async def list(self) -> list[ItemSchema]:
        return list(self.items.values())

    async def create(self, item: ItemSchema) -> ItemSchema:
        self.items[item.id] = item
        return item

    async def retrieve(self, id: UUID) -> Optional[ItemSchema]:
        return self.items.get(id)

    async def update(self, id: UUID, item: UpdateItemSchema) -> ItemSchema:
        self.items[id] = ItemSchema(id=id, name=item.name, price=item.price)
        return self.items[id]

    async def destroy(self, id: UUID) -> None:
        self.items.pop(id, None)


router = ViewRouter(prefix="/items")
router.register_view(MyViewSet)

app = FastAPI(title="My API")
app.include_router(router)

configure_app(app)

Features

  • Class Based Views
    • APIViews
    • ViewSets
  • Both async and sync function support
  • No dependencies on ORM
  • OpenAPI operation id simplification
  • 'Smart' and fast serialization using Pydantic v2
  • Http Problem Details implementation (both models & exception classes)
  • Automatic prometheus metrics exporter
  • Optional Opentelemetry instrumentation with correlation_id in error responses
  • CLI for generating OpenAPI documentation file
  • Pagination types & schemas