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 serialize, serialize_all_methods, serialize_request, serialize_response
# serialize incoming kwargs
@serialize_request(schema: Optional[Type[BaseModel]] = None, extra_kwargs: dict = None)
# serialize response in pydantic class
@serialize_response(schema: Optional[Type[BaseModel]] = None)
# serialize request and response data
@serialize(schema_request: Optional[Type[BaseModel]] = None, schema_response: Optional[Type[BaseModel]] = None, **base_kwargs)
# 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
@serialize_response
decorator to the api client method to transform the response directly into your defined schema.@serialize_response(List[Account]) def get_accounts(): ... # or @serialize_response() def get_accounts() -> List[Account]: ...
- Add the
@serialize_request
decorator to the api client method to translate the incoming kwargs into the required dict for the endpoint:@serialize_request(AccountHolder) def create_account(data: dict): ... # or @serialize_request() 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@serialize_response
and@serialize_request
.- 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]: ...
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
Close
Hashes for api-client-pydantic-1.0.2.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | fbe11f0f12b733d62ccf403ee2a9bebea1f143d8a6ae4a0ece9c64cb0fe6a5fd |
|
MD5 | 57241e766fe03810586e281026dbaf41 |
|
BLAKE2b-256 | 8bf767c080b9239082b55d706011eec03b1eaccec5ca9cbed06ec06cbef6aa08 |
Close
Hashes for api_client_pydantic-1.0.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9d6e75db7fb3699bfa0875a59f62e9c1e3e740c379c205a29b089a22ef397f73 |
|
MD5 | 5334cda1ce30377abf8b4616aa5987f0 |
|
BLAKE2b-256 | 38b64950e2e6066cf66626ccf21fe69a095d62a4384f09f4900b342e73544002 |