Python
Журнал изменений
Каждый выпуск пакета, новые сверху.
0.0.1
Первый выпуск. Он покрывает весь TypeScript SDK в том виде, в каком тот был в 0.0.8, плюс изменения, запланированные после него: 430 методов в 41 пространстве имён, каждый под своим именем из TypeScript в snake_case. Проверка соответствия доказывает, что каждый из них отправляет ровно тот запрос, который отправляет его аналог на TypeScript, один раз без опций и один раз со всеми заданными опциями.
- У
OpenEmailиAsyncOpenEmailесть атрибут для каждого пространства имён, отemails,threadsиtemplatesдоprovider_imports,dns_connectionsиaccount.listAllстановитсяlist_all,getActiveстановитсяget_active, аtempMailстановитсяtemp_mail. - Тело запроса представляет собой словарь, ключи которого сохраняют имена API в camelCase, параметры вызова передаются именованными аргументами в snake_case, например
idempotency_key=иlimit=, а ответ возвращается словарём. У каждого тела и результата естьTypedDictвopenemail.typesс тем же именем, что и в TypeScript. - У
AsyncOpenEmailте же методы с теми же аргументами, вызываемые через await, и он работает и на asyncio, и на trio. - У каждого постраничного ресурса есть
listдля одной страницы,list_allдля всех элементов списком иiterate, который выдаёт элементы и запрашивает следующую страницу, только когда до неё доходит. - Отказ API выбрасывает
OpenEmailApiErrorсоstatus,type,code,paramиrequest_id, а такжеis_validation,is_not_found,is_rate_limited,is_step_up_required,is_retryableи другими проверками. Полное отсутствие ответа выбрасываетOpenEmailNetworkErrorсis_timeout, когда истёк срок ожидания. from openemail import openemailдаёт готовый клиент, который строится изOPENEMAIL_API_KEYпри первом обращении, аinitнастраивает его один раз при запуске.create_temp_mailиcreate_async_temp_mailоткрывают одноразовые ящики без учётных данных.access_token=принимает токен доступа OAuth или функцию, которая его возвращает и вызывается перед каждым запросом.verify_webhook_signatureпроверяет доставку за постоянное время и возвращает разобранное событие.client.raw.requestдостаёт до эндпоинта, который ещё не оборачивает ни один метод.- Чтения повторяются при 408 и 5xx, а 429 только если он несёт
Retry-After.timeoutограничивает всю попытку, включая тело ответа, а учётные данные никогда не отправляются по обычному HTTP, кроме как на сервер на этой машине. - Ему нужен Python 3.10 или новее, и он зависит только от
httpx,anyioиtyping-extensions.