FastAPI 422 Unprocessable entity when inheriting routers

19 views Asked by At

I am trying to implement versioning in a fastapi class based router.

from pydantic import BaseModel

class PRequestBody(BaseModel):
    a: str

class PRequestBodyV2(PRequestBody):
    b: str

class BasePRouter():

    def __init__(self) -> None:
        self.router: APIRouter = APIRouter()
        self.add_api_routes()

    def add_api_routes(self) -> None:
       
        self.router.add_api_route("/healthcheck", self.health_check, methods=["GET", "POST"])
        self.router.add_api_route("/", self.health_check, methods=["GET", "POST"])

    async def health_check(self) -> dict[str, str]:
        return {'success': 'true'}

class PRouterV1(BasePRouter):

    def add_api_routes(self):
        super().add_api_routes()
        self.router.add_api_route("/coucou", self.coucou, methods=["POST"])

    def coucou(self, request_body: PRequestBody):
        rreturn {"success": "okv2", "a": request_body.a}

class PRouterV2(PRouterV1):

    def coucou(self, request_body: PRequestBodyV2,):
    
        return {"success": "okv2", "a": request_body.a, "b": request_body.b}


    APP = FastAPI()


v1_router = AZInferenceRouterV1().router
v2_router = AZInferenceRouterV2().router

APP.include_router(v1_router, prefix="/v1")
APP.include_router(v2_router, prefix="/v2")

APP.include_router(v1_router, prefix="")

The problem is that when I call v1 methods, everything works fine, in v2 router all methods except /v2/coucou work fine. I get the following error:

INFO: 192.168.208.1:54260 - "POST /v2/coucou HTTP/1.1" 422 Unprocessable Entity

I cannot understand why /v2/coucou wouldn't work?

0

There are 0 answers