Библиотека vm-local-developer
Версия vm-local-developer
0.1.2
Для разработки блоков Python можно использовать специальный пакет vm-local-developer, позволяющий локально работать
с кодом блока Python организуя рабочие пространства в стенды.
При работе в IDE можно получить код из блока Python и передать его обратно. При этом в IDE доступна и локальная отладка кода.
Важно: vmResource
При локальной разработке с использованием vmResource доступны только БД : ClickHouse, MsSQL, Oracle, Postgres.
Подробнее см. Модуль vmResource
Установка Virtualenv
Virtualenv (виртуальная среда/виртуальное окружение) — это инструмент Python для управления зависимостями и изоляции
проектов. Он позволяет устанавливать пакеты pip (сторонние библиотеки) локально в изолированном каталоге для
конкретного проекта, а не глобально - этих пакетов не будет в других проектах Python.
Больше информации по виртуальным окружениям:
Установка виртуального окружения в PyCharm
- Создайте новый проект (
File->New Project...) - В настройках отметьте пункт
New environment using(обычно отмечается по умолчанию):
- Создайте новый проект и дождитесь окончания его конфигурации
Установка пакетов
- Откройте терминал в PyCharm (в самом низу экрана):
Если был открыт не терминал
Если был открыт не терминал (для последних версий PyCharm) необходимо изменить настройки терминала:
1. В терминале нажимаем значок вниз

- После чего можно устанавливать все необходимые пакеты (либо через терминал, либо
File->Settings->Project->Python Interpreter; для отладчика Python блоков не используется, там только через терминал):
- После установки всех пакетов можно запускать
vm_local_developerдля настройки стенда:
Установка vm_local_developer
Необходимо получить файл vm_local_developer.whl и выполнить команду
После обновления версии модуля необходимо пересобрать стенд заново.
Внимание!
Не поддерживаются стенды, созданные до версии 0.1.0. После обновления с версии ниже 0.1.0 рекомендуется выполнить
полную очистку метаданных: vmld -clear
Использование vm_local_developer
В командной строке выполнить скрипт
Параметры скрипта:
-p path/to/folder- пусть до папки, в которой будет создан (или уже находится) стенд разработки. Если параметр не указан, то в качестве пути будет использоваться каталог запуска скрипта.-c path/to/config.json- путь до файла конфигурации.- Можно указать полный путь до файла, если файл с конфигурацией лежит отдельно от приложения.
- Можно указать наименование файла, тогда в папке со стендом (параметр
-p) будет произведен поиск файла по наименованию. - Если параметр не указан, будет произведен поиск файла
config.jsonв папке со стендом.
-b blockId- Идентификатор блока из задачи. Если параметр указан, то параметрblockIdиз файла конфигурации, будет игнорироваться.-t token- Токен авторизации пользователя. Если параметр указан, имя и логин из файла конфигурации, будут игнорироваться.-json json- массив конфигураций- Передача остальных параметров конфигурации, без указания отдельного файла.
- По приоритету стоит выше файла конфигурации, но ниже параметров
-bи-t - Формат передачи - массив JSON:
{"task":"<task_guid>","user":"<user_id>"}
Ограничение реализации
Запрещено указывать пробелы, иначе параметры распознаются некорректно.
-clearПолная очистка приложения: удаление всех стендов, сохраненных в метаданных, и очистка файла с метаданными. Требуется подтверждение операции.-nФлаг создания нового стенда, используется в качестве флага по умолчанию, если не заданы какие-либо другие флаги.-uФлаг обновления стенда (будет взята информация из блока в задаче). Требует подтверждения.-dФлаг удаления стенда и очистки метаданных. Требует подтверждения.-sФлаг сохранения стенда. Код из стенда будет сохранен в блок.-eФлаг запуска блока на расчет в приложении.- При вызове с флагом
-sбудет рассчитан новый код (вначале произойдет обновление блока кодом со стенда, а потом начнется расчет блока). - При одиночном вызове будет рассчитан текущий код в блоке.
- При вызове с флагом
-oФлаг локального расчета стенда и сохранения в блок только выходов. Код будет рассчитан на текущей рабочей машине, а обратно в блок будут сохранены только результаты расчета (выходы блока).
Стенд и метаданные
Стендам задается наименование по шаблону python_block_<id блока>.py, где <id блока> - идентификатор блока из
приложения. При работе с уже созданным стендом поиск нужного стенда происходит по идентификатору блока. Если он не
задан, а по указанному пути (или путь по умолчанию, если он не задан) находится единственный файл, то он будет
использован в качестве указанного стенда. Если стендов несколько, то будет задан вопрос с просьбой указать необходимый
стенд.
Метаданные сохраняются при создании нового стенда, а во всех остальных случаях подтягиваются автоматически, исходя из пути до стенда. Это сделано для того, чтобы можно было создавать несколько стендов с одним и тем же блоком, но в разных папках. Исходя из этого, для корректной работы требуется не менять путь до файла и не изменять его название.
Файл конфигурации
Файл конфигурации может быть любого расширения (.cfg, .txt), но предпочтителен формат .json
(т.к. внутри лежит JSON-массив)
Описание файла конфигурации:
{
"block_id": <Идентификатор блока, строка>,
"task_id": <Идентификатор задачи, строка>,
"host": <Адрес приложения, строка, обязательное>,
"port": <Порт приложения, целое число>,
"user": <Логин пользователя, строка>,
"password": <Пароль пользователя, строка>,
"token": <Токен пользователя, строка>
}
Особенности работы с vm_local_developer
- При каждой инициализации
CDevToolsвыполняются запросы к приложению (получение данных/обновление блока/расчет блока). - Реализован аналог класса
CPythonBlockExecutionContextиз backend, но с некоторыми изменениями:- В обычном приложении все параметры приходят во время расчета из калькулятора, здесь не выполняется расчет для получения данных (да и самого калькулятора нет). Вместо этого, все данные берутся запросами из других мест приложения (там где это возможно).
CProgressWrapper(методыprogressиlog) реализован вызовомprint(), т.к. отдельно подключитьprogressbarне представляется возможным. Однако, все методы будут работать внутри приложения, во время расчета.- Данные по задачам и пользователю (
task_infoиuser_info) извлекаются запросами на получение задачи и получение информации о пользователе соответственно. - Информация по входам и выходам блока извлекается запросом для отладки графа.
- Ограничение при работе с
vmResource:- Каждое обращение к
vmResource(к примеруvmResource.get_sql_execute) отправляет запрос на сервер приложения, там он выполняется и возвращает уже готовый ответ. - Для корректного определения блока соединения с БД параметр соединения, получаемый из входа блока, изменен на идентификатор блока соединения с БД. На работу кода это никак не повлияло, но нельзя передавать этот параметр на выход блока, т.к. могут произойти сбои при расчете графа.
- Не доступен метод
create_file_nameиз-за специфики хранения файлов на сервере
- Каждое обращение к
Примеры вызова
Создание нового стенда с указанием пути до файла с конфигурацией
Создание нового стенда без указания пути до файла с конфигурацией
Будет осуществлен поиск файла config.json
Запуск стенда на расчет с сохранением
Для опытных пользователей
Можно использовать отдельно класс CDevTools (from vm_local_developer import CDevTools) для получения контекста.
Параметры — все данные, которые передаются в файл конфигурации (user, password, и остальные).
В таком случае не будет поддержки на сохранение и расчет блока, но весь execution_context будет доступен.
Пример вызова CDevTools
Использовать можно либо связку пользователь-пароль, либо токен





