Преобразование выгрузки на Python
Язык сбора и язык преобразования независимы. PHP или JavaScript может собирать записи, а Python готовить их к CSV/JSON/XML, файлу, HTTP endpoint, Webhook или поддерживаемому приёмнику. Преобразование выполняется после сопоставления полей выгрузки и не меняет исходные записи сайта.
Вход и выход
def run(ctx):
items = ctx.params().get('items', [])
for item in items:
result = dict(item)
quantity = result.get('quantity')
result['in_stock'] = quantity is not None and float(quantity) > 0
ctx.emit(result)
Платформа передаёт список записей в ctx.params()['items']; безопасный вариант для пустого входа: .get('items', []). Каждую выходную запись нужно отправить через ctx.emit(dict). Возврат списка из run() не является выходом выгрузки. Точка входа всегда run(ctx), как у других языков преобразований.
Не передавайте __key как собственное поле результата. В этом режиме идентичность записи контролирует механизм выгрузок, а не произвольный ключ нового каталога. Передавайте только требуемые поля уже сопоставленной структуры.
Режимы
«Записи» подходит для вычисления, очистки и переименования полей. Количество и порядок должны сохраняться. Пропустить запись или вернуть две вместо одной нельзя: платформа проверяет результат.
Режим «Набор» применяется к файлам, HTTP endpoint и Webhook; подключённая доставка в БД не позволяет сохранить этот режим. «Набор» подходит для фильтрации, сортировки, группировки и сводок. Размер полного входа ограничен: до 10 000 записей и 16 МБ, один вызов до 30 секунд. Код не может самостоятельно повысить эти ограничения. Для больших выборок измените задачу или предварительно сузьте данные.
def run(ctx):
totals = {}
for item in ctx.param('items', []):
category = str(item.get('category') or 'other')
quantity = float(item.get('quantity') or 0)
totals[category] = totals.get(category, 0) + quantity
for category in sorted(totals):
ctx.emit({'category': category, 'quantity': totals[category]})
Этот пример предназначен только для режима «Набор». Итоговые поля должны соответствовать ожидаемой схеме получателя.
Страницы endpoint и полный файл
При обращении к HTTP endpoint преобразуется текущая страница. Итог этой страницы не является итогом всего каталога. При подготовке файла и Webhook используется допустимая полная выборка. Если нужна общая сводка, создайте её в отдельном сценарии или используйте режим и способ доставки с полной выборкой в пределах ограничений.
Сортировка внутри текущей страницы не делает все страницы глобально отсортированными. Курсор и ограничения доступа проверяются системой выгрузок; Python-преобразование их не обходит. Расписание и события доставки остаются общими для всех языков.
Разрешённые действия
Преобразование является вычислением без внешних сервисов. HTTP, браузер, почта, документы, S3, секреты и AI-вызовы недоступны. Можно использовать обычные вычисления, разрешённую стандартную библиотеку, param/params, emit, журнал и другие допустимые локальные методы. Попытка запретного обращения завершает преобразование ошибкой, вместо частичной успешной выгрузки.
Для диагностики сначала откройте предпросмотр на небольшой выборке и проверьте ноль записей, пропущенное поле, нулевое количество, неверный тип и весь порядок. Не перехватывайте ошибки молча. Исправьте код, повторите предпросмотр, затем проверьте конкретный канал доставки. Правила выдачи токенов описаны в HTTP-выгрузке.
Размер сериализованного сообщения
Логический предел набора 16 MiB не отменяет предел сериализованного сообщения 12 MiB с параметрами и служебными данными. В него должны помещаться и вход, и отправляемый выход. Допустимая выборка может быть меньше; при ошибке сократите число записей или большие поля. Ошибка ограничения не означает успешную обрезанную выгрузку.