PyBreeze-dev 1.0.9__tar.gz → 1.0.11__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.
Files changed (120) hide show
  1. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/PKG-INFO +1 -1
  2. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/extend/mail_thunder_extend/mail_thunder_setting.py +2 -2
  3. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/extend/process_executor/api_testka/api_testka_process.py +2 -2
  4. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/extend/process_executor/auto_control/auto_control_process.py +2 -2
  5. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/extend/process_executor/file_automation/file_automation_process.py +2 -2
  6. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/extend/process_executor/load_density/load_density_process.py +2 -2
  7. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/extend/process_executor/process_executor_utils.py +1 -1
  8. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/extend/process_executor/python_task_process_manager.py +202 -177
  9. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/extend/process_executor/test_pioneer/test_pioneer_process_manager.py +200 -181
  10. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/extend/process_executor/web_runner/web_runner_process.py +2 -2
  11. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/extend_multi_language/extend_english.py +3 -1
  12. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/extend_multi_language/extend_traditional_chinese.py +2 -0
  13. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_command_widget.py +1 -1
  14. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_file_viewer_widget.py +22 -5
  15. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/editor_main/main_ui.py +1 -1
  16. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/extend_ai_gui/code_review/cot_code_review_gui.py +3 -1
  17. pybreeze_dev-1.0.11/pybreeze/pybreeze_ui/jupyter_lab_gui/jupyer_lab_thread.py +125 -0
  18. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/jupyter_lab_gui/jupyter_lab_widget.py +7 -0
  19. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/utils/file_process/get_dir_file_list.py +1 -1
  20. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/utils/logging/logger.py +2 -4
  21. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze_dev.egg-info/PKG-INFO +1 -1
  22. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pyproject.toml +1 -1
  23. pybreeze_dev-1.0.9/pybreeze/pybreeze_ui/jupyter_lab_gui/jupyer_lab_thread.py +0 -95
  24. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/LICENSE +0 -0
  25. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/README.md +0 -0
  26. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/__init__.py +0 -0
  27. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/__main__.py +0 -0
  28. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/extend/__init__.py +0 -0
  29. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/extend/mail_thunder_extend/__init__.py +0 -0
  30. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/extend/process_executor/__init__.py +0 -0
  31. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/extend/process_executor/api_testka/__init__.py +0 -0
  32. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/extend/process_executor/auto_control/__init__.py +0 -0
  33. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/extend/process_executor/file_automation/__init__.py +0 -0
  34. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/extend/process_executor/load_density/__init__.py +0 -0
  35. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/extend/process_executor/mail_thunder/__init__.py +0 -0
  36. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/extend/process_executor/mail_thunder/mail_thunder_process.py +0 -0
  37. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/extend/process_executor/test_pioneer/__init__.py +0 -0
  38. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/extend/process_executor/web_runner/__init__.py +0 -0
  39. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/extend_multi_language/__init__.py +0 -0
  40. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/extend_multi_language/update_language_dict.py +0 -0
  41. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/__init__.py +0 -0
  42. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/connect_gui/__init__.py +0 -0
  43. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/connect_gui/ssh/__init__.py +0 -0
  44. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_login_widget.py +0 -0
  45. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_main_widget.py +0 -0
  46. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/connect_gui/url/__init__.py +0 -0
  47. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/connect_gui/url/ai_code_review_gui.py +0 -0
  48. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/editor_main/__init__.py +0 -0
  49. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/extend_ai_gui/__init__.py +0 -0
  50. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/extend_ai_gui/ai_gui_global_variable.py +0 -0
  51. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/extend_ai_gui/code_review/__init__.py +0 -0
  52. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/extend_ai_gui/code_review/code_review_thread.py +0 -0
  53. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/__init__.py +0 -0
  54. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/__init__.py +0 -0
  55. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/code_smell_detector.py +0 -0
  56. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/first_code_review.py +0 -0
  57. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/first_summary_prompt.py +0 -0
  58. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/global_rule.py +0 -0
  59. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/judge.py +0 -0
  60. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/judge_single_review.py +0 -0
  61. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/linter.py +0 -0
  62. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/step_by_step_analysis.py +0 -0
  63. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/total_summary.py +0 -0
  64. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_prompt_editor_widget.py +0 -0
  65. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_editor_widget.py +0 -0
  66. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_templates/__init__.py +0 -0
  67. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_templates/code_explainer.py +0 -0
  68. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_templates/code_review.py +0 -0
  69. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/extend_ai_gui/skills/__init__.py +0 -0
  70. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/extend_ai_gui/skills/skills_send_gui.py +0 -0
  71. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/jupyter_lab_gui/__init__.py +0 -0
  72. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/menu/__init__.py +0 -0
  73. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/menu/automation_menu/__init__.py +0 -0
  74. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/menu/automation_menu/api_testka_menu/__init__.py +0 -0
  75. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/menu/automation_menu/api_testka_menu/build_api_testka_menu.py +0 -0
  76. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/menu/automation_menu/auto_control_menu/__init__.py +0 -0
  77. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/menu/automation_menu/auto_control_menu/build_autocontrol_menu.py +0 -0
  78. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/menu/automation_menu/automation_file_menu/__init__.py +0 -0
  79. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/menu/automation_menu/automation_file_menu/build_automation_file_menu.py +0 -0
  80. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/menu/automation_menu/load_density_menu/__init__.py +0 -0
  81. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/menu/automation_menu/load_density_menu/build_load_density_menu.py +0 -0
  82. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/menu/automation_menu/mail_thunder_menu/__init__.py +0 -0
  83. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/menu/automation_menu/mail_thunder_menu/build_mail_thunder_menu.py +0 -0
  84. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/menu/automation_menu/test_pioneer_menu/__init__.py +0 -0
  85. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/menu/automation_menu/test_pioneer_menu/build_test_pioneer_menu.py +0 -0
  86. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/menu/automation_menu/web_runner_menu/__init__.py +0 -0
  87. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/menu/automation_menu/web_runner_menu/build_webrunner_menu.py +0 -0
  88. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/menu/build_menubar.py +0 -0
  89. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/menu/extend_jeditor_tab_menu/__init__.py +0 -0
  90. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/menu/extend_jeditor_tab_menu/jupyter_lab_tab.py +0 -0
  91. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/menu/install_menu/__init__.py +0 -0
  92. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/menu/install_menu/automation_menu/__init__.py +0 -0
  93. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/menu/install_menu/automation_menu/build_automation_install_menu.py +0 -0
  94. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/menu/install_menu/install_utils.py +0 -0
  95. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/menu/install_menu/tools_menu/__init__.py +0 -0
  96. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/menu/install_menu/tools_menu/build_tool_install_menu.py +0 -0
  97. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/menu/menu_utils.py +0 -0
  98. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/menu/tools/__init__.py +0 -0
  99. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/menu/tools/tools_menu.py +0 -0
  100. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/show_code_window/__init__.py +0 -0
  101. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/show_code_window/code_window.py +0 -0
  102. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/syntax/__init__.py +0 -0
  103. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/syntax/syntax_extend.py +0 -0
  104. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/pybreeze_ui/syntax/syntax_keyword.py +0 -0
  105. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/utils/__init__.py +0 -0
  106. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/utils/exception/__init__.py +0 -0
  107. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/utils/exception/exception_tags.py +0 -0
  108. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/utils/exception/exceptions.py +0 -0
  109. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/utils/file_process/__init__.py +0 -0
  110. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/utils/json_format/__init__.py +0 -0
  111. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/utils/json_format/json_process.py +0 -0
  112. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/utils/logging/__init__.py +0 -0
  113. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/utils/manager/__init__.py +0 -0
  114. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/utils/manager/package_manager/__init__.py +0 -0
  115. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze/utils/manager/package_manager/package_manager_class.py +0 -0
  116. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze_dev.egg-info/SOURCES.txt +0 -0
  117. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze_dev.egg-info/dependency_links.txt +0 -0
  118. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze_dev.egg-info/requires.txt +0 -0
  119. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/pybreeze_dev.egg-info/top_level.txt +0 -0
  120. {pybreeze_dev-1.0.9 → pybreeze_dev-1.0.11}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pybreeze_dev
3
- Version: 1.0.9
3
+ Version: 1.0.11
4
4
  Summary: IDE for multi automation
5
5
  Author-email: JE-Chen <jechenmailman@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/Intergration-Automation-Testing/AutomationEditor
@@ -11,7 +11,7 @@ def send_after_test(html_report_path: str = None) -> None:
11
11
  mail_thunder_smtp: SMTPWrapper = SMTPWrapper()
12
12
  if html_report_path is None and mail_thunder_smtp.login_state is True:
13
13
  user: str = mail_thunder_smtp.user
14
- with open("default_name.html", "r+") as file:
14
+ with open("default_name.html", "r") as file:
15
15
  html_string: str = file.read()
16
16
  message = mail_thunder_smtp.create_message_with_attach(
17
17
  html_string,
@@ -21,7 +21,7 @@ def send_after_test(html_report_path: str = None) -> None:
21
21
  mail_thunder_smtp.quit()
22
22
  elif mail_thunder_smtp.login_state is True:
23
23
  user: str = mail_thunder_smtp.user
24
- with open(html_report_path, "r+") as file:
24
+ with open(html_report_path, "r") as file:
25
25
  html_string: str = file.read()
26
26
  message: MIMEMultipart = mail_thunder_smtp.create_message_with_attach(
27
27
  html_string,
@@ -36,7 +36,7 @@ def call_api_testka_multi_file(
36
36
  if need_to_execute_list is not None \
37
37
  and isinstance(need_to_execute_list, list) and len(need_to_execute_list) > 0:
38
38
  for execute_file in need_to_execute_list:
39
- with open(execute_file, "r+") as test_script_json:
39
+ with open(execute_file, "r") as test_script_json:
40
40
  call_api_testka(
41
41
  main_window,
42
42
  test_script_json.read(),
@@ -56,7 +56,7 @@ def call_api_testka_multi_file_and_send(
56
56
  if need_to_execute_list is not None \
57
57
  and isinstance(need_to_execute_list, list) and len(need_to_execute_list) > 0:
58
58
  for execute_file in need_to_execute_list:
59
- with open(execute_file, "r+") as test_script_json:
59
+ with open(execute_file, "r") as test_script_json:
60
60
  call_api_testka_with_send(
61
61
  main_window,
62
62
  test_script_json.read(),
@@ -35,7 +35,7 @@ def call_auto_control_multi_file(
35
35
  if need_to_execute_list is not None \
36
36
  and isinstance(need_to_execute_list, list) and len(need_to_execute_list) > 0:
37
37
  for execute_file in need_to_execute_list:
38
- with open(execute_file, "r+") as test_script_json:
38
+ with open(execute_file, "r") as test_script_json:
39
39
  call_auto_control(
40
40
  main_window,
41
41
  test_script_json.read(),
@@ -52,7 +52,7 @@ def call_auto_control_multi_file_and_send(
52
52
  if need_to_execute_list is not None \
53
53
  and isinstance(need_to_execute_list, list) and len(need_to_execute_list) > 0:
54
54
  for execute_file in need_to_execute_list:
55
- with open(execute_file, "r+") as test_script_json:
55
+ with open(execute_file, "r") as test_script_json:
56
56
  call_auto_control_with_send(
57
57
  main_window,
58
58
  test_script_json.read(),
@@ -36,7 +36,7 @@ def call_file_automation_test_multi_file(
36
36
  if need_to_execute_list is not None \
37
37
  and isinstance(need_to_execute_list, list) and len(need_to_execute_list) > 0:
38
38
  for execute_file in need_to_execute_list:
39
- with open(execute_file, "r+") as test_script_json:
39
+ with open(execute_file, "r") as test_script_json:
40
40
  call_file_automation_test(
41
41
  main_window,
42
42
  test_script_json.read(),
@@ -56,7 +56,7 @@ def call_file_automation_test_multi_file_and_send(
56
56
  if need_to_execute_list is not None \
57
57
  and isinstance(need_to_execute_list, list) and len(need_to_execute_list) > 0:
58
58
  for execute_file in need_to_execute_list:
59
- with open(execute_file, "r+") as test_script_json:
59
+ with open(execute_file, "r") as test_script_json:
60
60
  call_file_automation_test_with_send(
61
61
  main_window,
62
62
  test_script_json.read(),
@@ -36,7 +36,7 @@ def call_load_density_multi_file(
36
36
  if need_to_execute_list is not None and isinstance(need_to_execute_list, list) and len(
37
37
  need_to_execute_list) > 0:
38
38
  for execute_file in need_to_execute_list:
39
- with open(execute_file, "r+") as test_script_json:
39
+ with open(execute_file, "r") as test_script_json:
40
40
  call_load_density(
41
41
  main_window,
42
42
  test_script_json.read(),
@@ -56,7 +56,7 @@ def call_load_density_multi_file_and_send(
56
56
  if need_to_execute_list is not None and isinstance(need_to_execute_list, list) and len(
57
57
  need_to_execute_list) > 0:
58
58
  for execute_file in need_to_execute_list:
59
- with open(execute_file, "r+") as test_script_json:
59
+ with open(execute_file, "r") as test_script_json:
60
60
  call_load_density_with_send(
61
61
  main_window,
62
62
  test_script_json.read(),
@@ -56,13 +56,13 @@ def start_process(
56
56
  if send_mail:
57
57
  process = TaskProcessManager(
58
58
  main_window=code_window,
59
+ task_done_trigger_function=send_after_test,
59
60
  program_buffer_size=program_buffer,
60
61
  program_encoding=main_window.encoding
61
62
  )
62
63
  else:
63
64
  process = TaskProcessManager(
64
65
  code_window,
65
- task_done_trigger_function=send_after_test,
66
66
  program_buffer_size=program_buffer,
67
67
  program_encoding=main_window.encoding
68
68
  )
@@ -1,177 +1,202 @@
1
- import json
2
- import queue
3
- import subprocess
4
- import sys
5
- import threading
6
- import typing
7
- from pathlib import Path
8
- from queue import Queue
9
- from threading import Thread
10
- from typing import Union
11
-
12
- from PySide6.QtCore import QTimer
13
- from PySide6.QtGui import QTextCharFormat
14
- from je_editor.pyside_ui.main_ui.save_settings.user_color_setting_file import actually_color_dict
15
- from je_editor.utils.venv_check.check_venv import check_and_choose_venv
16
-
17
- from pybreeze.pybreeze_ui.show_code_window.code_window import CodeWindow
18
-
19
-
20
- class TaskProcessManager(object):
21
- def __init__(
22
- self,
23
- main_window: CodeWindow,
24
- task_done_trigger_function: typing.Callable = None,
25
- error_trigger_function: typing.Callable = None,
26
- program_buffer_size: int = 1024,
27
- program_encoding: str = "utf-8"
28
- ):
29
- super().__init__()
30
- self.compiler_path = None
31
- # ite_instance param
32
- self.read_program_error_output_from_thread: Union[threading.Thread, None] = None
33
- self.read_program_output_from_thread: Union[threading.Thread, None] = None
34
- self.main_window: CodeWindow = main_window
35
- self.timer: QTimer = QTimer(self.main_window)
36
- self.still_run_program: bool = True
37
- self.program_encoding: str = program_encoding
38
- self.run_output_queue: Queue = Queue()
39
- self.run_error_queue: Queue = Queue()
40
- self.process: Union[subprocess.Popen, None] = None
41
-
42
- self.task_done_trigger_function: typing.Callable = task_done_trigger_function
43
- self.error_trigger_function: typing.Callable = error_trigger_function
44
- self.program_buffer_size = program_buffer_size
45
-
46
- def renew_path(self) -> None:
47
- if self.main_window.python_compiler is None:
48
- # Renew compiler path
49
- if sys.platform in ["win32", "cygwin", "msys"]:
50
- venv_path = Path(str(Path.cwd()) + "/venv/Scripts")
51
- else:
52
- venv_path = Path(str(Path.cwd()) + "/venv/bin")
53
- self.compiler_path = check_and_choose_venv(venv_path)
54
- else:
55
- self.compiler_path = self.main_window.python_compiler
56
-
57
- def start_test_process(self, package: str, exec_str: str):
58
- self.renew_path()
59
- if sys.platform in ["win32", "cygwin", "msys"]:
60
- exec_str = json.dumps(exec_str)
61
- args = [
62
- self.compiler_path,
63
- "-m",
64
- package,
65
- "--execute_str",
66
- exec_str
67
- ]
68
- else:
69
- args = " ".join([f"{self.compiler_path}", f"-m {package}", "--execute_str", f"{exec_str}"])
70
- self.process: subprocess.Popen = subprocess.Popen(
71
- args,
72
- stdin=subprocess.PIPE,
73
- stdout=subprocess.PIPE,
74
- stderr=subprocess.PIPE,
75
- shell=True,
76
- encoding=self.program_encoding
77
- )
78
- self.still_run_program = True
79
- # program output message queue thread
80
- self.read_program_output_from_thread = Thread(
81
- target=self.read_program_output_from_process,
82
- daemon=True
83
- )
84
- self.read_program_output_from_thread.start()
85
- # program error message queue thread
86
- self.read_program_error_output_from_thread = Thread(
87
- target=self.read_program_error_output_from_process,
88
- daemon=True
89
- )
90
- self.read_program_error_output_from_thread.start()
91
- # start Pyside update
92
- # start timer
93
- self.main_window.setWindowTitle(package)
94
- self.main_window.show()
95
- self.timer = QTimer()
96
- self.timer.setInterval(100)
97
- self.timer.timeout.connect(self.pull_text)
98
- self.timer.start()
99
-
100
- # Pyside UI update method
101
- def pull_text(self):
102
- try:
103
- if not self.run_output_queue.empty():
104
- output_message = self.run_output_queue.get_nowait()
105
- output_message = str(output_message).strip()
106
- if output_message:
107
- text_cursor = self.main_window.code_result.textCursor()
108
- text_format = QTextCharFormat()
109
- text_format.setForeground(actually_color_dict.get("normal_output_color"))
110
- text_cursor.insertText(output_message, text_format)
111
- text_cursor.insertBlock()
112
- if not self.run_error_queue.empty():
113
- error_message = self.run_error_queue.get_nowait()
114
- error_message = str(error_message).strip()
115
- if error_message:
116
- text_cursor = self.main_window.code_result.textCursor()
117
- text_format = QTextCharFormat()
118
- text_format.setForeground(actually_color_dict.get("error_output_color"))
119
- text_cursor.insertText(error_message, text_format)
120
- text_cursor.insertBlock()
121
- except queue.Empty:
122
- pass
123
- if self.process is not None:
124
- if self.process.returncode == 0:
125
- if self.timer.isActive():
126
- self.timer.stop()
127
- self.exit_program()
128
- elif self.process.returncode is not None:
129
- if self.timer.isActive():
130
- self.timer.stop()
131
- self.exit_program()
132
- if self.still_run_program:
133
- # poll return code
134
- self.process.poll()
135
- else:
136
- if self.timer.isActive():
137
- self.timer.stop()
138
-
139
- # exit program change run flag to false and clean read thread and queue and process
140
- def exit_program(self):
141
- self.still_run_program = False
142
- if self.read_program_output_from_thread is not None:
143
- self.read_program_output_from_thread = None
144
- if self.read_program_error_output_from_thread is not None:
145
- self.read_program_error_output_from_thread = None
146
- self.print_and_clear_queue()
147
- if self.process is not None:
148
- self.process.terminate()
149
- text_cursor = self.main_window.code_result.textCursor()
150
- text_format = QTextCharFormat()
151
- text_format.setForeground(actually_color_dict.get("normal_output_color"))
152
- text_cursor.insertText(f"Task exit with code {self.process.returncode}", text_format)
153
- text_cursor.insertBlock()
154
- self.process = None
155
-
156
- def print_and_clear_queue(self):
157
- self.run_output_queue = queue.Queue()
158
- self.run_error_queue = queue.Queue()
159
-
160
- def read_program_output_from_process(self):
161
- while self.still_run_program:
162
- self.process: subprocess.Popen
163
- program_output_data = self.process.stdout.readline(self.program_buffer_size) \
164
- .decode("utf-8", "replace")
165
- if self.process:
166
- self.process.stdout.flush()
167
- if program_output_data.strip() != "":
168
- self.run_output_queue.put(program_output_data)
169
-
170
- def read_program_error_output_from_process(self):
171
- while self.still_run_program:
172
- program_error_output_data = self.process.stderr.readline(self.program_buffer_size) \
173
- .decode("utf-8", "replace")
174
- if self.process:
175
- self.process.stderr.flush()
176
- if program_error_output_data.strip() != "":
177
- self.run_error_queue.put(program_error_output_data)
1
+ import queue
2
+ import subprocess
3
+ import sys
4
+ import threading
5
+ import typing
6
+ from pathlib import Path
7
+ from queue import Queue
8
+ from threading import Thread
9
+ from typing import Union
10
+
11
+ from PySide6.QtCore import QTimer
12
+ from PySide6.QtGui import QTextCharFormat
13
+ from je_editor.pyside_ui.main_ui.save_settings.user_color_setting_file import actually_color_dict
14
+ from je_editor.utils.venv_check.check_venv import check_and_choose_venv
15
+
16
+ from pybreeze.pybreeze_ui.show_code_window.code_window import CodeWindow
17
+
18
+
19
+ class TaskProcessManager(object):
20
+ def __init__(
21
+ self,
22
+ main_window: CodeWindow,
23
+ task_done_trigger_function: typing.Callable = None,
24
+ error_trigger_function: typing.Callable = None,
25
+ program_buffer_size: int = 1024,
26
+ program_encoding: str = "utf-8"
27
+ ):
28
+ super().__init__()
29
+ self.compiler_path = None
30
+ # ite_instance param
31
+ self.read_program_error_output_from_thread: Union[threading.Thread, None] = None
32
+ self.read_program_output_from_thread: Union[threading.Thread, None] = None
33
+ self.main_window: CodeWindow = main_window
34
+ self.timer: QTimer = QTimer(self.main_window)
35
+ self.still_run_program: bool = True
36
+ self.program_encoding: str = program_encoding
37
+ self.run_output_queue: Queue = Queue()
38
+ self.run_error_queue: Queue = Queue()
39
+ self.process: Union[subprocess.Popen, None] = None
40
+
41
+ self.task_done_trigger_function: typing.Callable = task_done_trigger_function
42
+ self.error_trigger_function: typing.Callable = error_trigger_function
43
+ self.program_buffer_size = program_buffer_size
44
+
45
+ def renew_path(self) -> None:
46
+ if self.main_window.python_compiler is None:
47
+ # Renew compiler path
48
+ if sys.platform in ["win32", "cygwin", "msys"]:
49
+ venv_path = Path(str(Path.cwd()) + "/venv/Scripts")
50
+ else:
51
+ venv_path = Path(str(Path.cwd()) + "/venv/bin")
52
+ self.compiler_path = check_and_choose_venv(venv_path)
53
+ else:
54
+ self.compiler_path = self.main_window.python_compiler
55
+
56
+ def start_test_process(self, package: str, exec_str: str):
57
+ self.renew_path()
58
+ if sys.platform in ["win32", "cygwin", "msys"]:
59
+ exec_str = __import__("json").dumps(exec_str)
60
+ args = [
61
+ str(self.compiler_path),
62
+ "-m",
63
+ package,
64
+ "--execute_str",
65
+ exec_str
66
+ ]
67
+ self.process = subprocess.Popen(
68
+ args,
69
+ stdin=subprocess.PIPE,
70
+ stdout=subprocess.PIPE,
71
+ stderr=subprocess.PIPE,
72
+ )
73
+ self.still_run_program = True
74
+ # program output message queue thread
75
+ self.read_program_output_from_thread = Thread(
76
+ target=self.read_program_output_from_process,
77
+ daemon=True
78
+ )
79
+ self.read_program_output_from_thread.start()
80
+ # program error message queue thread
81
+ self.read_program_error_output_from_thread = Thread(
82
+ target=self.read_program_error_output_from_process,
83
+ daemon=True
84
+ )
85
+ self.read_program_error_output_from_thread.start()
86
+ # start Pyside update
87
+ # start timer
88
+ self.main_window.setWindowTitle(package)
89
+ self.main_window.show()
90
+ self.timer = QTimer()
91
+ self.timer.setInterval(100)
92
+ self.timer.timeout.connect(self.pull_text)
93
+ self.timer.start()
94
+
95
+ # Pyside UI update method
96
+ def pull_text(self):
97
+ try:
98
+ if not self.run_output_queue.empty():
99
+ output_message = self.run_output_queue.get_nowait()
100
+ output_message = str(output_message).strip()
101
+ if output_message:
102
+ text_cursor = self.main_window.code_result.textCursor()
103
+ text_format = QTextCharFormat()
104
+ text_format.setForeground(actually_color_dict.get("normal_output_color"))
105
+ text_cursor.insertText(output_message, text_format)
106
+ text_cursor.insertBlock()
107
+ if not self.run_error_queue.empty():
108
+ error_message = self.run_error_queue.get_nowait()
109
+ error_message = str(error_message).strip()
110
+ if error_message:
111
+ text_cursor = self.main_window.code_result.textCursor()
112
+ text_format = QTextCharFormat()
113
+ text_format.setForeground(actually_color_dict.get("error_output_color"))
114
+ text_cursor.insertText(error_message, text_format)
115
+ text_cursor.insertBlock()
116
+ except queue.Empty:
117
+ pass
118
+ if self.process is not None:
119
+ if self.process.returncode == 0:
120
+ if self.timer.isActive():
121
+ self.timer.stop()
122
+ self.exit_program()
123
+ elif self.process.returncode is not None:
124
+ if self.timer.isActive():
125
+ self.timer.stop()
126
+ self.exit_program()
127
+ if self.still_run_program:
128
+ # poll return code
129
+ self.process.poll()
130
+ else:
131
+ if self.timer.isActive():
132
+ self.timer.stop()
133
+
134
+ # exit program change run flag to false and clean read thread and queue and process
135
+ def exit_program(self):
136
+ self.still_run_program = False
137
+ if self.read_program_output_from_thread is not None:
138
+ self.read_program_output_from_thread = None
139
+ if self.read_program_error_output_from_thread is not None:
140
+ self.read_program_error_output_from_thread = None
141
+ self.drain_and_display_queue()
142
+ if self.process is not None:
143
+ self.process.terminate()
144
+ text_cursor = self.main_window.code_result.textCursor()
145
+ text_format = QTextCharFormat()
146
+ text_format.setForeground(actually_color_dict.get("normal_output_color"))
147
+ text_cursor.insertText(f"Task exit with code {self.process.returncode}", text_format)
148
+ text_cursor.insertBlock()
149
+ self.process = None
150
+ if self.task_done_trigger_function is not None:
151
+ try:
152
+ self.task_done_trigger_function()
153
+ except Exception as e:
154
+ print(repr(e), file=sys.stderr)
155
+
156
+ def drain_and_display_queue(self):
157
+ while not self.run_output_queue.empty():
158
+ try:
159
+ output_message = self.run_output_queue.get_nowait()
160
+ output_message = str(output_message).strip()
161
+ if output_message:
162
+ text_cursor = self.main_window.code_result.textCursor()
163
+ text_format = QTextCharFormat()
164
+ text_format.setForeground(actually_color_dict.get("normal_output_color"))
165
+ text_cursor.insertText(output_message, text_format)
166
+ text_cursor.insertBlock()
167
+ except queue.Empty:
168
+ break
169
+ while not self.run_error_queue.empty():
170
+ try:
171
+ error_message = self.run_error_queue.get_nowait()
172
+ error_message = str(error_message).strip()
173
+ if error_message:
174
+ text_cursor = self.main_window.code_result.textCursor()
175
+ text_format = QTextCharFormat()
176
+ text_format.setForeground(actually_color_dict.get("error_output_color"))
177
+ text_cursor.insertText(error_message, text_format)
178
+ text_cursor.insertBlock()
179
+ except queue.Empty:
180
+ break
181
+
182
+ def read_program_output_from_process(self):
183
+ while self.still_run_program:
184
+ proc = self.process
185
+ if proc is None:
186
+ break
187
+ program_output_data = proc.stdout.readline(self.program_buffer_size)
188
+ if isinstance(program_output_data, bytes):
189
+ program_output_data = program_output_data.decode(self.program_encoding, "replace")
190
+ if program_output_data.strip():
191
+ self.run_output_queue.put(program_output_data)
192
+
193
+ def read_program_error_output_from_process(self):
194
+ while self.still_run_program:
195
+ proc = self.process
196
+ if proc is None:
197
+ break
198
+ program_error_output_data = proc.stderr.readline(self.program_buffer_size)
199
+ if isinstance(program_error_output_data, bytes):
200
+ program_error_output_data = program_error_output_data.decode(self.program_encoding, "replace")
201
+ if program_error_output_data.strip():
202
+ self.run_error_queue.put(program_error_output_data)