Python API Client Pydantic Extension
Installation
pip install api-client-pydantic
Usage
The following decorators have been provided to validate request data and converting json straight to pydantic class.
from apiclient_pydantic import serialize, serialize_all_methods
@serialize(config: Optional[ConfigDict] = None, validate_return: bool = True, response: Optional[Type[BaseModel]] = None)
@serialize_all_methods(config: Optional[ConfigDict] = None)
Usage:
-
Define the schema for your api in pydantic classes.
from pydantic import BaseModel, Field
class Account(BaseModel):
account_number: int = Field(alias='accountNumber')
sort_code: int = Field(alias='sortCode')
date_opened: datetime = Field(alias='dateOpened')
-
Add the @serialize
decorator to the api client method to transform the response
directly into your defined schema.
@serialize(response=List[Account])
def get_accounts():
...
@serialize
def get_accounts() -> List[Account]:
...
-
Add the @serialize
decorator to the api client method to translate the incoming kwargs
into the required dict or instance for the endpoint:
from apiclient_pydantic import ModelDumped
@serialize
def create_account(data: AccountHolder):
...
create_account(data={'last_name' : 'Smith','first_name' : 'John'})
@serialize
def create_account(data: ModelDumped[AccountHolder]):
...
create_account(data={'last_name' : 'Smith','first_name' : 'John'})
-
For more convenient use, you can wrap all APIClient methods with @serialize_all_methods
.
from apiclient import APIClient
from apiclient_pydantic import serialize_all_methods
from typing import List
from .models import Account, AccountHolder
@serialize_all_methods
class MyApiClient(APIClient):
def decorated_func(self, data: Account) -> Account:
...
def decorated_func_holder(self, data: AccountHolder) -> List[Account]:
...
Related projects
apiclient-pydantic-generator - Now deprecated.
This code generator creates a ApiClient app from an openapi file.
apiclient-pydantic-generator