Перейти к содержанию

Python Executor

Доступен, начиная с версии 2.267 Андромеда

Python Executor — внешний FastAPI-микросервис, который исполняет Python-скрипты по HTTP-запросу из 1Формы. Это язык смарт-скриптов наряду с Lua и JavaScript (LanguageId = 2), но работает принципиально иначе: Lua и JS выполняются in-process в бэкенде, а Python отправляется HTTP-запросом на отдельный Docker-контейнер.

Python удобен для задач обработки данных, NLP, аналитики — всего, что требует pip-пакетов (pandas, requests, sqlglot, pymorphy3, openai). При этом Python-скрипт не имеет доступа к API платформы (SQL, HTTP, SMART, CACHE, FILES) — он работает только с данными из контекста ctx. Для полноценной автоматизации с обращением к БД и платформенным API рекомендуются Lua или JS.

Скрипт создаётся на странице Смарт-скрипты, в выпадающем списке выбирается язык Python. Шаблон функции:

def execute(ctx):
    # ctx содержит task_id, user_id, примитивы, коллекции
    return result

Результат отображается в UI в панели Результат.

Два режима работы: - POST /execute — запуск предустановленного скрипта по имени (site-health, sql-deps и др.); - POST /execute/code — выполнение произвольного кода из SmartScripts (основной режим), код приходит из БД.

Ответ сервиса содержит:

Поле Описание
status Результат выполнения: ok / error
result Возвращаемое значение скрипта (return value)
output Вывод print() + строковое представление результата
error Текст ошибки (при status=error)
duration_ms Время выполнения в миллисекундах

Ключевые ограничения: - Таймаут — 30 секунд (у Lua/JS — 5 минут); - Нет доступа к платформенным API (SQL, HTTP, SMART, CACHE, FILES, REGISTRY); - Нет механизма include (библиотеки скриптов); - Sandbox: заблокированы os, subprocess, eval, exec, open (запись), sys.exit.

Доступные библиотеки в контейнере: requests, pandas, openpyxl, sqlglot, pymorphy3, nltk, rapidfuzz, openai, pyyaml, transliterate, pyenchant — плюс вся стандартная библиотека Python (json, datetime, re, math, collections и др.).

ℹ️ Перед добавлением сервиса предварительно необходимо создать его на странице Сервисы

Настройки Python Executor:

Параметр Описание
Сервис В поле необходимо выбрать предварительно созданный сервис с типом Python Executor на странице Сервисы
API Key Ключ авторизации, передаётся в заголовке X-Api-Key. Если не задан — сервис работает в dev-режиме без авторизации
API Url URL сервиса, например http://python-executor:8000. Без него Python-скрипты не работают — будет ошибка «Python Executor не настроен»