Skip to main content

API client for ServiceDesk Plus

Project description

REST API client for ServiceDesk Plus

1) Методы

1.1) get_request - получение заявки по id
1.2) get_requests - получение заявок по условиям
1.3) create_request - создание заявки
1.4) update_request - обновление заявки
1.5) cancel_request - отмена заявки
1.6) attach_file_to_request - прикрепление файлов к заявке
1.7) get_categories - получение категорий
1.8) get_service_categories - получение категорий услуг
1.9) get_subcategories - получение подкатегорий
1.10) get_templates - получение шаблонов для заявок
1.11) get_template - получение шаблона по id
1.12) get_urgencies - получение возможных значений срочности заявок
1.13) add_note - добавление заметок к заявке
1.14) attach_file_to_note - прикрепление файлов к заметке
1.15) get_resolution - получение решения заявки
1.16) download - скачивает ресурс по указанному URL
1.17) stream - стримит ресурс по указанному URL

Все методы могут вызывать исключения HelpdeskClientError и httpx.HTTPError (stream только httpx.HTTPError)

2) Установка

pip

pip install servicedesk-client

pdm

pdm add servicedesk-client

3) Пример внедрения

3.1) Настройки

class HelpdeskSettings(BaseSettings):
    model_config = SettingsConfigDict(str_strip_whitespace=True, env_prefix="helpdesk_")

    authtoken: SecretStr
    base_url: str
    timeout: int

3.2) Http Client

HelpdeskHttpClient = NewType("HelpdeskHttpClient", httpx.AsyncClient)

@asynccontextmanager
async def get_helpdesk_http_client(
    settings: HelpdeskSettings,
) -> AsyncIterator[HelpdeskHttpClient]:

    async with httpx.AsyncClient(
        headers={"authtoken": settings.authtoken.get_secret_value()},
        base_url=settings.base_url,
        timeout=settings.timeout,
    ) as client:
        yield HelpdeskHttpClient(client)

3.3) DI (используется библиотека https://pypi.org/project/aioinject/)

from helpdesk_client.v3 import HelpdeskClient


@asynccontextmanager
async def _get_helpdesk_client(
    http_client: HelpdeskHttpClient,
) -> AsyncIterator[HelpdeskClient]:
    yield HelpdeskClient(http_client=http_client)


PROVIDERS: Providers = [
    aioinject.Singleton(get_helpdesk_http_client, HelpdeskHttpClient),
    aioinject.Singleton(_get_helpdesk_client),
]

3.4) Helpdesk Service

from helpdesk_client.v3 import HelpdeskClient


class HelpdeskService:
    def __init__(self, helpdesk_client: HelpdeskClient) -> None:
        self._helpdesk_client = helpdesk_client

    ...

4) Пример получения 5 последних заявок

import httpx
from helpdesk_client.enums import SortEnum
from helpdesk_client.exceptions import HelpdeskClientError
from helpdesk_client.v3 import HelpdeskClient
from helpdesk_client.v3.schemas import (
    RequestFilterParams,
    RequestListSchema,
    RequestSearchFields,
)
from result import as_async_result


class HelpdeskService:
    def __init__(self, helpdesk_client: HelpdeskClient) -> None:
        self._helpdesk_client = helpdesk_client

    @as_async_result(HelpdeskClientError, httpx.HTTPError)
    async def get_requests(
        self,
        full_name: str,
        requester_id: int | None,
    ) -> RequestListSchema:

        search_fields = RequestSearchFields(requester_id=requester_id)
        if requester_id is None:
            search_fields = RequestSearchFields(requester_name=full_name)
        return await self._helpdesk_client.get_requests(
            filter_=RequestFilterParams(
                limit=5,
                offset=0,
                sort_field="created_time",
                sort_order=SortEnum.desc,
                search_fields=search_fields,
            ),
        )

Не удалось составить запрос для получения списка заявок по почте заявителя. Поэтому для запроса используются ФИО или helpdesk_id.

ФИО в редких случаях могут повторяться у разных людей (возможны коллизии), но helpdesk_id доступен не всегда, поэтому является опциональным. В примере helpdesk_id используется в запросе только тогда, когда передается в метод.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

servicedesk_client-0.4.2.tar.gz (11.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

servicedesk_client-0.4.2-py3-none-any.whl (13.4 kB view details)

Uploaded Python 3

File details

Details for the file servicedesk_client-0.4.2.tar.gz.

File metadata

  • Download URL: servicedesk_client-0.4.2.tar.gz
  • Upload date:
  • Size: 11.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.25.2 CPython/3.13.7 Darwin/24.6.0

File hashes

Hashes for servicedesk_client-0.4.2.tar.gz
Algorithm Hash digest
SHA256 f5f30aa507b5b9daa97a4d2fdd2770fe9ccc73f648c1d7e2cf8e6f7df626560f
MD5 0523e882ea6a06e27da708daac690c81
BLAKE2b-256 6dccf20f272b00b554c3258ac95be0590f8ea7d2e6e5536985aafd36b60ec542

See more details on using hashes here.

File details

Details for the file servicedesk_client-0.4.2-py3-none-any.whl.

File metadata

File hashes

Hashes for servicedesk_client-0.4.2-py3-none-any.whl
Algorithm Hash digest
SHA256 8ec71036be25718536e3eea13ce0b6b3691480d1f885b91a3ed302d70213ba2b
MD5 2b3c0bcde264931d3f3c60ef507041d1
BLAKE2b-256 acfbb41ed1344bdb11c1f3910e804bbe4cbda781d3eddb79fc4c838c9b322fbc

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page