Lightweight MoySklad API client built on httpx with retries
Project description
moysklad-api-client
Лёгкий асинхронный Python-клиент для работы с MoySklad API, основанный на httpx.
Поддерживает:
- Автоматический ретрай при ответах
429и503с экспоненциальной паузой (exponential backoff); - DSL для сборки URL-запросов;
- Парсер ответов API с безопасным доступом к данным.
Установка
pip
pip install moysklad-api-client
poetry
poetry add moysklad-api-client
⚙️ Использование
Работа через контекстный менеджер
import asyncio
from moysklad_api_client import APIClient
async def main():
async with APIClient() as client:
response = await client.get('api_key', 'url', {'limit': 10})
print(response.status_code, response.json())
asyncio.run(main())
Работа напрямую через экземпляр класса
import asyncio
from moysklad_api_client import APIClient
async def main():
client = APIClient()
response = await client.get(
api_key='api_key',
url='url',
params={'limit': 1, 'offset': 100}
)
print(response.json())
asyncio.run(main())
URLbuilder — генерация URL и параметров запроса
Простой DSL для построения цепочки фильтров, параметров и ссылок на сущности.
from moysklad_api_client.msurlbuilder import URLbuilder, MSObject
builder = (
URLbuilder(ms_object_type=MSObject.customerorder)
.expand('demands.salesChannel', 'invoicesOut')
.limit(100)
.filter('agent').eq('agent_id')
.filter('moment').gt('2025-09-11').filter('moment').lt('2025-10-12')
.offset(10)
)
print(builder.url)
print(builder.encode_url(include_params=True))
print(builder.params)
# Пример построения ссылки на конкретный документ
url = URLbuilder().document(MSObject.product).document_id('id').url
MSObject — перечисление сущностей API
Класс MSObject содержит Enum всех доступных сущностей API.
from moysklad_api_client.msurlbuilder import URLbuilder, MSObject
print(MSObject.available_list()) # Все доступные типы сущностей
builder = URLbuilder()
print(builder.available_documents) # Документы, доступные через builder
BaseEntityParser — удобный парсер ответов API
import asyncio
from moysklad_api_client import APIClient
from moysklad_api_client.msurlbuilder import URLbuilder, MSObject
from moysklad_api_client.msparser import BaseEntityParser
async def main():
async with APIClient() as client:
url = URLbuilder(MSObject.demand).document_id('demand_id').url
response = await client.get(api_key='api_key', url=url)
data = BaseEntityParser(response)
print(data.meta)
print(data.type)
print(data.external_code)
# Безопасный доступ к вложенным данным
print(data.get_value('rate', 'currency', 'meta'))
asyncio.run(main())
Примечания
- Все запросы выполняются асинхронно, синхронного клиента нет.
- При ответах
429и503выполняются повторные попытки с увеличивающимся интервалом ожидания. - Совместим с Python
3.9+.
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file moysklad_api_client-0.1.1.tar.gz.
File metadata
- Download URL: moysklad_api_client-0.1.1.tar.gz
- Upload date:
- Size: 11.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.1 CPython/3.14.0 Windows/11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
44f2be72ea3649fe86abbec9de1b8048f535be9c0992fa358862bcb404179cae
|
|
| MD5 |
69b8d5f2d78070b5d8e75dfaf91ff421
|
|
| BLAKE2b-256 |
efc54a6077c8e7e32b0bb6a94a184ea1288fffef5358a285ed017b71a0e2a4b0
|
File details
Details for the file moysklad_api_client-0.1.1-py3-none-any.whl.
File metadata
- Download URL: moysklad_api_client-0.1.1-py3-none-any.whl
- Upload date:
- Size: 14.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.1 CPython/3.14.0 Windows/11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c2a25e5833793b560caa5afdeab8c9fb7cad1f0dd2726f46b04dc89b8213f992
|
|
| MD5 |
fc7c8e7ca22b7eabf50182576aec7a25
|
|
| BLAKE2b-256 |
5498ea046910a91357d1441fdda315e4d09a56fab84a6ce3b0d09398f0799c8a
|