Last updated:
0 purchases
apiclientpydantic 3.0.0
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 request and response data
@serialize(config: Optional[ConfigDict] = None, validate_return: bool = True, response: Optional[Type[BaseModel]] = None)
# wraps all local methods of a class with a decorator 'serialize'.
@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():
...
# or
@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):
# data will be AccountHolder instance
...
create_account(data={'last_name' : 'Smith','first_name' : 'John'})
# data will be a AccountHolder(last_name="Smith", first_name="John")
@serialize
def create_account(data: ModelDumped[AccountHolder]):
# data will be exactly a dict
...
create_account(data={'last_name' : 'Smith','first_name' : 'John'})
# data will be a dict {"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
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.