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

Библиотека 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. В терминале нажимаем значок вниз

![](Локальная_разработка__Пакет_vm_local_developer/image2022-3-18_17-54-22.png)
  1. Открываем настройки (settings) и в поле Shell path выбираем ...cmd.exe:

  2. Apply, затем Ok и переоткрываем терминал.

  • После чего можно устанавливать все необходимые пакеты (либо через терминал, либо File -> Settings -> Project -> Python Interpreter; для отладчика Python блоков не используется, там только через терминал):

  • После установки всех пакетов можно запускать vm_local_developer для настройки стенда:

Установка vm_local_developer

Необходимо получить файл vm_local_developer.whl и выполнить команду

pip install vm_local_developer.whl

После обновления версии модуля необходимо пересобрать стенд заново.

Внимание!

Не поддерживаются стенды, созданные до версии 0.1.0. После обновления с версии ниже 0.1.0 рекомендуется выполнить полную очистку метаданных: vmld -clear

Использование vm_local_developer

В командной строке выполнить скрипт

vmld <params>

Параметры скрипта:

  • -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 из-за специфики хранения файлов на сервере

Примеры вызова

Создание нового стенда с указанием пути до файла с конфигурацией

$ vmld -c path/to/my_beautiful_config.json

Создание нового стенда без указания пути до файла с конфигурацией

Будет осуществлен поиск файла config.json

$ vmld -p ./project

Запуск стенда на расчет с сохранением

$ vmld -p ./project -b 33ba8b40-cbac-4e84-904b-d03d1cfae37f -s -e

Для опытных пользователей

Можно использовать отдельно класс CDevTools (from vm_local_developer import CDevTools) для получения контекста. Параметры — все данные, которые передаются в файл конфигурации (user, password, и остальные).

В таком случае не будет поддержки на сохранение и расчет блока, но весь execution_context будет доступен.

Пример вызова CDevTools

Использовать можно либо связку пользователь-пароль, либо токен

from vm_local_developer import CDevTools

execution_context, vmResource = CDevTools(token=token,
    "user": username,
    "password": password,
    host='stage.int.bittechno.ru',
    port=80,
    task_id='f5776667-d26d-49a6-96a5-21551cd9d182',
    block_id='21ac1c56-c65c-461f-89b0-660cd3a09ed2'
).all_tools