unisender-go-api


Nameunisender-go-api JSON
Version 0.3.0 PyPI version JSON
download
home_pagehttps://pypi.org/project/unisender-go-api/
SummaryThin wrapper for the Unisender Go API
upload_time2024-05-20 06:26:21
maintainerNone
docs_urlNone
authorEvgeny Evseev
requires_python<4.0,>=3.10
licenseGNU GPLv3
keywords unisender api httpx wrapper asyncio
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Unisender Go API

Библиотека Unisender Go API упрощает работу с веб API [Unisender Go](https://go.unisender.ru/). Библиотека предоставляет тонкую обёртку над [HTTPX](https://www.python-httpx.org/): она добавляет к обычным возможностям HTTPX свои схемы данных, а также удобные часто используемые функции, но не мешает, при необходимости, спускаться ниже на уровень HTTP-запросов.

[Документация к API Unisender Go](https://godocs.unisender.ru/web-api-ref#authentication).

## Ключевые возможности библиотеки

Ключевые возможности библиотеки Unisender Go API:

- Готовый механизм авторизации
- Поддержка синхронных и асинхронных запросов к API
- Доступ к API из любого места в коде через `contextvars`
- Строгая валидация данных перед отправкой запросов к API
- Строгая валидация данных при получении данных от API
- Наглядные схемы данных для всех типов запросов и ответов к API с цитатами из оф.документации к API
- Подробная отладочная информация по взаимодействию с API
- Возможность добавлять новые API endpoints по мере их появления в Unisender Go прямо из внешнего прикладного кода


## Пример использования

Пример использования синхронного клиента для отправки письма на адрес recepient@example.com:

```python
from unisender_go_api import SyncClient, SendRequest

with SyncClient.setup('place-your-token-here'):
    request = SendRequest(
        message={
            "recipients": [
                {"email": "recepient@example.com"},
            ],
            "body": {
                "html": "<b>Hello, username!</b>",
            },
            "subject": "Greetings to you",
            "from_email": "mailing@dvmn.org",
        },
    )
    request.send()
```


## Известные ограничения

Временные ограничения:

- Из всем методов API реализован только `send`, и то ограничениями:
    - Не поддерживается `recipients[].metadata`
    - Не поддерживается `global_metadata`
    - Не поддерживается `bypass_global`
    - Не поддерживается `bypass_unavailable`
    - Не поддерживается `bypass_unsubscribed`
    - Не поддерживается `bypass_complained`
    - Не поддерживается `headers`
    - Не поддерживается `options`
- Не реализован асинхронный клиент
- Не реализованы shortcuts для упрощённого доступа к API
- Из двух серверов Unisender Go поддерживается только один — https://go1.unisender.ru/ru/transactional/api/


## Исключения

При работе с API библиотека Unisender Go API API выкидывает несколько типов исключений:

- `UnisenderGoError` и его подтипы, см. файл unisender_go_api/exceptions.py
- [`httpx.HTTPError`](https://www.python-httpx.org/exceptions/)
- [`pydantic.ValidationError`](https://docs.pydantic.dev/latest/errors/validation_errors/) — только при подготовке данных исходящего запроса к API, но не при обработке HTTP ответа


            

Raw data

            {
    "_id": null,
    "home_page": "https://pypi.org/project/unisender-go-api/",
    "name": "unisender-go-api",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4.0,>=3.10",
    "maintainer_email": null,
    "keywords": "unisender, api, httpx, wrapper, asyncio",
    "author": "Evgeny Evseev",
    "author_email": "pelid80@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/cd/e6/12a95e704709c49b763584803d28447292b86259a0c13e99471643a3b80f/unisender_go_api-0.3.0.tar.gz",
    "platform": null,
    "description": "# Unisender Go API\n\n\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 Unisender Go API \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0432\u0435\u0431 API [Unisender Go](https://go.unisender.ru/). \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u043e\u043d\u043a\u0443\u044e \u043e\u0431\u0451\u0440\u0442\u043a\u0443 \u043d\u0430\u0434 [HTTPX](https://www.python-httpx.org/): \u043e\u043d\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043a \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c HTTPX \u0441\u0432\u043e\u0438 \u0441\u0445\u0435\u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0443\u0434\u043e\u0431\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043d\u043e \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442, \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0441\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043d\u0438\u0436\u0435 \u043d\u0430 \u0443\u0440\u043e\u0432\u0435\u043d\u044c HTTP-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.\n\n[\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043a API Unisender Go](https://godocs.unisender.ru/web-api-ref#authentication).\n\n## \u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438\n\n\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Unisender Go API:\n\n- \u0413\u043e\u0442\u043e\u0432\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438\n- \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0445 \u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a API\n- \u0414\u043e\u0441\u0442\u0443\u043f \u043a API \u0438\u0437 \u043b\u044e\u0431\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u0432 \u043a\u043e\u0434\u0435 \u0447\u0435\u0440\u0435\u0437 `contextvars`\n- \u0421\u0442\u0440\u043e\u0433\u0430\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a API\n- \u0421\u0442\u0440\u043e\u0433\u0430\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442 API\n- \u041d\u0430\u0433\u043b\u044f\u0434\u043d\u044b\u0435 \u0441\u0445\u0435\u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0442\u0438\u043f\u043e\u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0438 \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u043a API \u0441 \u0446\u0438\u0442\u0430\u0442\u0430\u043c\u0438 \u0438\u0437 \u043e\u0444.\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043a API\n- \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044e \u0441 API\n- \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u043e\u0432\u044b\u0435 API endpoints \u043f\u043e \u043c\u0435\u0440\u0435 \u0438\u0445 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0432 Unisender Go \u043f\u0440\u044f\u043c\u043e \u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430\n\n\n## \u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f\n\n\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043f\u0438\u0441\u044c\u043c\u0430 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 recepient@example.com:\n\n```python\nfrom unisender_go_api import SyncClient, SendRequest\n\nwith SyncClient.setup('place-your-token-here'):\n    request = SendRequest(\n        message={\n            \"recipients\": [\n                {\"email\": \"recepient@example.com\"},\n            ],\n            \"body\": {\n                \"html\": \"<b>Hello, username!</b>\",\n            },\n            \"subject\": \"Greetings to you\",\n            \"from_email\": \"mailing@dvmn.org\",\n        },\n    )\n    request.send()\n```\n\n\n## \u0418\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\n\n\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f:\n\n- \u0418\u0437 \u0432\u0441\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u0432 API \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0442\u043e\u043b\u044c\u043a\u043e `send`, \u0438 \u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438:\n    - \u041d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f `recipients[].metadata`\n    - \u041d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f `global_metadata`\n    - \u041d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f `bypass_global`\n    - \u041d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f `bypass_unavailable`\n    - \u041d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f `bypass_unsubscribed`\n    - \u041d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f `bypass_complained`\n    - \u041d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f `headers`\n    - \u041d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f `options`\n- \u041d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442\n- \u041d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b shortcuts \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a API\n- \u0418\u0437 \u0434\u0432\u0443\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 Unisender Go \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u2014 https://go1.unisender.ru/ru/transactional/api/\n\n\n## \u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\n\n\u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 API \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 Unisender Go API API \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0438\u043f\u043e\u0432 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439:\n\n- `UnisenderGoError` \u0438 \u0435\u0433\u043e \u043f\u043e\u0434\u0442\u0438\u043f\u044b, \u0441\u043c. \u0444\u0430\u0439\u043b unisender_go_api/exceptions.py\n- [`httpx.HTTPError`](https://www.python-httpx.org/exceptions/)\n- [`pydantic.ValidationError`](https://docs.pydantic.dev/latest/errors/validation_errors/) \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043a API, \u043d\u043e \u043d\u0435 \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 HTTP \u043e\u0442\u0432\u0435\u0442\u0430\n\n",
    "bugtrack_url": null,
    "license": "GNU GPLv3",
    "summary": "Thin wrapper for the Unisender Go API",
    "version": "0.3.0",
    "project_urls": {
        "Homepage": "https://pypi.org/project/unisender-go-api/",
        "Repository": "https://gitlab.dvmn.org/dvmn-open-source-dev-tools/unisender-go-api"
    },
    "split_keywords": [
        "unisender",
        " api",
        " httpx",
        " wrapper",
        " asyncio"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3e8f45b3176759a8fa87b222cb5c3c3b1a3504edc1c50ca1ab915b0abdd089c7",
                "md5": "f38cbc3ad47013be2bcb4683ab8c937e",
                "sha256": "92c8e1df9ce37f7c134af536c8bd32e688790cc90c7293d2595340dd1b3a95d1"
            },
            "downloads": -1,
            "filename": "unisender_go_api-0.3.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "f38cbc3ad47013be2bcb4683ab8c937e",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4.0,>=3.10",
            "size": 10792,
            "upload_time": "2024-05-20T06:26:19",
            "upload_time_iso_8601": "2024-05-20T06:26:19.545872Z",
            "url": "https://files.pythonhosted.org/packages/3e/8f/45b3176759a8fa87b222cb5c3c3b1a3504edc1c50ca1ab915b0abdd089c7/unisender_go_api-0.3.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "cde612a95e704709c49b763584803d28447292b86259a0c13e99471643a3b80f",
                "md5": "577a1e1e3101bb64b079f0c8f674f4da",
                "sha256": "a0e9d06318b83d1fc3ed1c0dce9d44e6e851d70f9d48f36a7fdcddcf19f80862"
            },
            "downloads": -1,
            "filename": "unisender_go_api-0.3.0.tar.gz",
            "has_sig": false,
            "md5_digest": "577a1e1e3101bb64b079f0c8f674f4da",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4.0,>=3.10",
            "size": 10041,
            "upload_time": "2024-05-20T06:26:21",
            "upload_time_iso_8601": "2024-05-20T06:26:21.239500Z",
            "url": "https://files.pythonhosted.org/packages/cd/e6/12a95e704709c49b763584803d28447292b86259a0c13e99471643a3b80f/unisender_go_api-0.3.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-05-20 06:26:21",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "unisender-go-api"
}
        
Elapsed time: 0.52653s