API Client extension for validate and transform requests / responses using pydantic.
Project description
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 params_serializer, response_serializer, serialize, serialize_all_methods
# serialize incoming kwargs
@params_serializer(by_alias: bool = True, exclude_unset: bool = False, exclude_defaults: bool = False, exclude_none: bool = True)
# serialize response in pydantic class
@response_serializer(response: Optional[Type[BaseModel]] = None)
# serialize request and response data
@serialize(response: Optional[Type[BaseModel]] = None, by_alias: bool = True, exclude_unset: bool = False, exclude_defaults: bool = False, exclude_none: bool = True)
# wraps all local methods of a class with a specified decorator. default 'serialize'
@serialize_all_methods(decorator=serialize)
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
@response_serializer
decorator to the api client method to transform the response directly into your defined schema.@response_serializer(List[Account]) def get_accounts(): ... # or @response_serializer() def get_accounts() -> List[Account]: ...
-
Add the
@params_serializer
decorator to the api client method to translate the incoming kwargs into the required dict for the endpoint:@params_serializer(AccountHolder) def create_account(data: dict): ... # or @params_serializer() def create_account(data: AccountHolder): # data will be exactly a dict ... create_account(last_name='Smith', first_name='John') # data will be a dict {"last_name": "Smith", "first_name": "John"}
-
@serialize
- It is a combination of the two decorators@response_serializer
and@params_serializer
. -
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
This code generator creates a ApiClient app from an openapi file.
Mentions
Many thanks to JetBrains for supplying me with a license to use their product in the development of this tool.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for api_client_pydantic-2.2.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | de23a556dca4d37a250330f868286def5348313f7461bddba7015626fe1a355a |
|
MD5 | 56951bf8debe20780ec46cc4beef2196 |
|
BLAKE2b-256 | 0cd069967ca4bd5a243f6dfbb9d46db54671e170f97f624905ff925d3d4bc959 |
Hashes for api_client_pydantic-2.2.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1e59fea3680a1c066f3ab03f7786f6d3f410e1e8fe579975a64fb37cb222a06d |
|
MD5 | 6ecdaf09f80d34821cb1479f32b375e6 |
|
BLAKE2b-256 | efdc7a4f04e27b93774f3ec292af948b20c04f3816f79457ff47c6bff10707df |