Корпоративный мерч в других странах:AMArmeniaGEGeorgiaTRTürkiyeRSSerbiaAEUAECYCyprusPTPortugalPLPolandESSpain

Python SDK для Италия

corp-merch (PyPI) — sync и async клиенты, Python 3.10+, полные type hints, модели Pydantic v2, FastAPI-friendly.

Установка и init

pip install corp-merch. Sync: from corp_merch import CorpMerch; cm = CorpMerch(api_key=os.environ['CM_KEY'], country='Italy'). Async: from corp_merch import AsyncCorpMerch; та же сигнатура. Country автоматически применяет IVA 22% через SdI с маршрутом через хаб Милан.

Quickstart — отправка заказа

order = cm.orders.create(idempotency_key=str(uuid4()), buyer={'vat_id': 'EU…'}, lines=[{'sku': 'TSH-001', 'qty': 200}], promised_date=date(2026,7,1)). Возвращает модель Pydantic Order с полной типизацией. Ошибки поднимаются как ValidationError, RateLimitError и т.п. Async-эквивалент: await acm.orders.acreate(…).

Верификация webhook (FastAPI)

@app.post('/wh') async def wh(req: Request): event = cm.webhooks.construct_event(await req.body(), req.headers['x-corp-signature'], os.environ['CM_WEBHOOK_SECRET']); …. Поднимает SignatureVerificationError при неверной подписи; FastAPI конвертирует в 400 через зарегистрированный exception handler.

FAQ

Работает с Django/Flask?

Да — framework-agnostic. Поставляем middleware для Django (corp_merch.django) и Flask (corp_merch.flask) для webhook-маршрутов.

Sync и async оба поддерживаются?

Да — отдельные клиенты (CorpMerch / AsyncCorpMerch) делят одни типы. Используют httpx внутри; bring your own event loop.

Как пагинировать каталог?

for item in cm.catalog.list(country='Italy'): … итерирует все страницы (cursor pagination внутри). Async: async for item in acm.catalog.alist(country='Italy'): …

Type hints / mypy?

Полное покрытие. Marker ./py.typed. Тестируется с mypy --strict и pyright. Модели Pydantic v2 для всех ответов.

Исходный код?

MIT на GitHub: github.com/corp-merch/sdk-python. Issue tracker для багов / RFC.

Поговорите со специалистом