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?