Вложения проектов, портфелей и целей
К сущностям (project, portfolio, goal — см. «Проекты, портфели и цели»)
можно прикреплять файлы так же, как к задачам, но через отдельный набор методов /entities.
Сама модель файла та же, что и у вложений задачи — Attachment (см.
«Прикреплённые файлы» — там же описаны все её поля).
Обратите внимание
Как и все методы YaTracker, методы работы с вложениями сущностей являются асинхронными.
В примерах ниже вызовы показаны так, как будто мы уже находимся внутри корутины.
Тип сущности идёт первым аргументом, как и в остальных методах /entities — "project",
"portfolio" или "goal". Во время выполнения значение не проверяется и подставляется в адрес
запроса как есть.
Официальная документация: https://yandex.ru/support/tracker/ru/api/entities/attachments/get-all-attachments
Получение вложений
get_entity_attachments
async def get_entity_attachments(
self,
entity_type: EntityType,
entity_id: str | int,
) -> list[Attachment]: ...
Возвращает список файлов, прикреплённых к сущности.
attachments = await tracker.get_entity_attachments("project", "655f3be523db2132")
for attachment in attachments:
print(attachment.id, attachment.name, attachment.size)
entity_type—"project","portfolio"или"goal".entity_id— идентификатор или короткий идентификатор (short_id) сущности.
Источник: https://yandex.ru/support/tracker/ru/api/entities/attachments/get-all-attachments
get_entity_attachment
async def get_entity_attachment(
self,
entity_type: EntityType,
entity_id: str | int,
attachment_id: str | int,
) -> Attachment: ...
Возвращает метаданные одного прикреплённого файла — не его содержимое: чтобы скачать сам файл,
используйте ссылку из Attachment.content (как и для вложений задач, у сущностей отдельного
метода скачивания нет).
attachment = await tracker.get_entity_attachment(
"project",
"655f3be523db2132",
attachment_id=5,
)
print(attachment.mimetype, attachment.content)
entity_type— тип сущности.entity_id— идентификатор илиshort_id.attachment_id— идентификатор файла.
Источник: https://yandex.ru/support/tracker/ru/api/entities/attachments/get-attachment
Прикрепление файла
attach_file_to_entity
async def attach_file_to_entity(
self,
entity_type: EntityType,
entity_id: str | int,
file_id: str | int,
*,
notify: bool | None = None,
notify_author: bool | None = None,
fields: str | Sequence[str] | None = None,
expand: str | None = None,
) -> Entity: ...
Прикрепляет к сущности уже загруженный временный файл.
Файл нужно загрузить заранее
В отличие от attach_file у задач, этот метод ничего не загружает сам: сначала отправьте
файл в Трекер методом upload_temp_file() (см. «Прикреплённые файлы») и
передайте id полученного вложения как file_id. Метод возвращает не вложение, а
обновлённый объект Entity — сущность, к которой файл был прикреплён.
from yatracker.types import Entity
attachment = await tracker.upload_temp_file(file, "newimage.jpg")
project: Entity = await tracker.attach_file_to_entity(
"project",
"655f3be523db2132",
file_id=attachment.id,
expand="attachments",
)
for attached in project.attachments or []:
print(attached.name)
entity_type— тип сущности.entity_id— идентификатор сущности.file_id— идентификатор временного файла (результатupload_temp_file).notify— уведомлять ли пользователей, указанных в полях сущности (по умолчаниюTrue).notify_author— уведомлять ли автора изменения (по умолчаниюFalse).fields— дополнительные поля сущности, которые нужно вернуть в ответе (строка или последовательность имён — будет склеена через запятую).expand—"all"или"attachments", чтобы получить в ответе список вложений (Entity.attachments) — как в примере выше.
Источник: https://yandex.ru/support/tracker/ru/api/entities/attachments/add-attachment
Удаление вложения
delete_entity_attachment
async def delete_entity_attachment(
self,
entity_type: EntityType,
entity_id: str | int,
attachment_id: str | int,
) -> bool: ...
Удаляет файл, прикреплённый к сущности. Возвращает True при успехе.
entity_type— тип сущности.entity_id— идентификатор илиshort_id.attachment_id— идентификатор файла.
Источник: https://yandex.ru/support/tracker/ru/api/entities/attachments/delete-attachment
Модель Attachment
Методы этого раздела возвращают ту же модель Attachment, что и вложения задач — со всеми
полями (url, id, name, content, thumbnail, created_by, created_at, mimetype,
size, metadata, comment_id), см. таблицу в «Прикреплённые файлы».
attach_file_to_entity — единственное исключение: он возвращает не Attachment, а Entity
(см. «Проекты, портфели и цели»), внутри которой список вложений лежит в
Entity.attachments.
Типичный сценарий
Загрузить файл как временный, прикрепить его к проекту и сразу получить список вложений в ответе, а затем удалить один из них:
with Path(FILE_PATH).open("rb") as file:
temp_file = await tracker.upload_temp_file(file, "report.pdf")
project = await tracker.attach_file_to_entity(
"project",
"655f3be523db2132",
file_id=temp_file.id,
expand="attachments",
)
attachments = project.attachments or await tracker.get_entity_attachments(
"project",
"655f3be523db2132",
)
for attachment in attachments:
if attachment.name == "report.pdf":
await tracker.delete_entity_attachment(
"project",
"655f3be523db2132",
attachment_id=attachment.id,
)