Skip to content

Commit

Permalink
feat: добавлена команда run_script - возможность выполнить внешний py…
Browse files Browse the repository at this point in the history
…thon-скрипт
  • Loading branch information
Макаров Игорь (Makarov_IV) authored and Макаров Игорь (Makarov_IV) committed Dec 18, 2023
1 parent 992f58c commit c9af436
Show file tree
Hide file tree
Showing 5 changed files with 85 additions and 1 deletion.
2 changes: 1 addition & 1 deletion .github/workflows/create-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ jobs:
- name: Create zip
uses: papeloto/action-zip@v1
with:
files: src/ManageAppProjects readme.pdf readme.md update_config_before_install.yml update_config_after_install.yml
files: src/ManageAppProjects readme.pdf readme.md update_config_before_install.yml update_config_after_install.yml script_example.py
dest: ManageAppProjects.zip
recursive: true
- name: Upload release.zip
Expand Down
43 changes: 43 additions & 0 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -619,3 +619,46 @@ do map check_sdk
```

Проверить наличие и соответствие версий для git и dotnet.

### run_script - запустить python-скрипт в контексте DirectumLauncher

```
do map run_script --script_filename=script_example.py
```

Позволяет запустить внешний python-скрипт в контексте DirectumLauncher.

В скрипте будет доступны:

* все импортированные в map_installer.py функции, модули
* предопределенная переменная self_map - ссылка на экземпляр класса ManageAppliedProject, через который вызывается команда `run_script`.
* дополнительные параметры, которые будут доступны в коде скрипта в качестве локальных переменных. Пример вызова скрипта с доп.параметрами:

```
do map run_script --script_filename=script_example.py --arg1=value1 --arg2=value2
```

В файле script_example.py приведен пример скрипта, демонстрирующий некоторые возможности, доступные в скриптах.

```
# отобразить доступные локальные переменные
log.info(pformat(locals()))
# проверить передан ли параметра arg1
if "arg1" not in locals():
log.error("Пропущен обязательный параметр arg1")
sys.exit(-1)
# вывести значение параметра arg1
log.info("Параметры запуска:")
log.info(f' arg1={arg1}')
# отобразить путь к config.yml текущего экземпляра RX
log.info(f'Путь к config.yml: {self_map.config_path}')
# вызвать метод класса ManageAppliedProject
self_map.check_sdk(need_pause=False)
# вызвать функцию, определенную в map_installer.py
log.info(f'Версия RX: {_get_rx_version()}')
```
Binary file modified readme.pdf
Binary file not shown.
20 changes: 20 additions & 0 deletions script_example.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# отобразить доступные локальные переменные
log.info(pformat(locals()))

# проверить передан ли параметра arg1
if "arg1" not in locals():
log.error("Пропущен обязательный параметр arg1")
sys.exit(-1)

# вывести значение параметра arg1
log.info("Параметры запуска:")
log.info(f' arg1={arg1}')

# отобразить путь к config.yml текущего экземпляра RX
log.info(f'Путь к config.yml: {self_map.config_path}')

# вызвать метод класса ManageAppliedProject
self_map.check_sdk(need_pause=False)

# вызвать функцию, определенную в map_installer.py
log.info(f'Версия RX: {_get_rx_version()}')
21 changes: 21 additions & 0 deletions src/ManageAppProjects/map_plugin/map_installer.py
Original file line number Diff line number Diff line change
Expand Up @@ -1212,6 +1212,26 @@ def check_sdk(self, need_pause: bool = False) -> None:
if need_pause or need_pause is None:
pause()

def run_script(self, script_filename: str, *args: Any) -> None:
"""Запуск python-скрипта
Args:
script_filename: путь к запускаемому файлу
*args: дополнительные параметры, которые будут переданы в запускаемый скрипт в виде переменных
"""
with open(_get_check_file_path(script_filename), 'r', encoding='utf-8') as f:
script = f.read()
args_dict = {}
for arg in args:
sep_ids = arg.find('=')
if sep_ids != -1:
args_dict[arg[:sep_ids]] = arg[sep_ids+1:]
# передать ссылку на экземпляр класса в качестве предопределенной переменной
args_dict["self_map"] = self

exec(script, globals(), args_dict)

@staticmethod
def help() -> None:
log.info('do map set - переключиться на проект, описаный в указанном yml-файла')
Expand All @@ -1231,5 +1251,6 @@ def help() -> None:
log.info('do map url - показать url для подключения к веб-клиенту текущего инстанса')
log.info('do map check_config - показать ключевую информацию из указанного yml-файла описания проекта')
log.info('do map check_sdk - проверить наличие необходимых компонент git и .Net')
log.info('do map run_script - запустить python-скрипт')

#endregion

0 comments on commit c9af436

Please sign in to comment.