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-контейнер |