Python client for Nova Poshta API
Project description
novaposhta-python-client
A Python client for interfacing with the Nova Poshta API. Designed to provide easy access to all API functionalities with emphasis on consistency and usability.
Description
This client is compatible with python = "^3.9"
and aims to mirror the Nova Poshta API's endpoints, offering a 1:1
mapping where possible. However, users should be aware of the inconsistencies and occasional ambiguities present in the
API. This can affect the signatures of some methods, and special attention is needed when working with endpoints like
the save
method from some models which can create different items based on the provided input.
Efforts to enhance the consistency and robustness of the client are ongoing, and future releases will focus on thorough testing and refinement of all possible parameter combinations.
Installation
pip install novaposhta-python-client
Usage
Here's a basic example of how to use the client:
from novaposhta.client import NovaPoshtaApi
# Instantiate the client
client = NovaPoshtaApi('my-api-token', timeout=30)
# Example usage of different models
settlements = client.address.search_settlements(city_name='Київ', limit=5)
my_pack_list = client.common.get_pack_list(length=1, width=5)
return_reason = client.additional_service.get_return_reasons()
# Print results
print(settlements, my_pack_list, return_reason)
client.close_sync()
Please, close the client whenever you are done with it to avoid resource leaks.
You can also use async client:
import asyncio
from novaposhta.client import NovaPoshtaApi
async def use_api_async():
async_client = NovaPoshtaApi('your_api_key', timeout=30, async_mode=True, raise_for_errors=True)
address = async_client.address
settlements = await address.search_settlements(city_name='Київ', limit=5)
print(settlements)
await async_client.close_async()
asyncio.run(use_api_async())
You can use context manager to automatically close the client:
from novaposhta.client import NovaPoshtaApi
def use_api_sync():
with NovaPoshtaApi(api_key='your_api_key', async_mode=False) as api:
# Do something with the API
pass
async def use_api_async():
async with NovaPoshtaApi(api_key='your_api_key', async_mode=True) as api:
# Do something with the API
pass
Error handling
import httpx
from novaposhta.client import NovaPoshtaApi, InvalidAPIKeyError, APIRequestError
# Instantiate the client
client = NovaPoshtaApi('your_api_key', timeout=30, raise_for_errors=True)
try:
client.common.get_cargo_types()
except httpx.HTTPError as error:
print(f"HTTP error: {error}")
except InvalidAPIKeyError as error:
print(f"API key expired or otherwise invalid: {error}")
except APIRequestError as error:
print(f"Something else is wrong with API request: {error}")
Extending the Client
Custom HTTP Client
While httpx
is the default HTTP library, you can easily substitute it with requests or another library, provided it
follows the same interface:
from novaposhta.client import NovaPoshtaApi
import my_http_client
client = NovaPoshtaApi('your_api_key', http_client=my_http_client.Client)
Adding New Methods
If a method isn’t implemented, or you prefer a custom implementation, extend the model as shown below:
from novaposhta.models.base import BaseModel, api_method
class MyCustomModel(BaseModel):
@api_method('MissingMethod')
def missing_method(self, some_param: str):
return self._call_with_props(SomeParam=some_param)
The client caches all model instances. To reset and create a new model instance, use the new method:
from novaposhta.client import NovaPoshtaApi
from novaposhta.models.address import Address
client = NovaPoshtaApi('my-api-token')
address = client.new(Address)
To get your custom model instance, use the get method:
my_custom_model = client.get(MyCustomModel.name)
Testing and linting
poetry run black novaposhta
poetry run mypy novaposhta/
poetry run pytest tests/
Contributing
We welcome contributions that can help in enhancing the functionality and improving the consistency of the client. For
bugs or feature requests, please open an issue on the GitHub repository.
Please, use black
and mypy
as your instrument for code formatting and type checking.
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 novaposhta_python_client-0.1.8.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 39d9e047a335dcb55928f1bc652488bae092957cb0924d98207b1deb5b0aa216 |
|
MD5 | c881e1fe0ad72c06082a8d61e55a7488 |
|
BLAKE2b-256 | c263f8e30c79893805ae8a8b96f46d6784e0d09a18a0ec74570cf84aaa5476a4 |
Hashes for novaposhta_python_client-0.1.8-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 94d7e707f3854922128d5068c901630237f365483854c2c9bc9a337f08b89d67 |
|
MD5 | 102b04c2f921662929a81523d6620c90 |
|
BLAKE2b-256 | 229c9195e4ed0d4cc8033b73f9c34e287e885074df819f2d5e38e947b51d84cb |