Cluster · разработчикам

Drawing

Передача ресурсов и растеризация сцены через установленный модуль Image Generator.

Все методы SDK · Типы и ошибки

Получение объекта

drawing = app.images("image-generator-id")

drawing выбирает установленный Image Generator; image_bytes содержит настоящее изображение, canvas является допустимой сценой.

__init__

Создаёт Drawing. Обычный способ получения объекта показан выше; прямой конструктор не выполняет сетевые запросы.

def __init__(app: App, module: Module) -> None: ...

Аргументы

Результат

None. Создаёт Drawing. Обычный способ получения объекта показан выше; прямой конструктор не выполняет сетевые запросы.

Права

Не требует прав: операция выполняется локально и сама не обращается к ядру. Права понадобятся при отправке, сохранении или чтении через службу.

Ошибки

Пример

# Обычный способ получения объекта:
drawing = app.images("image-generator-id")

canvas

Создаёт локальную сцену без обращения к зависимости.

def canvas(width: float = 1200, height: float = 700, background: str | None = None) -> Canvas: ...

Аргументы

Результат

Canvas. Создаёт локальную сцену без обращения к зависимости.

Права

Не требует прав: операция выполняется локально и сама не обращается к ядру. Права понадобятся при отправке, сохранении или чтении через службу.

Ошибки

Пример

result = drawing.canvas()

call

Вызывает функцию генератора и проверяет форму результата и вложенную ошибку.

async def call(function: str, **values: JSON) -> dict[str, JSON] | bool: ...

Аргументы

Результат

dict[str, JSON] | bool. Вызывает функцию генератора и проверяет форму результата и вложенную ошибку.

Права

Нужны modules.call.

Ошибки

Пример

result = await drawing.call("status", count=1)

upload

Принимает bytes, bytearray или готовый File размером 1..2097152 байт. Проверяет доступ к File, ищет фон в кэше генератора по SHA-256 и размеру, при промахе загружает частями. Возвращает новый Asset вызывающего экземпляра; старый генератор поддерживается без кэширования.

async def upload(source: bytes | bytearray | File) -> Asset: ...

Аргументы

Результат

Asset. Новый временный Asset. При попадании в кэш исходные байты повторно не передаются.

Права

Нужны modules.call; files.read при источнике File. Для чужих файлов своего юзербота дополнительно files.full либо отдельное разрешение конфигурационного файла на чтение.

Ошибки

Пример

asset = await drawing.upload(image_bytes)

measure

Запрашивает размеры текста с выбранными параметрами стиля.

async def measure(text: str | Text, **style: JSON) -> dict[str, JSON]: ...

Аргументы

Результат

dict[str, JSON]. Запрашивает размеры текста с выбранными параметрами стиля.

Права

Нужны modules.call.

Ошибки

Пример

metrics = await drawing.measure("Cluster", size=24)

render

Проверяет сцену, получает PNG частями, проверяет метаданные и SHA256, записывает файл Cluster со сроком 120 секунд и освобождает ресурс генератора. Полученные части собираются в блоки до 64 KiB перед записью файла; метаданные, границы частей и итоговая SHA-256 проверяются.

async def render(canvas: Canvas | dict[str, JSON], filename: str = 'image.png') -> File: ...

Аргументы

Результат

File. Проверяет сцену, получает PNG частями, проверяет метаданные и SHA256, записывает файл Cluster со сроком 120 секунд и освобождает ресурс генератора.

Права

Нужны modules.call + files.write. Для чужих файлов своего юзербота дополнительно files.full либо отдельное разрешение конфигурационного файла на чтение.

Ошибки

Пример

file = await drawing.render(canvas, "card.png")

release

Пытается освободить ресурс генератора. RuntimeError и TimeoutError при очистке подавляются.

async def release(id: str) -> None: ...

Аргументы

Результат

None. Пытается освободить ресурс генератора. RuntimeError и TimeoutError при очистке подавляются.

Права

Нужны modules.call.

Ошибки

Пример

result = await drawing.release("object-id")