Исходный код amocrm.models.common

from __future__ import annotations

import dataclasses
from dataclasses import dataclass, field
from typing import Any


[документация] class CustomFieldsMixin: """Mixin для типизированного доступа к кастомным полям AmoCRM. Предоставляет методы для чтения значений кастомных полей по их ID. Должен использоваться совместно с датаклассами, имеющими поле ``custom_fields_values: list[CustomFieldValue] | None``. """ custom_fields_values: list[CustomFieldValue] | None
[документация] def get_cf_raw(self, field_id: int) -> list[dict[str, Any]] | None: """Вернуть список значений кастомного поля по его ID или ``None``.""" if self.custom_fields_values is None: return None for cf in self.custom_fields_values: if cf.field_id == field_id: return cf.values return None
[документация] def get_cf_value(self, field_id: int) -> Any: """Вернуть первое значение поля (``values[0]["value"]``) или ``None``.""" values = self.get_cf_raw(field_id) if not values: return None return values[0].get("value")
[документация] def get_cf_values(self, field_id: int) -> list[Any]: """Вернуть все значения поля (``values[i]["value"]``).""" values = self.get_cf_raw(field_id) if not values: return [] return [v.get("value") for v in values]
[документация] def get_cf_enum_id(self, field_id: int) -> int | None: """Вернуть ``enum_id`` первого значения поля или ``None``.""" values = self.get_cf_raw(field_id) if not values: return None return values[0].get("enum_id")
[документация] @dataclass(kw_only=True) class Tag: """Тег сущности AmoCRM. Attributes: id: Идентификатор тега. name: Название тега. """ id: int | None = None name: str | None = None
[документация] @classmethod def from_dict(cls, data: dict[str, Any]) -> Tag: """Создать экземпляр из словаря API.""" return cls(id=data.get("id"), name=data.get("name"))
[документация] def to_dict(self) -> dict[str, Any]: """Сериализовать в словарь, исключая поля со значением ``None``.""" return {k: v for k, v in dataclasses.asdict(self).items() if v is not None}
[документация] @dataclass(kw_only=True) class CustomFieldValue: """Значение кастомного поля AmoCRM. Attributes: field_id: Идентификатор кастомного поля. values: Список значений поля (каждое — словарь с ключами ``value`` и опционально ``enum_id`` / ``enum_code``). """ field_id: int values: list[dict[str, Any]] = field(default_factory=list)
[документация] @classmethod def from_dict(cls, data: dict[str, Any]) -> CustomFieldValue: """Создать экземпляр из словаря API.""" return cls(field_id=data["field_id"], values=data.get("values", []))
[документация] def to_dict(self) -> dict[str, Any]: """Сериализовать в словарь для отправки в API.""" return {"field_id": self.field_id, "values": self.values}