Python SDK
Пакет dashamail-python, импортируется как dashamail.
HTTP — через встроенный urllib, без requests и
прочих зависимостей.
| Установка | pip install dashamail-python |
| Требования | Python 3.7+, только стандартная библиотека |
| Импорт | import dashamail |
| Исходники | github.com/DashaMail/dashamail-python |
| Лицензия | MIT |
Имя дистрибутива на PyPI — dashamail-python, а не голое
dashamail: короткое имя занято сторонним неофициальным пакетом.
На import dashamail в коде это не влияет.
Быстрый старт #
from dashamail import DashaMail
dashamail = DashaMail("YOUR_API_KEY")
balance = dashamail.account.balance()
print(balance["balance"])
created = dashamail.lists.create("Newsletter")
dashamail.lists.add_member(created["list_id"], "subscriber@example.com", merge_1="Иван")
dashamail.transactional.send(
"subscriber@example.com",
"sender@yourdomain.com",
"<p>Спасибо за подписку!</p>",
subject="Добро пожаловать",
)
Ресурсы #
Класс DashaMail — фасад с одним атрибутом на каждый раздел API.
Методы возвращают dashamail.Response (ведёт себя как обёрнутый
список/словарь data) либо бросают dashamail.ApiException.
Необязательные параметры передаются именованными аргументами Python
(**kwargs) с теми же именами полей, что и в теле запроса.
| Атрибут | Класс | Раздел |
|---|---|---|
.lists | resources.Lists | Адресные базы |
.segments | resources.Segments | Сегменты |
.campaigns | resources.Campaigns | Рассылки, включая A/B-тесты |
.automations | resources.Automations | Автоматизации |
.workflows | resources.Workflows | Сценарии визуального конструктора |
.templates | resources.Templates | Шаблоны |
.reports | resources.Reports | Отчёты, включая результаты A/B |
.transactional | resources.Transactional | Транзакционные письма |
.account | resources.Account | Аккаунт |
.dialogs | resources.Dialogs | Диалоги |
.router | resources.Router | Обработка входящих |
.images | resources.Images | Изображения |
Пагинация #
start = 0
while True:
page = dashamail.lists.members(list_id, start=start, limit=100)
for member in page:
print(member["email"])
start += page.get_limit()
if not page.has_more():
break
Ошибки #
Каждый неуспешный ответ поднимает подкласс dashamail.ApiException,
выбранный по HTTP-статусу. У любого исключения есть .api_code — тот
же код, что в справочнике ошибок, .http_status
и .details.
| HTTP | Класс исключения |
|---|---|
| 401 | AuthenticationException |
| 402 | PaymentRequiredException |
| 403 | AuthorizationException |
| 404 | NotFoundException |
| 409 | ConflictException |
| 413 | PayloadTooLargeException |
| 422 | ValidationException |
| 429 | RateLimitException — есть .get_retry_after() |
| 5xx | ServerException |
Если ответ вообще не пришёл (обрыв сети, таймаут) — поднимается
dashamail.NetworkException, отдельно от ошибок самого API.
Изображения #
# Готовый файл на диске — без ручного base64:
result = dashamail.images.optimize_file("/path/to/banner.png")
# Сырые байты в ответ вместо base64 в JSON:
binary = dashamail.images.optimize_file_binary("/path/to/banner.png")
binary.save_to("/path/to/banner-optimized.png")
Полная документация — в README репозитория. Вернуться к обзору всех SDK.