Skip to main content

Is an asynchronous implementation for AlfaCRM API

Project description

Alfacrm

Асинхронный Python‑клиент для AlfaCRM REST API v2.

Библиотека построена на aiohttp и pydantic v2, предоставляет удобные менеджеры сущностей (list/get/save) и асинхронную пагинацию.

Требования

  • Python >= 3.12
  • Зависимости устанавливаются автоматически: aiohttp, pydantic

Установка

pip install alfacrm

Быстрый старт

import asyncio
import os

from alfacrm import AlfaClient

ALFACRM_API_KEY = os.getenv("ALFACRM_API_KEY")
ALFACRM_EMAIL = os.getenv("ALFACRM_EMAIL")
ALFACRM_BASE_URL = os.getenv("ALFACRM_BASE_URL")  # например: "demo.s20.online" или полный URL
ALFACRM_DEFAULT_BRANCH_ID = 1


async def main():
    client = AlfaClient(
        hostname=ALFACRM_BASE_URL,
        email=ALFACRM_EMAIL,
        api_key=ALFACRM_API_KEY,
        branch_id=ALFACRM_DEFAULT_BRANCH_ID,
    )
    try:
        # Проверка авторизации (опционально)
        if not await client.check_auth():
            print("Auth error")
            return

        # Пример: получить урок с id=1
        lesson = await client.lesson.get(1)
        print(lesson)

        # Пример: изменить и сохранить филиалы
        branches = await client.branch.list(page=0, count=20)
        for b in branches:
            b.name = f"{b.name} - Edited"
            await client.branch.save(b)
    finally:
        await client.close()


if __name__ == "__main__":
    # На Windows может понадобиться политика цикла событий
    # import asyncio; asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
    asyncio.run(main())

Клиент и аутентификация

  • Параметры клиента: hostname, email, api_key, branch_id.
  • Токен авторизации обновляется автоматически через AuthManager.
  • Метод check_auth() возвращает True/False без исключений.
  • Закрывайте соединение вызовом await client.close().

Операции с сущностями

Каждая сущность доступна через менеджер, например client.customer, client.branch и т.д.

  • list: items = await client.customer.list(page=0, count=100, **filters)
  • get: customer = await client.customer.get(123)
  • save: await client.customer.save(model) — создаёт или обновляет по наличию id в модели

Модели — это Pydantic‑классы (v2). Метод serialize() формирует JSON‑совместимый payload; поля дат/времени преобразуются автоматически.

Пагинация

Асинхронный итератор страниц:

async for page in client.customer.paginator(page_size=100, is_study=True):
    for customer in page.items:
        print(customer.id, customer.name)

Где page.items — элементы текущей страницы, page.total — всего записей, page.count — элементов на странице.

Кастомные модели (пользовательские поля)

Вы можете расширять встроенные модели и подменять их в менеджерах.

from alfacrm import AlfaClient, managers
from alfacrm.entities import Customer


class CustomCustomer(Customer):
    custom_field: int | None = None


class CustomAlfaClient(AlfaClient):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # Подменяем модель в соответствующем менеджере
        self.customer = managers.Customer(
            api_client=self.api_client,
            entity_class=CustomCustomer,
        )

Доступные сущности

  • Branch, Location, Customer, StudyStatus, Subject
  • LeadStatus, LeadSource, LeadReject, Communication, Log
  • Group, Lesson, LessonType, RegularLesson, Room, Task
  • Tariff, CustomerTariff, Discount
  • Pay, PayAccount, PayItem, PayItemCategory
  • CGI

Доступ к ним через одноимённые менеджеры client.<name>.

Обработка ошибок

Исключения (все наследуются от ApiException):

  • BadRequest (400), Unauthorized (401), Forbidden (403), NotFound (404), MethodNotAllowed (405)

Полезно оборачивать вызовы в try/except при интеграции и логировать str(e).

Примечания

  • hostname можно указывать как короткое имя (demo) или полный хост/URL — клиент приведёт к *.s20.online автоматически.
  • Параметр branch_id включается в путь v2api/{branch_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

alfacrm-0.1.3.tar.gz (46.1 kB view details)

Uploaded Source

Built Distribution

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

alfacrm-0.1.3-py3-none-any.whl (31.1 kB view details)

Uploaded Python 3

File details

Details for the file alfacrm-0.1.3.tar.gz.

File metadata

  • Download URL: alfacrm-0.1.3.tar.gz
  • Upload date:
  • Size: 46.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.15

File hashes

Hashes for alfacrm-0.1.3.tar.gz
Algorithm Hash digest
SHA256 78b9d8f8f3c0ffdaed1510a7a1046830e43b598d384ddfdfd5db59fbe99e84c3
MD5 37324aae346fe812a3fc38423617fc17
BLAKE2b-256 f7679404543d9dbe09b19cd2f833087d37832b79baefe6e63465ab697fb3a607

See more details on using hashes here.

File details

Details for the file alfacrm-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: alfacrm-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 31.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.15

File hashes

Hashes for alfacrm-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 3b2d7aaf5cdcb96afcb6d4c5eb6b7207e5bc877d4ebbcf08264d97b71fc368ab
MD5 a78c4e94bd7cd6f60de45c162740ff74
BLAKE2b-256 4505a8aa7c5a57613eea28182fda28ebe9d69ce73050d61ad3003b7607d8d6a1

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