api-client-pydantic 3.0.0

Last updated:

0 purchases

api-client-pydantic 3.0.0 Image
api-client-pydantic 3.0.0 Images
Add to Cart

Description:

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

License:

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.