PyBreeze 1.0.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pybreeze-1.0.4/LICENSE +21 -0
- pybreeze-1.0.4/PKG-INFO +69 -0
- pybreeze-1.0.4/PyBreeze.egg-info/PKG-INFO +69 -0
- pybreeze-1.0.4/PyBreeze.egg-info/SOURCES.txt +112 -0
- pybreeze-1.0.4/PyBreeze.egg-info/dependency_links.txt +1 -0
- pybreeze-1.0.4/PyBreeze.egg-info/requires.txt +10 -0
- pybreeze-1.0.4/PyBreeze.egg-info/top_level.txt +1 -0
- pybreeze-1.0.4/README.md +41 -0
- pybreeze-1.0.4/automation_ide/__init__.py +7 -0
- pybreeze-1.0.4/automation_ide/__main__.py +0 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/connect_gui/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/connect_gui/ssh/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/connect_gui/ssh/ssh_command_widget.py +246 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/connect_gui/ssh/ssh_file_viewer_widget.py +501 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/connect_gui/ssh/ssh_login_widget.py +67 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/connect_gui/ssh/ssh_main_widget.py +49 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/connect_gui/url/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/connect_gui/url/ai_code_review_gui.py +177 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/editor_main/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/editor_main/main_ui.py +104 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/extend_ai_gui/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/extend_ai_gui/ai_gui_global_variable.py +40 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/extend_ai_gui/code_review/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/extend_ai_gui/code_review/code_review_thread.py +81 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/extend_ai_gui/code_review/cot_code_review_gui.py +82 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/code_smell_detector.py +22 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/first_code_review.py +17 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/first_summary_prompt.py +17 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/global_rule.py +59 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/judge.py +91 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/judge_single_review.py +85 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/linter.py +17 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/step_by_step_analysis.py +35 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/total_summary.py +66 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/cot_prompt_editor_widget.py +136 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_editor_widget.py +136 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_templates/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_templates/code_explainer.py +21 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_templates/code_review.py +37 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/extend_ai_gui/skills/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/extend_ai_gui/skills/skills_send_gui.py +98 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/extend_multi_language/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/extend_multi_language/extend_english.py +272 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/extend_multi_language/extend_traditional_chinese.py +272 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/extend_multi_language/update_language_dict.py +8 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/menu/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/menu/automation_menu/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/menu/automation_menu/api_testka_menu/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/menu/automation_menu/api_testka_menu/build_api_testka_menu.py +137 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/menu/automation_menu/auto_control_menu/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/menu/automation_menu/auto_control_menu/build_autocontrol_menu.py +169 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/menu/automation_menu/automation_file_menu/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/menu/automation_menu/automation_file_menu/build_automation_file_menu.py +122 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/menu/automation_menu/load_density_menu/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/menu/automation_menu/load_density_menu/build_load_density_menu.py +137 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/menu/automation_menu/mail_thunder_menu/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/menu/automation_menu/mail_thunder_menu/build_mail_thunder_menu.py +88 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/menu/automation_menu/test_pioneer_menu/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/menu/automation_menu/test_pioneer_menu/build_test_pioneer_menu.py +62 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/menu/automation_menu/web_runner_menu/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/menu/automation_menu/web_runner_menu/build_webrunner_menu.py +119 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/menu/build_menubar.py +47 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/menu/install_menu/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/menu/install_menu/automation_menu/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/menu/install_menu/automation_menu/build_automation_install_menu.py +82 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/menu/install_menu/install_utils.py +21 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/menu/install_menu/tools_menu/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/menu/install_menu/tools_menu/build_tool_install_menu.py +29 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/menu/menu_utils.py +16 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/menu/tools/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/menu/tools/tools_menu.py +162 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/show_code_window/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/show_code_window/code_window.py +21 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/syntax/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/syntax/syntax_extend.py +40 -0
- pybreeze-1.0.4/automation_ide/automation_editor_ui/syntax/syntax_keyword.py +163 -0
- pybreeze-1.0.4/automation_ide/extend/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/extend/mail_thunder_extend/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/extend/mail_thunder_extend/mail_thunder_setting.py +36 -0
- pybreeze-1.0.4/automation_ide/extend/process_executor/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/extend/process_executor/api_testka/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/extend/process_executor/api_testka/api_testka_process.py +66 -0
- pybreeze-1.0.4/automation_ide/extend/process_executor/auto_control/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/extend/process_executor/auto_control/auto_control_process.py +62 -0
- pybreeze-1.0.4/automation_ide/extend/process_executor/file_automation/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/extend/process_executor/file_automation/file_automation_process.py +66 -0
- pybreeze-1.0.4/automation_ide/extend/process_executor/load_density/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/extend/process_executor/load_density/load_density_process.py +66 -0
- pybreeze-1.0.4/automation_ide/extend/process_executor/mail_thunder/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/extend/process_executor/mail_thunder/mail_thunder_process.py +16 -0
- pybreeze-1.0.4/automation_ide/extend/process_executor/process_executor_utils.py +72 -0
- pybreeze-1.0.4/automation_ide/extend/process_executor/python_task_process_manager.py +177 -0
- pybreeze-1.0.4/automation_ide/extend/process_executor/test_pioneer/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/extend/process_executor/test_pioneer/test_pioneer_process_manager.py +181 -0
- pybreeze-1.0.4/automation_ide/extend/process_executor/web_runner/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/extend/process_executor/web_runner/web_runner_process.py +66 -0
- pybreeze-1.0.4/automation_ide/utils/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/utils/exception/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/utils/exception/exception_tags.py +37 -0
- pybreeze-1.0.4/automation_ide/utils/exception/exceptions.py +50 -0
- pybreeze-1.0.4/automation_ide/utils/file_process/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/utils/file_process/get_dir_file_list.py +29 -0
- pybreeze-1.0.4/automation_ide/utils/json_format/__init__.py +1 -0
- pybreeze-1.0.4/automation_ide/utils/json_format/json_process.py +28 -0
- pybreeze-1.0.4/automation_ide/utils/logging/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/utils/logging/logger.py +50 -0
- pybreeze-1.0.4/automation_ide/utils/manager/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/utils/manager/package_manager/__init__.py +0 -0
- pybreeze-1.0.4/automation_ide/utils/manager/package_manager/package_manager_class.py +18 -0
- pybreeze-1.0.4/pyproject.toml +39 -0
- pybreeze-1.0.4/setup.cfg +4 -0
pybreeze-1.0.4/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2022 JE-Chen
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
pybreeze-1.0.4/PKG-INFO
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: PyBreeze
|
|
3
|
+
Version: 1.0.4
|
|
4
|
+
Summary: AutomationEditor for multi automation
|
|
5
|
+
Author-email: JE-Chen <jechenmailman@gmail.com>
|
|
6
|
+
Project-URL: Homepage, https://github.com/Intergration-Automation-Testing/AutomationEditor
|
|
7
|
+
Project-URL: Code, https://github.com/Intergration-Automation-Testing/AutomationEditor
|
|
8
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
9
|
+
Classifier: Development Status :: 2 - Pre-Alpha
|
|
10
|
+
Classifier: Environment :: Win32 (MS Windows)
|
|
11
|
+
Classifier: Environment :: MacOS X
|
|
12
|
+
Classifier: Environment :: X11 Applications
|
|
13
|
+
Classifier: Operating System :: OS Independent
|
|
14
|
+
Requires-Python: >=3.10
|
|
15
|
+
Description-Content-Type: text/markdown
|
|
16
|
+
License-File: LICENSE
|
|
17
|
+
Requires-Dist: je-editor
|
|
18
|
+
Requires-Dist: je_auto_control
|
|
19
|
+
Requires-Dist: je_web_runner
|
|
20
|
+
Requires-Dist: je_load_density
|
|
21
|
+
Requires-Dist: je_api_testka
|
|
22
|
+
Requires-Dist: je-mail-thunder
|
|
23
|
+
Requires-Dist: automation-file
|
|
24
|
+
Requires-Dist: PySide6==6.10.2
|
|
25
|
+
Requires-Dist: test_pioneer
|
|
26
|
+
Requires-Dist: paramiko
|
|
27
|
+
Dynamic: license-file
|
|
28
|
+
|
|
29
|
+
# Automation-IDE
|
|
30
|
+
An integrated test automation IDE developed with Python and PySide6 (Qt).
|
|
31
|
+
|
|
32
|
+
## Components
|
|
33
|
+
- Editor
|
|
34
|
+
- https://github.com/Integration-Automation/JEDITOR
|
|
35
|
+
- GUI Testing
|
|
36
|
+
- https://github.com/Integration-Automation/AutoControlGUI
|
|
37
|
+
- API Testing
|
|
38
|
+
- https://github.com/Integration-Automation/APITestka
|
|
39
|
+
- Web Testing
|
|
40
|
+
- https://github.com/Integration-Automation/WebRunner
|
|
41
|
+
- Load Testing
|
|
42
|
+
- https://github.com/Integration-Automation/LoadDensity
|
|
43
|
+
- File
|
|
44
|
+
- https://github.com/Integration-Automation/FileAutomation
|
|
45
|
+
- OpenCV
|
|
46
|
+
- https://github.com/Integration-Automation/je_opencv_wrapper
|
|
47
|
+
- Mail
|
|
48
|
+
- https://github.com/Integration-Automation/MailThunder
|
|
49
|
+
|
|
50
|
+
## Supported features:
|
|
51
|
+
- Python syntax highlighting
|
|
52
|
+
- Auto reformatter
|
|
53
|
+
- Code execution
|
|
54
|
+
- Test scripts
|
|
55
|
+
- Shell commands
|
|
56
|
+
- Embedded browser
|
|
57
|
+
- Jupyter integration
|
|
58
|
+
- Git client
|
|
59
|
+
- Code diff viewer, etc.
|
|
60
|
+
|
|
61
|
+
## Testing modules include:
|
|
62
|
+
- GUI testing
|
|
63
|
+
- API testing
|
|
64
|
+
- Load testing
|
|
65
|
+
- Web testing
|
|
66
|
+
|
|
67
|
+
## Installation
|
|
68
|
+
> pip install automation_editor
|
|
69
|
+
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: PyBreeze
|
|
3
|
+
Version: 1.0.4
|
|
4
|
+
Summary: AutomationEditor for multi automation
|
|
5
|
+
Author-email: JE-Chen <jechenmailman@gmail.com>
|
|
6
|
+
Project-URL: Homepage, https://github.com/Intergration-Automation-Testing/AutomationEditor
|
|
7
|
+
Project-URL: Code, https://github.com/Intergration-Automation-Testing/AutomationEditor
|
|
8
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
9
|
+
Classifier: Development Status :: 2 - Pre-Alpha
|
|
10
|
+
Classifier: Environment :: Win32 (MS Windows)
|
|
11
|
+
Classifier: Environment :: MacOS X
|
|
12
|
+
Classifier: Environment :: X11 Applications
|
|
13
|
+
Classifier: Operating System :: OS Independent
|
|
14
|
+
Requires-Python: >=3.10
|
|
15
|
+
Description-Content-Type: text/markdown
|
|
16
|
+
License-File: LICENSE
|
|
17
|
+
Requires-Dist: je-editor
|
|
18
|
+
Requires-Dist: je_auto_control
|
|
19
|
+
Requires-Dist: je_web_runner
|
|
20
|
+
Requires-Dist: je_load_density
|
|
21
|
+
Requires-Dist: je_api_testka
|
|
22
|
+
Requires-Dist: je-mail-thunder
|
|
23
|
+
Requires-Dist: automation-file
|
|
24
|
+
Requires-Dist: PySide6==6.10.2
|
|
25
|
+
Requires-Dist: test_pioneer
|
|
26
|
+
Requires-Dist: paramiko
|
|
27
|
+
Dynamic: license-file
|
|
28
|
+
|
|
29
|
+
# Automation-IDE
|
|
30
|
+
An integrated test automation IDE developed with Python and PySide6 (Qt).
|
|
31
|
+
|
|
32
|
+
## Components
|
|
33
|
+
- Editor
|
|
34
|
+
- https://github.com/Integration-Automation/JEDITOR
|
|
35
|
+
- GUI Testing
|
|
36
|
+
- https://github.com/Integration-Automation/AutoControlGUI
|
|
37
|
+
- API Testing
|
|
38
|
+
- https://github.com/Integration-Automation/APITestka
|
|
39
|
+
- Web Testing
|
|
40
|
+
- https://github.com/Integration-Automation/WebRunner
|
|
41
|
+
- Load Testing
|
|
42
|
+
- https://github.com/Integration-Automation/LoadDensity
|
|
43
|
+
- File
|
|
44
|
+
- https://github.com/Integration-Automation/FileAutomation
|
|
45
|
+
- OpenCV
|
|
46
|
+
- https://github.com/Integration-Automation/je_opencv_wrapper
|
|
47
|
+
- Mail
|
|
48
|
+
- https://github.com/Integration-Automation/MailThunder
|
|
49
|
+
|
|
50
|
+
## Supported features:
|
|
51
|
+
- Python syntax highlighting
|
|
52
|
+
- Auto reformatter
|
|
53
|
+
- Code execution
|
|
54
|
+
- Test scripts
|
|
55
|
+
- Shell commands
|
|
56
|
+
- Embedded browser
|
|
57
|
+
- Jupyter integration
|
|
58
|
+
- Git client
|
|
59
|
+
- Code diff viewer, etc.
|
|
60
|
+
|
|
61
|
+
## Testing modules include:
|
|
62
|
+
- GUI testing
|
|
63
|
+
- API testing
|
|
64
|
+
- Load testing
|
|
65
|
+
- Web testing
|
|
66
|
+
|
|
67
|
+
## Installation
|
|
68
|
+
> pip install automation_editor
|
|
69
|
+
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
LICENSE
|
|
2
|
+
README.md
|
|
3
|
+
pyproject.toml
|
|
4
|
+
PyBreeze.egg-info/PKG-INFO
|
|
5
|
+
PyBreeze.egg-info/SOURCES.txt
|
|
6
|
+
PyBreeze.egg-info/dependency_links.txt
|
|
7
|
+
PyBreeze.egg-info/requires.txt
|
|
8
|
+
PyBreeze.egg-info/top_level.txt
|
|
9
|
+
automation_ide/__init__.py
|
|
10
|
+
automation_ide/__main__.py
|
|
11
|
+
automation_ide/automation_editor_ui/__init__.py
|
|
12
|
+
automation_ide/automation_editor_ui/connect_gui/__init__.py
|
|
13
|
+
automation_ide/automation_editor_ui/connect_gui/ssh/__init__.py
|
|
14
|
+
automation_ide/automation_editor_ui/connect_gui/ssh/ssh_command_widget.py
|
|
15
|
+
automation_ide/automation_editor_ui/connect_gui/ssh/ssh_file_viewer_widget.py
|
|
16
|
+
automation_ide/automation_editor_ui/connect_gui/ssh/ssh_login_widget.py
|
|
17
|
+
automation_ide/automation_editor_ui/connect_gui/ssh/ssh_main_widget.py
|
|
18
|
+
automation_ide/automation_editor_ui/connect_gui/url/__init__.py
|
|
19
|
+
automation_ide/automation_editor_ui/connect_gui/url/ai_code_review_gui.py
|
|
20
|
+
automation_ide/automation_editor_ui/editor_main/__init__.py
|
|
21
|
+
automation_ide/automation_editor_ui/editor_main/main_ui.py
|
|
22
|
+
automation_ide/automation_editor_ui/extend_ai_gui/__init__.py
|
|
23
|
+
automation_ide/automation_editor_ui/extend_ai_gui/ai_gui_global_variable.py
|
|
24
|
+
automation_ide/automation_editor_ui/extend_ai_gui/code_review/__init__.py
|
|
25
|
+
automation_ide/automation_editor_ui/extend_ai_gui/code_review/code_review_thread.py
|
|
26
|
+
automation_ide/automation_editor_ui/extend_ai_gui/code_review/cot_code_review_gui.py
|
|
27
|
+
automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/__init__.py
|
|
28
|
+
automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/cot_prompt_editor_widget.py
|
|
29
|
+
automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_editor_widget.py
|
|
30
|
+
automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/__init__.py
|
|
31
|
+
automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/code_smell_detector.py
|
|
32
|
+
automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/first_code_review.py
|
|
33
|
+
automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/first_summary_prompt.py
|
|
34
|
+
automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/global_rule.py
|
|
35
|
+
automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/judge.py
|
|
36
|
+
automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/judge_single_review.py
|
|
37
|
+
automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/linter.py
|
|
38
|
+
automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/step_by_step_analysis.py
|
|
39
|
+
automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/total_summary.py
|
|
40
|
+
automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_templates/__init__.py
|
|
41
|
+
automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_templates/code_explainer.py
|
|
42
|
+
automation_ide/automation_editor_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_templates/code_review.py
|
|
43
|
+
automation_ide/automation_editor_ui/extend_ai_gui/skills/__init__.py
|
|
44
|
+
automation_ide/automation_editor_ui/extend_ai_gui/skills/skills_send_gui.py
|
|
45
|
+
automation_ide/automation_editor_ui/extend_multi_language/__init__.py
|
|
46
|
+
automation_ide/automation_editor_ui/extend_multi_language/extend_english.py
|
|
47
|
+
automation_ide/automation_editor_ui/extend_multi_language/extend_traditional_chinese.py
|
|
48
|
+
automation_ide/automation_editor_ui/extend_multi_language/update_language_dict.py
|
|
49
|
+
automation_ide/automation_editor_ui/menu/__init__.py
|
|
50
|
+
automation_ide/automation_editor_ui/menu/build_menubar.py
|
|
51
|
+
automation_ide/automation_editor_ui/menu/menu_utils.py
|
|
52
|
+
automation_ide/automation_editor_ui/menu/automation_menu/__init__.py
|
|
53
|
+
automation_ide/automation_editor_ui/menu/automation_menu/api_testka_menu/__init__.py
|
|
54
|
+
automation_ide/automation_editor_ui/menu/automation_menu/api_testka_menu/build_api_testka_menu.py
|
|
55
|
+
automation_ide/automation_editor_ui/menu/automation_menu/auto_control_menu/__init__.py
|
|
56
|
+
automation_ide/automation_editor_ui/menu/automation_menu/auto_control_menu/build_autocontrol_menu.py
|
|
57
|
+
automation_ide/automation_editor_ui/menu/automation_menu/automation_file_menu/__init__.py
|
|
58
|
+
automation_ide/automation_editor_ui/menu/automation_menu/automation_file_menu/build_automation_file_menu.py
|
|
59
|
+
automation_ide/automation_editor_ui/menu/automation_menu/load_density_menu/__init__.py
|
|
60
|
+
automation_ide/automation_editor_ui/menu/automation_menu/load_density_menu/build_load_density_menu.py
|
|
61
|
+
automation_ide/automation_editor_ui/menu/automation_menu/mail_thunder_menu/__init__.py
|
|
62
|
+
automation_ide/automation_editor_ui/menu/automation_menu/mail_thunder_menu/build_mail_thunder_menu.py
|
|
63
|
+
automation_ide/automation_editor_ui/menu/automation_menu/test_pioneer_menu/__init__.py
|
|
64
|
+
automation_ide/automation_editor_ui/menu/automation_menu/test_pioneer_menu/build_test_pioneer_menu.py
|
|
65
|
+
automation_ide/automation_editor_ui/menu/automation_menu/web_runner_menu/__init__.py
|
|
66
|
+
automation_ide/automation_editor_ui/menu/automation_menu/web_runner_menu/build_webrunner_menu.py
|
|
67
|
+
automation_ide/automation_editor_ui/menu/install_menu/__init__.py
|
|
68
|
+
automation_ide/automation_editor_ui/menu/install_menu/install_utils.py
|
|
69
|
+
automation_ide/automation_editor_ui/menu/install_menu/automation_menu/__init__.py
|
|
70
|
+
automation_ide/automation_editor_ui/menu/install_menu/automation_menu/build_automation_install_menu.py
|
|
71
|
+
automation_ide/automation_editor_ui/menu/install_menu/tools_menu/__init__.py
|
|
72
|
+
automation_ide/automation_editor_ui/menu/install_menu/tools_menu/build_tool_install_menu.py
|
|
73
|
+
automation_ide/automation_editor_ui/menu/tools/__init__.py
|
|
74
|
+
automation_ide/automation_editor_ui/menu/tools/tools_menu.py
|
|
75
|
+
automation_ide/automation_editor_ui/show_code_window/__init__.py
|
|
76
|
+
automation_ide/automation_editor_ui/show_code_window/code_window.py
|
|
77
|
+
automation_ide/automation_editor_ui/syntax/__init__.py
|
|
78
|
+
automation_ide/automation_editor_ui/syntax/syntax_extend.py
|
|
79
|
+
automation_ide/automation_editor_ui/syntax/syntax_keyword.py
|
|
80
|
+
automation_ide/extend/__init__.py
|
|
81
|
+
automation_ide/extend/mail_thunder_extend/__init__.py
|
|
82
|
+
automation_ide/extend/mail_thunder_extend/mail_thunder_setting.py
|
|
83
|
+
automation_ide/extend/process_executor/__init__.py
|
|
84
|
+
automation_ide/extend/process_executor/process_executor_utils.py
|
|
85
|
+
automation_ide/extend/process_executor/python_task_process_manager.py
|
|
86
|
+
automation_ide/extend/process_executor/api_testka/__init__.py
|
|
87
|
+
automation_ide/extend/process_executor/api_testka/api_testka_process.py
|
|
88
|
+
automation_ide/extend/process_executor/auto_control/__init__.py
|
|
89
|
+
automation_ide/extend/process_executor/auto_control/auto_control_process.py
|
|
90
|
+
automation_ide/extend/process_executor/file_automation/__init__.py
|
|
91
|
+
automation_ide/extend/process_executor/file_automation/file_automation_process.py
|
|
92
|
+
automation_ide/extend/process_executor/load_density/__init__.py
|
|
93
|
+
automation_ide/extend/process_executor/load_density/load_density_process.py
|
|
94
|
+
automation_ide/extend/process_executor/mail_thunder/__init__.py
|
|
95
|
+
automation_ide/extend/process_executor/mail_thunder/mail_thunder_process.py
|
|
96
|
+
automation_ide/extend/process_executor/test_pioneer/__init__.py
|
|
97
|
+
automation_ide/extend/process_executor/test_pioneer/test_pioneer_process_manager.py
|
|
98
|
+
automation_ide/extend/process_executor/web_runner/__init__.py
|
|
99
|
+
automation_ide/extend/process_executor/web_runner/web_runner_process.py
|
|
100
|
+
automation_ide/utils/__init__.py
|
|
101
|
+
automation_ide/utils/exception/__init__.py
|
|
102
|
+
automation_ide/utils/exception/exception_tags.py
|
|
103
|
+
automation_ide/utils/exception/exceptions.py
|
|
104
|
+
automation_ide/utils/file_process/__init__.py
|
|
105
|
+
automation_ide/utils/file_process/get_dir_file_list.py
|
|
106
|
+
automation_ide/utils/json_format/__init__.py
|
|
107
|
+
automation_ide/utils/json_format/json_process.py
|
|
108
|
+
automation_ide/utils/logging/__init__.py
|
|
109
|
+
automation_ide/utils/logging/logger.py
|
|
110
|
+
automation_ide/utils/manager/__init__.py
|
|
111
|
+
automation_ide/utils/manager/package_manager/__init__.py
|
|
112
|
+
automation_ide/utils/manager/package_manager/package_manager_class.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
automation_ide
|
pybreeze-1.0.4/README.md
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Automation-IDE
|
|
2
|
+
An integrated test automation IDE developed with Python and PySide6 (Qt).
|
|
3
|
+
|
|
4
|
+
## Components
|
|
5
|
+
- Editor
|
|
6
|
+
- https://github.com/Integration-Automation/JEDITOR
|
|
7
|
+
- GUI Testing
|
|
8
|
+
- https://github.com/Integration-Automation/AutoControlGUI
|
|
9
|
+
- API Testing
|
|
10
|
+
- https://github.com/Integration-Automation/APITestka
|
|
11
|
+
- Web Testing
|
|
12
|
+
- https://github.com/Integration-Automation/WebRunner
|
|
13
|
+
- Load Testing
|
|
14
|
+
- https://github.com/Integration-Automation/LoadDensity
|
|
15
|
+
- File
|
|
16
|
+
- https://github.com/Integration-Automation/FileAutomation
|
|
17
|
+
- OpenCV
|
|
18
|
+
- https://github.com/Integration-Automation/je_opencv_wrapper
|
|
19
|
+
- Mail
|
|
20
|
+
- https://github.com/Integration-Automation/MailThunder
|
|
21
|
+
|
|
22
|
+
## Supported features:
|
|
23
|
+
- Python syntax highlighting
|
|
24
|
+
- Auto reformatter
|
|
25
|
+
- Code execution
|
|
26
|
+
- Test scripts
|
|
27
|
+
- Shell commands
|
|
28
|
+
- Embedded browser
|
|
29
|
+
- Jupyter integration
|
|
30
|
+
- Git client
|
|
31
|
+
- Code diff viewer, etc.
|
|
32
|
+
|
|
33
|
+
## Testing modules include:
|
|
34
|
+
- GUI testing
|
|
35
|
+
- API testing
|
|
36
|
+
- Load testing
|
|
37
|
+
- Web testing
|
|
38
|
+
|
|
39
|
+
## Installation
|
|
40
|
+
> pip install automation_editor
|
|
41
|
+
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
from automation_ide.automation_editor_ui.editor_main.main_ui import AutomationEditor
|
|
2
|
+
from automation_ide.automation_editor_ui.editor_main.main_ui import EDITOR_EXTEND_TAB
|
|
3
|
+
from automation_ide.automation_editor_ui.editor_main.main_ui import start_editor
|
|
4
|
+
|
|
5
|
+
__all__ = [
|
|
6
|
+
"start_editor", "AutomationEditor", "EDITOR_EXTEND_TAB"
|
|
7
|
+
]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import re
|
|
3
|
+
|
|
4
|
+
import paramiko
|
|
5
|
+
from PySide6.QtCore import QThread, Signal
|
|
6
|
+
from PySide6.QtWidgets import (
|
|
7
|
+
QWidget, QLineEdit, QPushButton,
|
|
8
|
+
QPlainTextEdit, QHBoxLayout, QVBoxLayout,
|
|
9
|
+
QMessageBox
|
|
10
|
+
)
|
|
11
|
+
from je_editor import language_wrapper
|
|
12
|
+
|
|
13
|
+
from automation_ide.automation_editor_ui.connect_gui.ssh.ssh_login_widget import LoginWidget
|
|
14
|
+
|
|
15
|
+
ANSI_ESCAPE_PATTERN = re.compile(r'\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])')
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class SSHReaderThread(QThread):
|
|
19
|
+
data_received = Signal(bytes)
|
|
20
|
+
closed = Signal(str)
|
|
21
|
+
|
|
22
|
+
def __init__(self, chan: paramiko.Channel, parent=None):
|
|
23
|
+
super().__init__(parent)
|
|
24
|
+
self.chan = chan
|
|
25
|
+
self._running = True
|
|
26
|
+
self.word_dict = language_wrapper.language_word_dict
|
|
27
|
+
|
|
28
|
+
def run(self):
|
|
29
|
+
try:
|
|
30
|
+
while self._running:
|
|
31
|
+
if self.chan.recv_ready():
|
|
32
|
+
data = self.chan.recv(4096)
|
|
33
|
+
if data:
|
|
34
|
+
self.data_received.emit(data)
|
|
35
|
+
|
|
36
|
+
if self.chan.recv_stderr_ready():
|
|
37
|
+
err = self.chan.recv_stderr(4096)
|
|
38
|
+
if err:
|
|
39
|
+
self.data_received.emit(err)
|
|
40
|
+
|
|
41
|
+
if self.chan.closed or self.chan.exit_status_ready():
|
|
42
|
+
break
|
|
43
|
+
|
|
44
|
+
self.msleep(10)
|
|
45
|
+
except Exception as e:
|
|
46
|
+
self.closed.emit(
|
|
47
|
+
f"{self.word_dict.get('ssh_command_widget_error_message_reader_failed')} {e}")
|
|
48
|
+
finally:
|
|
49
|
+
self.closed.emit(
|
|
50
|
+
self.word_dict.get("ssh_command_widget_log_message_reader_closed"))
|
|
51
|
+
|
|
52
|
+
def stop(self):
|
|
53
|
+
self._running = False
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class SSHCommandWidget(QWidget):
|
|
57
|
+
def __init__(self, external_login_widget: LoginWidget = None, add_login_widget: bool = True):
|
|
58
|
+
super().__init__()
|
|
59
|
+
self.word_dict = language_wrapper.language_word_dict
|
|
60
|
+
self.setWindowTitle(
|
|
61
|
+
self.word_dict.get("ssh_command_widget_window_title_ssh_command_widget"))
|
|
62
|
+
|
|
63
|
+
self.add_login_widget = add_login_widget
|
|
64
|
+
|
|
65
|
+
# SSH 相關物件
|
|
66
|
+
self.ssh_client: paramiko.SSHClient | None = None
|
|
67
|
+
self.shell_channel: paramiko.Channel | None = None
|
|
68
|
+
self.reader_thread: SSHReaderThread | None = None
|
|
69
|
+
|
|
70
|
+
if self.add_login_widget:
|
|
71
|
+
# 使用獨立的登入介面
|
|
72
|
+
self.login_widget = LoginWidget()
|
|
73
|
+
else:
|
|
74
|
+
if external_login_widget is None:
|
|
75
|
+
external_login_widget = LoginWidget()
|
|
76
|
+
self.login_widget = external_login_widget
|
|
77
|
+
|
|
78
|
+
# 其他 UI 控制元件
|
|
79
|
+
self.terminal = QPlainTextEdit()
|
|
80
|
+
self.terminal.setReadOnly(True)
|
|
81
|
+
self.command_input_edit = QLineEdit()
|
|
82
|
+
self.command_send_button = QPushButton(
|
|
83
|
+
self.word_dict.get("ssh_command_widget_button_label_send_command"))
|
|
84
|
+
|
|
85
|
+
self._setup_ui()
|
|
86
|
+
self._bind_events()
|
|
87
|
+
|
|
88
|
+
def _setup_ui(self):
|
|
89
|
+
self.terminal.setReadOnly(True)
|
|
90
|
+
self.terminal.setLineWrapMode(QPlainTextEdit.LineWrapMode.NoWrap)
|
|
91
|
+
self.command_input_edit.setPlaceholderText(
|
|
92
|
+
self.word_dict.get("ssh_command_widget_input_placeholder_command_line")
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
terminal_panel = QVBoxLayout()
|
|
96
|
+
terminal_panel.addWidget(self.terminal)
|
|
97
|
+
|
|
98
|
+
command_input_bar = QHBoxLayout()
|
|
99
|
+
command_input_bar.addWidget(self.command_input_edit)
|
|
100
|
+
command_input_bar.addWidget(self.command_send_button)
|
|
101
|
+
|
|
102
|
+
main_widget = QVBoxLayout()
|
|
103
|
+
main_widget.addWidget(self.login_widget) # 插入登入介面
|
|
104
|
+
main_widget.addLayout(terminal_panel)
|
|
105
|
+
main_widget.addLayout(command_input_bar)
|
|
106
|
+
|
|
107
|
+
self.setLayout(main_widget)
|
|
108
|
+
|
|
109
|
+
def _bind_events(self):
|
|
110
|
+
# 綁定 LoginWidget 的按鈕
|
|
111
|
+
self.login_widget.connect_btn.clicked.connect(self.connect_ssh)
|
|
112
|
+
self.login_widget.disconnect_btn.clicked.connect(self.disconnect_ssh)
|
|
113
|
+
|
|
114
|
+
# 綁定其他按鈕
|
|
115
|
+
self.command_send_button.clicked.connect(self.send_command)
|
|
116
|
+
self.command_input_edit.returnPressed.connect(self.send_command)
|
|
117
|
+
|
|
118
|
+
def append_text(self, text: str):
|
|
119
|
+
self.terminal.appendPlainText(text)
|
|
120
|
+
|
|
121
|
+
def connect_ssh(self):
|
|
122
|
+
host = self.login_widget.host_edit.text().strip()
|
|
123
|
+
port = self.login_widget.port_spin.value()
|
|
124
|
+
user = self.login_widget.user_edit.text().strip()
|
|
125
|
+
use_key = self.login_widget.use_key_check.isChecked()
|
|
126
|
+
key_path = self.login_widget.key_edit.text().strip()
|
|
127
|
+
password = self.login_widget.pass_edit.text()
|
|
128
|
+
|
|
129
|
+
if not host or not user:
|
|
130
|
+
QMessageBox.warning(
|
|
131
|
+
self,
|
|
132
|
+
self.word_dict.get("ssh_command_widget_dialog_title_input_error"),
|
|
133
|
+
self.word_dict.get(
|
|
134
|
+
"ssh_command_widget_dialog_message_input_error_host_user_required"))
|
|
135
|
+
return
|
|
136
|
+
|
|
137
|
+
try:
|
|
138
|
+
self.ssh_client = paramiko.SSHClient()
|
|
139
|
+
self.ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
|
140
|
+
|
|
141
|
+
if use_key:
|
|
142
|
+
if not os.path.exists(key_path):
|
|
143
|
+
QMessageBox.warning(
|
|
144
|
+
self,
|
|
145
|
+
self.word_dict.get("ssh_command_widget_dialog_title_key_error"),
|
|
146
|
+
self.word_dict.get("ssh_command_widget_dialog_message_key_file_not_exist"))
|
|
147
|
+
return
|
|
148
|
+
try:
|
|
149
|
+
pkey = None
|
|
150
|
+
for KeyType in (paramiko.RSAKey, paramiko.Ed25519Key, paramiko.ECDSAKey):
|
|
151
|
+
try:
|
|
152
|
+
pkey = KeyType.from_private_key_file(key_path, password if password else None)
|
|
153
|
+
break
|
|
154
|
+
except Exception as error:
|
|
155
|
+
print(error)
|
|
156
|
+
continue
|
|
157
|
+
if pkey is None:
|
|
158
|
+
raise ValueError(
|
|
159
|
+
self.word_dict.get(
|
|
160
|
+
"ssh_command_widget_error_message_unsupported_private_key"
|
|
161
|
+
))
|
|
162
|
+
self.ssh_client.connect(hostname=host, port=port, username=user, pkey=pkey, timeout=10)
|
|
163
|
+
except Exception as e:
|
|
164
|
+
raise RuntimeError(
|
|
165
|
+
f"{self.word_dict.get('ssh_command_widget_error_message_key_auth_failed')} {e}")
|
|
166
|
+
else:
|
|
167
|
+
self.ssh_client.connect(
|
|
168
|
+
hostname=host, port=port, username=user, password=password, timeout=10
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
self.shell_channel = self.ssh_client.invoke_shell(term='xterm', width=120, height=32)
|
|
172
|
+
self.shell_channel.settimeout(0.0)
|
|
173
|
+
self.reader_thread = SSHReaderThread(self.shell_channel)
|
|
174
|
+
self.reader_thread.data_received.connect(self._on_data)
|
|
175
|
+
self.reader_thread.closed.connect(self._on_closed)
|
|
176
|
+
self.reader_thread.start()
|
|
177
|
+
self.login_widget.status_label.setText(
|
|
178
|
+
self.word_dict.get("ssh_command_widget_dialog_title_not_connected"))
|
|
179
|
+
self.append_text(f"{self.word_dict.get('ssh_command_widget_log_message_connected')}"
|
|
180
|
+
f" {host}:{port} as {user}\n")
|
|
181
|
+
except Exception as e:
|
|
182
|
+
self.login_widget.status_label.setText(
|
|
183
|
+
self.word_dict.get('ssh_command_widget_status_label_disconnected'))
|
|
184
|
+
self.append_text(f"{self.word_dict.get('ssh_command_widget_log_message_error')} {e}\n")
|
|
185
|
+
self._cleanup()
|
|
186
|
+
|
|
187
|
+
def _on_data(self, data: bytes):
|
|
188
|
+
try:
|
|
189
|
+
text = data.decode("utf-8", errors="replace")
|
|
190
|
+
clean_text = ANSI_ESCAPE_PATTERN.sub('', text)
|
|
191
|
+
self.append_text(clean_text)
|
|
192
|
+
except Exception as error:
|
|
193
|
+
self.append_text(f"{self.word_dict.get('ssh_command_widget_error_message_decode_failed')}"
|
|
194
|
+
f" {error}\n")
|
|
195
|
+
|
|
196
|
+
def _on_closed(self, msg: str):
|
|
197
|
+
self.append_text(f"\n{self.word_dict.get('ssh_command_widget_log_message_channel_closed')}"
|
|
198
|
+
f" {msg}\n")
|
|
199
|
+
self.login_widget.status_label.setText(self.word_dict.get(
|
|
200
|
+
'ssh_command_widget_status_label_disconnected'
|
|
201
|
+
))
|
|
202
|
+
|
|
203
|
+
def send_command(self):
|
|
204
|
+
cmd = self.command_input_edit.text()
|
|
205
|
+
if not cmd:
|
|
206
|
+
return
|
|
207
|
+
if self.shell_channel and not self.shell_channel.closed:
|
|
208
|
+
try:
|
|
209
|
+
self.shell_channel.send(cmd + "\n")
|
|
210
|
+
self.command_input_edit.clear()
|
|
211
|
+
except Exception as e:
|
|
212
|
+
self.append_text(f"{self.word_dict.get('ssh_command_widget_error_message_send_failed')} {e}\n")
|
|
213
|
+
else:
|
|
214
|
+
QMessageBox.information(
|
|
215
|
+
self,
|
|
216
|
+
self.word_dict.get('ssh_command_widget_dialog_title_not_connected'),
|
|
217
|
+
self.word_dict.get('ssh_command_widget_dialog_message_not_connected_shell'))
|
|
218
|
+
|
|
219
|
+
def disconnect_ssh(self):
|
|
220
|
+
self.append_text(f"{self.word_dict.get('ssh_command_widget_log_message_disconnect_in_progress')} \n")
|
|
221
|
+
self._cleanup()
|
|
222
|
+
self.login_widget.status_label.setText(
|
|
223
|
+
self.word_dict.get('ssh_command_widget_status_label_disconnected'))
|
|
224
|
+
|
|
225
|
+
def _cleanup(self):
|
|
226
|
+
try:
|
|
227
|
+
if self.reader_thread:
|
|
228
|
+
self.reader_thread.stop()
|
|
229
|
+
self.reader_thread.wait(1000)
|
|
230
|
+
except Exception as error:
|
|
231
|
+
print(error)
|
|
232
|
+
self.reader_thread = None
|
|
233
|
+
|
|
234
|
+
try:
|
|
235
|
+
if self.shell_channel and not self.shell_channel.closed:
|
|
236
|
+
self.shell_channel.close()
|
|
237
|
+
except Exception as error:
|
|
238
|
+
print(error)
|
|
239
|
+
self.shell_channel = None
|
|
240
|
+
|
|
241
|
+
try:
|
|
242
|
+
if self.ssh_client:
|
|
243
|
+
self.ssh_client.close()
|
|
244
|
+
except Exception as error:
|
|
245
|
+
print(error)
|
|
246
|
+
self.ssh_client = None
|