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 не настроен» |