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

Python-скрипты

Python в редакторе смарт-скриптов поддерживается с версии 2.268.38. Это третий язык наряду с Lua и JavaScript, но работает принципиально иначе.

Как работает

Lua и JS исполняются прямо внутри бэкенда (in-process). Python — нет: скрипт отправляется HTTP-запросом на внешний сервис Python Executor (отдельный Docker-контейнер). Бэкенд делает POST /execute/code, Executor выполняет скрипт и возвращает результат.

Python удобен, когда логика простая и нужна только обработка данных из контекста. Для полноценной автоматизации с обращениями к платформе — лучше Lua или JS.

Структура скрипта

Шаблон по умолчанию:

def execute(ctx):
    pass

Результат возвращается через return value — в отличие от Lua/JS, где пишут RESULT = value. В ctx передаётся контекст задачи: примитивы (строки, числа, bool, даты), session_user_id, коллекции. Сложные CLR-объекты и EntityBase передаются только как .Id.

Ключевое ограничение

Python-скрипт не имеет доступа к API платформы — нельзя вызвать SQL, HTTP, SMART, CACHE, FILES и другие объекты, которые доступны в Lua/JS. Работать можно только с данными из контекста ctx. Если нужно обращаться к БД или делать HTTP-вызовы — выбирай Lua или JavaScript.

Таймаут — 30 секунд (у Lua/JS — 5 минут).

Редактор

В интерфейсе редактор смарт-скриптов переключается в режим python, появляется dropdown выбора языка (Lua / JavaScript / Python).

Конфигурация

Для работы Python нужно в настройках платформы (ServiceSettingsEntity) задать ApiUrl Python Executor (например, http://python-executor:8000) и опционально ApiKey. Если ApiUrl не задан — при вызове Python-скрипта будет ошибка.

Настройка выполняется в разделе администрирования → Сервис Python Executor.

Сравнение с Lua и JavaScript

Аспект Lua JavaScript Python
Модель исполнения In-process (NLua) In-process (Jint) Внешний HTTP-сервис
Таймаут 5 мин 5 мин 30 сек
API платформы (SQL, HTTP, SMART...) Доступны Доступны Недоступны
Возврат результата RESULT = value RESULT = value return value
Библиотека (include) Да Да Нет
Доп. инфраструктура Нет Нет Docker-контейнер

Полезные ссылки