PyBreeze-dev 1.0.12__tar.gz → 1.0.13__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 (131) hide show
  1. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/PKG-INFO +2 -2
  2. pybreeze_dev-1.0.13/pybreeze/extend/mail_thunder_extend/mail_thunder_setting.py +40 -0
  3. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/extend/process_executor/api_testka/api_testka_process.py +63 -66
  4. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/extend/process_executor/auto_control/auto_control_process.py +63 -62
  5. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/extend/process_executor/file_automation/file_automation_process.py +63 -66
  6. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/extend/process_executor/file_runner_process.py +9 -1
  7. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/extend/process_executor/load_density/load_density_process.py +63 -66
  8. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/extend/process_executor/process_executor_utils.py +3 -8
  9. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/extend/process_executor/python_task_process_manager.py +48 -48
  10. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/extend/process_executor/test_pioneer/test_pioneer_process_manager.py +26 -45
  11. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/extend/process_executor/web_runner/web_runner_process.py +63 -66
  12. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_command_widget.py +5 -4
  13. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/connect_gui/url/ai_code_review_gui.py +8 -6
  14. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/editor_main/main_ui.py +7 -4
  15. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/extend_ai_gui/code_review/code_review_thread.py +1 -1
  16. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/extend_ai_gui/code_review/cot_code_review_gui.py +7 -3
  17. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/extend_ai_gui/skills/skills_send_gui.py +20 -2
  18. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/jupyter_lab_gui/jupyter_lab_thread.py +132 -124
  19. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/jupyter_lab_gui/jupyter_lab_widget.py +1 -2
  20. pybreeze_dev-1.0.13/pybreeze/pybreeze_ui/menu/automation_menu/api_testka_menu/build_api_testka_menu.py +44 -0
  21. pybreeze_dev-1.0.13/pybreeze/pybreeze_ui/menu/automation_menu/auto_control_menu/build_autocontrol_menu.py +70 -0
  22. pybreeze_dev-1.0.13/pybreeze/pybreeze_ui/menu/automation_menu/automation_file_menu/build_automation_file_menu.py +40 -0
  23. pybreeze_dev-1.0.13/pybreeze/pybreeze_ui/menu/automation_menu/automation_menu_factory.py +111 -0
  24. pybreeze_dev-1.0.13/pybreeze/pybreeze_ui/menu/automation_menu/load_density_menu/build_load_density_menu.py +44 -0
  25. pybreeze_dev-1.0.13/pybreeze/pybreeze_ui/menu/automation_menu/mail_thunder_menu/build_mail_thunder_menu.py +31 -0
  26. pybreeze_dev-1.0.13/pybreeze/pybreeze_ui/menu/automation_menu/web_runner_menu/build_webrunner_menu.py +40 -0
  27. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/show_code_window/code_window.py +11 -1
  28. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/utils/file_process/get_dir_file_list.py +9 -3
  29. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/utils/json_format/json_process.py +2 -2
  30. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/utils/logging/logger.py +53 -50
  31. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze_dev.egg-info/PKG-INFO +2 -2
  32. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze_dev.egg-info/SOURCES.txt +1 -0
  33. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pyproject.toml +2 -2
  34. pybreeze_dev-1.0.12/pybreeze/extend/mail_thunder_extend/mail_thunder_setting.py +0 -38
  35. pybreeze_dev-1.0.12/pybreeze/pybreeze_ui/menu/automation_menu/api_testka_menu/build_api_testka_menu.py +0 -137
  36. pybreeze_dev-1.0.12/pybreeze/pybreeze_ui/menu/automation_menu/auto_control_menu/build_autocontrol_menu.py +0 -169
  37. pybreeze_dev-1.0.12/pybreeze/pybreeze_ui/menu/automation_menu/automation_file_menu/build_automation_file_menu.py +0 -122
  38. pybreeze_dev-1.0.12/pybreeze/pybreeze_ui/menu/automation_menu/load_density_menu/build_load_density_menu.py +0 -137
  39. pybreeze_dev-1.0.12/pybreeze/pybreeze_ui/menu/automation_menu/mail_thunder_menu/build_mail_thunder_menu.py +0 -88
  40. pybreeze_dev-1.0.12/pybreeze/pybreeze_ui/menu/automation_menu/web_runner_menu/build_webrunner_menu.py +0 -119
  41. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/LICENSE +0 -0
  42. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/README.md +0 -0
  43. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/__init__.py +0 -0
  44. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/__main__.py +0 -0
  45. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/extend/__init__.py +0 -0
  46. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/extend/mail_thunder_extend/__init__.py +0 -0
  47. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/extend/process_executor/__init__.py +0 -0
  48. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/extend/process_executor/api_testka/__init__.py +0 -0
  49. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/extend/process_executor/auto_control/__init__.py +0 -0
  50. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/extend/process_executor/file_automation/__init__.py +0 -0
  51. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/extend/process_executor/load_density/__init__.py +0 -0
  52. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/extend/process_executor/mail_thunder/__init__.py +0 -0
  53. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/extend/process_executor/mail_thunder/mail_thunder_process.py +0 -0
  54. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/extend/process_executor/test_pioneer/__init__.py +0 -0
  55. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/extend/process_executor/web_runner/__init__.py +0 -0
  56. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/extend_multi_language/__init__.py +0 -0
  57. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/extend_multi_language/extend_english.py +0 -0
  58. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/extend_multi_language/extend_traditional_chinese.py +0 -0
  59. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/extend_multi_language/update_language_dict.py +0 -0
  60. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/__init__.py +0 -0
  61. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/connect_gui/__init__.py +0 -0
  62. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/connect_gui/ssh/__init__.py +0 -0
  63. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_file_viewer_widget.py +0 -0
  64. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_login_widget.py +0 -0
  65. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_main_widget.py +0 -0
  66. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/connect_gui/url/__init__.py +0 -0
  67. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/editor_main/__init__.py +0 -0
  68. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/extend_ai_gui/__init__.py +0 -0
  69. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/extend_ai_gui/ai_gui_global_variable.py +0 -0
  70. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/extend_ai_gui/code_review/__init__.py +0 -0
  71. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/__init__.py +0 -0
  72. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/__init__.py +0 -0
  73. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/code_smell_detector.py +0 -0
  74. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/first_code_review.py +0 -0
  75. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/first_summary_prompt.py +0 -0
  76. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/global_rule.py +0 -0
  77. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/judge.py +0 -0
  78. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/judge_single_review.py +0 -0
  79. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/linter.py +0 -0
  80. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/step_by_step_analysis.py +0 -0
  81. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/total_summary.py +0 -0
  82. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_prompt_editor_widget.py +0 -0
  83. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_editor_widget.py +0 -0
  84. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_templates/__init__.py +0 -0
  85. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_templates/code_explainer.py +0 -0
  86. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_templates/code_review.py +0 -0
  87. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/extend_ai_gui/skills/__init__.py +0 -0
  88. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/jupyter_lab_gui/__init__.py +0 -0
  89. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/menu/__init__.py +0 -0
  90. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/menu/automation_menu/__init__.py +0 -0
  91. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/menu/automation_menu/api_testka_menu/__init__.py +0 -0
  92. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/menu/automation_menu/auto_control_menu/__init__.py +0 -0
  93. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/menu/automation_menu/automation_file_menu/__init__.py +0 -0
  94. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/menu/automation_menu/load_density_menu/__init__.py +0 -0
  95. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/menu/automation_menu/mail_thunder_menu/__init__.py +0 -0
  96. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/menu/automation_menu/test_pioneer_menu/__init__.py +0 -0
  97. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/menu/automation_menu/test_pioneer_menu/build_test_pioneer_menu.py +0 -0
  98. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/menu/automation_menu/web_runner_menu/__init__.py +0 -0
  99. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/menu/build_menubar.py +0 -0
  100. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/menu/extend_jeditor_tab_menu/__init__.py +0 -0
  101. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/menu/extend_jeditor_tab_menu/jupyter_lab_tab.py +0 -0
  102. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/menu/install_menu/__init__.py +0 -0
  103. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/menu/install_menu/automation_menu/__init__.py +0 -0
  104. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/menu/install_menu/automation_menu/build_automation_install_menu.py +0 -0
  105. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/menu/install_menu/install_utils.py +0 -0
  106. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/menu/install_menu/tools_menu/__init__.py +0 -0
  107. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/menu/install_menu/tools_menu/build_tool_install_menu.py +0 -0
  108. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/menu/menu_utils.py +0 -0
  109. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/menu/plugin_menu/__init__.py +0 -0
  110. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/menu/plugin_menu/build_plugin_menu.py +0 -0
  111. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/menu/plugin_menu/build_run_with_menu.py +0 -0
  112. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/menu/tools/__init__.py +0 -0
  113. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/menu/tools/tools_menu.py +0 -0
  114. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/show_code_window/__init__.py +0 -0
  115. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/syntax/__init__.py +0 -0
  116. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/syntax/syntax_extend.py +0 -0
  117. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/pybreeze_ui/syntax/syntax_keyword.py +0 -0
  118. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/utils/__init__.py +0 -0
  119. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/utils/exception/__init__.py +0 -0
  120. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/utils/exception/exception_tags.py +0 -0
  121. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/utils/exception/exceptions.py +0 -0
  122. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/utils/file_process/__init__.py +0 -0
  123. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/utils/json_format/__init__.py +0 -0
  124. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/utils/logging/__init__.py +0 -0
  125. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/utils/manager/__init__.py +0 -0
  126. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/utils/manager/package_manager/__init__.py +0 -0
  127. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze/utils/manager/package_manager/package_manager_class.py +0 -0
  128. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze_dev.egg-info/dependency_links.txt +0 -0
  129. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze_dev.egg-info/requires.txt +0 -0
  130. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/pybreeze_dev.egg-info/top_level.txt +0 -0
  131. {pybreeze_dev-1.0.12 → pybreeze_dev-1.0.13}/setup.cfg +0 -0
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pybreeze_dev
3
- Version: 1.0.12
3
+ Version: 1.0.13
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
7
7
  Project-URL: Code, https://github.com/Intergration-Automation-Testing/AutomationEditor
8
8
  Classifier: Programming Language :: Python :: 3.10
9
- Classifier: Development Status :: 2 - Pre-Alpha
9
+ Classifier: Development Status :: 4 - Beta
10
10
  Classifier: Environment :: Win32 (MS Windows)
11
11
  Classifier: Environment :: MacOS X
12
12
  Classifier: Environment :: X11 Applications
@@ -0,0 +1,40 @@
1
+ from __future__ import annotations
2
+
3
+ import os
4
+ from email.mime.multipart import MIMEMultipart
5
+
6
+ from pybreeze.utils.exception.exception_tags import send_html_exception_tag
7
+ from pybreeze.utils.exception.exceptions import ITESendHtmlReportException
8
+ from pybreeze.utils.logging.logger import pybreeze_logger
9
+
10
+
11
+ def send_after_test(html_report_path: str | None = None) -> None:
12
+ try:
13
+ from je_mail_thunder import SMTPWrapper
14
+ mail_thunder_smtp: SMTPWrapper = SMTPWrapper()
15
+
16
+ if not mail_thunder_smtp.login_state:
17
+ raise ITESendHtmlReportException
18
+
19
+ # Determine which report file to use
20
+ report_path = html_report_path if html_report_path is not None else "default_name.html"
21
+
22
+ if not os.path.isfile(report_path):
23
+ pybreeze_logger.error(f"Report file not found: {report_path}")
24
+ return
25
+
26
+ user: str = mail_thunder_smtp.user
27
+ with open(report_path, encoding="utf-8") as file:
28
+ html_string: str = file.read()
29
+ message: MIMEMultipart = mail_thunder_smtp.create_message_with_attach(
30
+ html_string,
31
+ {"Subject": "Test Report", "To": user, "From": user},
32
+ report_path, use_html=True)
33
+ mail_thunder_smtp.send_message(message)
34
+ mail_thunder_smtp.quit()
35
+ except ITESendHtmlReportException as error:
36
+ pybreeze_logger.error(f"{repr(error)} {send_html_exception_tag}")
37
+ except FileNotFoundError as error:
38
+ pybreeze_logger.error(f"Report file not found: {error}")
39
+ except Exception as error:
40
+ pybreeze_logger.error(f"Failed to send report: {error}")
@@ -1,66 +1,63 @@
1
- from __future__ import annotations
2
-
3
- from typing import TYPE_CHECKING
4
-
5
- from pybreeze.extend.process_executor.process_executor_utils import build_process
6
-
7
- if TYPE_CHECKING:
8
- from pybreeze.pybreeze_ui.editor_main.main_ui import PyBreezeMainWindow
9
- import sys
10
-
11
- from pybreeze.utils.file_process.get_dir_file_list import ask_and_get_dir_files_as_list
12
-
13
-
14
- def call_api_testka(
15
- main_window: PyBreezeMainWindow,
16
- exec_str: str | None = None,
17
- program_buffer: int = 1024000
18
- ):
19
- build_process(main_window, "je_api_testka", exec_str, False, program_buffer)
20
-
21
-
22
- def call_api_testka_with_send(
23
- main_window: PyBreezeMainWindow,
24
- exec_str: str | None = None,
25
- program_buffer: int = 1024000
26
- ):
27
- build_process(main_window, "je_api_testka", exec_str, True, program_buffer)
28
-
29
-
30
- def call_api_testka_multi_file(
31
- main_window: PyBreezeMainWindow,
32
- program_buffer: int = 1024000
33
- ):
34
- try:
35
- need_to_execute_list: list = ask_and_get_dir_files_as_list(main_window)
36
- if need_to_execute_list is not None \
37
- and isinstance(need_to_execute_list, list) and len(need_to_execute_list) > 0:
38
- for execute_file in need_to_execute_list:
39
- with open(execute_file) as test_script_json:
40
- call_api_testka(
41
- main_window,
42
- test_script_json.read(),
43
- program_buffer
44
- )
45
- except Exception as error:
46
- print(repr(error), file=sys.stderr)
47
-
48
-
49
- def call_api_testka_multi_file_and_send(
50
- main_window: PyBreezeMainWindow,
51
- program_buffer: int = 1024000
52
- ):
53
- try:
54
-
55
- need_to_execute_list: list = ask_and_get_dir_files_as_list(main_window)
56
- if need_to_execute_list is not None \
57
- and isinstance(need_to_execute_list, list) and len(need_to_execute_list) > 0:
58
- for execute_file in need_to_execute_list:
59
- with open(execute_file) as test_script_json:
60
- call_api_testka_with_send(
61
- main_window,
62
- test_script_json.read(),
63
- program_buffer
64
- )
65
- except Exception as error:
66
- print(repr(error), file=sys.stderr)
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from pybreeze.extend.process_executor.process_executor_utils import build_process
6
+
7
+ if TYPE_CHECKING:
8
+ from pybreeze.pybreeze_ui.editor_main.main_ui import PyBreezeMainWindow
9
+
10
+ from pybreeze.utils.file_process.get_dir_file_list import ask_and_get_dir_files_as_list
11
+ from pybreeze.utils.logging.logger import pybreeze_logger
12
+
13
+
14
+ def call_api_testka(
15
+ main_window: PyBreezeMainWindow,
16
+ exec_str: str | None = None,
17
+ program_buffer: int = 1024000
18
+ ):
19
+ build_process(main_window, "je_api_testka", exec_str, False, program_buffer)
20
+
21
+
22
+ def call_api_testka_with_send(
23
+ main_window: PyBreezeMainWindow,
24
+ exec_str: str | None = None,
25
+ program_buffer: int = 1024000
26
+ ):
27
+ build_process(main_window, "je_api_testka", exec_str, True, program_buffer)
28
+
29
+
30
+ def call_api_testka_multi_file(
31
+ main_window: PyBreezeMainWindow,
32
+ program_buffer: int = 1024000
33
+ ):
34
+ try:
35
+ need_to_execute_list = ask_and_get_dir_files_as_list(main_window)
36
+ if need_to_execute_list is not None and len(need_to_execute_list) > 0:
37
+ for execute_file in need_to_execute_list:
38
+ with open(execute_file, encoding="utf-8") as test_script_json:
39
+ call_api_testka(
40
+ main_window,
41
+ test_script_json.read(),
42
+ program_buffer
43
+ )
44
+ except Exception as error:
45
+ pybreeze_logger.error(f"api_testka multi file error: {error}")
46
+
47
+
48
+ def call_api_testka_multi_file_and_send(
49
+ main_window: PyBreezeMainWindow,
50
+ program_buffer: int = 1024000
51
+ ):
52
+ try:
53
+ need_to_execute_list = ask_and_get_dir_files_as_list(main_window)
54
+ if need_to_execute_list is not None and len(need_to_execute_list) > 0:
55
+ for execute_file in need_to_execute_list:
56
+ with open(execute_file, encoding="utf-8") as test_script_json:
57
+ call_api_testka_with_send(
58
+ main_window,
59
+ test_script_json.read(),
60
+ program_buffer
61
+ )
62
+ except Exception as error:
63
+ pybreeze_logger.error(f"api_testka multi file and send error: {error}")
@@ -1,62 +1,63 @@
1
- from __future__ import annotations
2
-
3
- from typing import TYPE_CHECKING
4
-
5
- from pybreeze.extend.process_executor.process_executor_utils import build_process
6
-
7
- if TYPE_CHECKING:
8
- from pybreeze.pybreeze_ui.editor_main.main_ui import PyBreezeMainWindow
9
- import sys
10
-
11
- from pybreeze.utils.file_process.get_dir_file_list import ask_and_get_dir_files_as_list
12
-
13
-
14
- def call_auto_control(
15
- main_window: PyBreezeMainWindow,
16
- exec_str: str | None = None,
17
- program_buffer: int = 1024000
18
- ):
19
- build_process(main_window, "je_auto_control", exec_str, False, program_buffer)
20
-
21
-
22
- def call_auto_control_with_send(
23
- main_window: PyBreezeMainWindow,
24
- exec_str: str | None = None,
25
- program_buffer: int = 1024000
26
- ):
27
- build_process(main_window, "je_auto_control", exec_str, True, program_buffer)
28
-
29
-
30
- def call_auto_control_multi_file(
31
- main_window: PyBreezeMainWindow,
32
- program_buffer: int = 1024000
33
- ):
34
- need_to_execute_list: list = ask_and_get_dir_files_as_list(main_window)
35
- if need_to_execute_list is not None \
36
- and isinstance(need_to_execute_list, list) and len(need_to_execute_list) > 0:
37
- for execute_file in need_to_execute_list:
38
- with open(execute_file) as test_script_json:
39
- call_auto_control(
40
- main_window,
41
- test_script_json.read(),
42
- program_buffer
43
- )
44
-
45
-
46
- def call_auto_control_multi_file_and_send(
47
- main_window: PyBreezeMainWindow,
48
- program_buffer: int = 1024000
49
- ):
50
- try:
51
- need_to_execute_list: list = ask_and_get_dir_files_as_list(main_window)
52
- if need_to_execute_list is not None \
53
- and isinstance(need_to_execute_list, list) and len(need_to_execute_list) > 0:
54
- for execute_file in need_to_execute_list:
55
- with open(execute_file) as test_script_json:
56
- call_auto_control_with_send(
57
- main_window,
58
- test_script_json.read(),
59
- program_buffer
60
- )
61
- except Exception as error:
62
- print(repr(error), file=sys.stderr)
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from pybreeze.extend.process_executor.process_executor_utils import build_process
6
+
7
+ if TYPE_CHECKING:
8
+ from pybreeze.pybreeze_ui.editor_main.main_ui import PyBreezeMainWindow
9
+
10
+ from pybreeze.utils.file_process.get_dir_file_list import ask_and_get_dir_files_as_list
11
+ from pybreeze.utils.logging.logger import pybreeze_logger
12
+
13
+
14
+ def call_auto_control(
15
+ main_window: PyBreezeMainWindow,
16
+ exec_str: str | None = None,
17
+ program_buffer: int = 1024000
18
+ ):
19
+ build_process(main_window, "je_auto_control", exec_str, False, program_buffer)
20
+
21
+
22
+ def call_auto_control_with_send(
23
+ main_window: PyBreezeMainWindow,
24
+ exec_str: str | None = None,
25
+ program_buffer: int = 1024000
26
+ ):
27
+ build_process(main_window, "je_auto_control", exec_str, True, program_buffer)
28
+
29
+
30
+ def call_auto_control_multi_file(
31
+ main_window: PyBreezeMainWindow,
32
+ program_buffer: int = 1024000
33
+ ):
34
+ try:
35
+ need_to_execute_list = ask_and_get_dir_files_as_list(main_window)
36
+ if need_to_execute_list is not None and len(need_to_execute_list) > 0:
37
+ for execute_file in need_to_execute_list:
38
+ with open(execute_file, encoding="utf-8") as test_script_json:
39
+ call_auto_control(
40
+ main_window,
41
+ test_script_json.read(),
42
+ program_buffer
43
+ )
44
+ except Exception as error:
45
+ pybreeze_logger.error(f"auto control multi file error: {error}")
46
+
47
+
48
+ def call_auto_control_multi_file_and_send(
49
+ main_window: PyBreezeMainWindow,
50
+ program_buffer: int = 1024000
51
+ ):
52
+ try:
53
+ need_to_execute_list = ask_and_get_dir_files_as_list(main_window)
54
+ if need_to_execute_list is not None and len(need_to_execute_list) > 0:
55
+ for execute_file in need_to_execute_list:
56
+ with open(execute_file, encoding="utf-8") as test_script_json:
57
+ call_auto_control_with_send(
58
+ main_window,
59
+ test_script_json.read(),
60
+ program_buffer
61
+ )
62
+ except Exception as error:
63
+ pybreeze_logger.error(f"auto control multi file and send error: {error}")
@@ -1,66 +1,63 @@
1
- from __future__ import annotations
2
-
3
- from typing import TYPE_CHECKING
4
-
5
- from pybreeze.extend.process_executor.process_executor_utils import build_process
6
-
7
- if TYPE_CHECKING:
8
- from pybreeze.pybreeze_ui.editor_main.main_ui import PyBreezeMainWindow
9
- import sys
10
-
11
- from pybreeze.utils.file_process.get_dir_file_list import ask_and_get_dir_files_as_list
12
-
13
-
14
- def call_file_automation_test(
15
- main_window: PyBreezeMainWindow,
16
- exec_str: str | None = None,
17
- program_buffer: int = 1024000
18
- ):
19
- build_process(main_window, "automation_file", exec_str, False, program_buffer)
20
-
21
-
22
- def call_file_automation_test_with_send(
23
- main_window: PyBreezeMainWindow,
24
- exec_str: str | None = None,
25
- program_buffer: int = 1024000
26
- ):
27
- build_process(main_window, "automation_file", exec_str, True, program_buffer)
28
-
29
-
30
- def call_file_automation_test_multi_file(
31
- main_window: PyBreezeMainWindow,
32
- program_buffer: int = 1024000
33
- ):
34
- try:
35
- need_to_execute_list: list = ask_and_get_dir_files_as_list(main_window)
36
- if need_to_execute_list is not None \
37
- and isinstance(need_to_execute_list, list) and len(need_to_execute_list) > 0:
38
- for execute_file in need_to_execute_list:
39
- with open(execute_file) as test_script_json:
40
- call_file_automation_test(
41
- main_window,
42
- test_script_json.read(),
43
- program_buffer
44
- )
45
- except Exception as error:
46
- print(repr(error), file=sys.stderr)
47
-
48
-
49
- def call_file_automation_test_multi_file_and_send(
50
- main_window: PyBreezeMainWindow,
51
- program_buffer: int = 1024000
52
- ):
53
- try:
54
-
55
- need_to_execute_list: list = ask_and_get_dir_files_as_list(main_window)
56
- if need_to_execute_list is not None \
57
- and isinstance(need_to_execute_list, list) and len(need_to_execute_list) > 0:
58
- for execute_file in need_to_execute_list:
59
- with open(execute_file) as test_script_json:
60
- call_file_automation_test_with_send(
61
- main_window,
62
- test_script_json.read(),
63
- program_buffer
64
- )
65
- except Exception as error:
66
- print(repr(error), file=sys.stderr)
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from pybreeze.extend.process_executor.process_executor_utils import build_process
6
+
7
+ if TYPE_CHECKING:
8
+ from pybreeze.pybreeze_ui.editor_main.main_ui import PyBreezeMainWindow
9
+
10
+ from pybreeze.utils.file_process.get_dir_file_list import ask_and_get_dir_files_as_list
11
+ from pybreeze.utils.logging.logger import pybreeze_logger
12
+
13
+
14
+ def call_file_automation_test(
15
+ main_window: PyBreezeMainWindow,
16
+ exec_str: str | None = None,
17
+ program_buffer: int = 1024000
18
+ ):
19
+ build_process(main_window, "automation_file", exec_str, False, program_buffer)
20
+
21
+
22
+ def call_file_automation_test_with_send(
23
+ main_window: PyBreezeMainWindow,
24
+ exec_str: str | None = None,
25
+ program_buffer: int = 1024000
26
+ ):
27
+ build_process(main_window, "automation_file", exec_str, True, program_buffer)
28
+
29
+
30
+ def call_file_automation_test_multi_file(
31
+ main_window: PyBreezeMainWindow,
32
+ program_buffer: int = 1024000
33
+ ):
34
+ try:
35
+ need_to_execute_list = ask_and_get_dir_files_as_list(main_window)
36
+ if need_to_execute_list is not None and len(need_to_execute_list) > 0:
37
+ for execute_file in need_to_execute_list:
38
+ with open(execute_file, encoding="utf-8") as test_script_json:
39
+ call_file_automation_test(
40
+ main_window,
41
+ test_script_json.read(),
42
+ program_buffer
43
+ )
44
+ except Exception as error:
45
+ pybreeze_logger.error(f"file automation multi file error: {error}")
46
+
47
+
48
+ def call_file_automation_test_multi_file_and_send(
49
+ main_window: PyBreezeMainWindow,
50
+ program_buffer: int = 1024000
51
+ ):
52
+ try:
53
+ need_to_execute_list = ask_and_get_dir_files_as_list(main_window)
54
+ if need_to_execute_list is not None and len(need_to_execute_list) > 0:
55
+ for execute_file in need_to_execute_list:
56
+ with open(execute_file, encoding="utf-8") as test_script_json:
57
+ call_file_automation_test_with_send(
58
+ main_window,
59
+ test_script_json.read(),
60
+ program_buffer
61
+ )
62
+ except Exception as error:
63
+ pybreeze_logger.error(f"file automation multi file and send error: {error}")
@@ -127,7 +127,7 @@ class FileRunnerProcess:
127
127
  self._stderr_thread.start()
128
128
 
129
129
  self.main_window.show()
130
- self.timer = QTimer()
130
+ self.timer = QTimer(self.main_window)
131
131
  self.timer.setInterval(50)
132
132
  self.timer.timeout.connect(self._pull_text)
133
133
  self.timer.start()
@@ -163,6 +163,14 @@ class FileRunnerProcess:
163
163
  if self.timer and self.timer.isActive():
164
164
  self.timer.stop()
165
165
 
166
+ # Wait for reader threads to finish
167
+ if self._stdout_thread is not None:
168
+ self._stdout_thread.join(timeout=2)
169
+ self._stdout_thread = None
170
+ if self._stderr_thread is not None:
171
+ self._stderr_thread.join(timeout=2)
172
+ self._stderr_thread = None
173
+
166
174
  # Drain remaining output directly (not via _pull_text to avoid recursion)
167
175
  self._drain_queues()
168
176
 
@@ -1,66 +1,63 @@
1
- from __future__ import annotations
2
-
3
- from typing import TYPE_CHECKING
4
-
5
- from pybreeze.extend.process_executor.process_executor_utils import build_process
6
-
7
- if TYPE_CHECKING:
8
- from pybreeze.pybreeze_ui.editor_main.main_ui import PyBreezeMainWindow
9
- import sys
10
-
11
- from pybreeze.utils.file_process.get_dir_file_list import ask_and_get_dir_files_as_list
12
-
13
-
14
- def call_load_density(
15
- main_window: PyBreezeMainWindow,
16
- exec_str: str | None = None,
17
- program_buffer: int = 1024000
18
- ):
19
- build_process(main_window, "je_load_density", exec_str, False, program_buffer)
20
-
21
-
22
- def call_load_density_with_send(
23
- main_window: PyBreezeMainWindow,
24
- exec_str: str | None = None,
25
- program_buffer: int = 1024000
26
- ):
27
- build_process(main_window, "je_load_density", exec_str, True, program_buffer)
28
-
29
-
30
- def call_load_density_multi_file(
31
- main_window: PyBreezeMainWindow,
32
- program_buffer: int = 1024000
33
- ):
34
- try:
35
- need_to_execute_list: list = ask_and_get_dir_files_as_list(main_window)
36
- if need_to_execute_list is not None and isinstance(need_to_execute_list, list) and len(
37
- need_to_execute_list) > 0:
38
- for execute_file in need_to_execute_list:
39
- with open(execute_file) as test_script_json:
40
- call_load_density(
41
- main_window,
42
- test_script_json.read(),
43
- program_buffer
44
- )
45
- except Exception as error:
46
- print(repr(error), file=sys.stderr)
47
-
48
-
49
- def call_load_density_multi_file_and_send(
50
- main_window: PyBreezeMainWindow,
51
- program_buffer: int = 1024000
52
- ):
53
- try:
54
-
55
- need_to_execute_list: list = ask_and_get_dir_files_as_list(main_window)
56
- if need_to_execute_list is not None and isinstance(need_to_execute_list, list) and len(
57
- need_to_execute_list) > 0:
58
- for execute_file in need_to_execute_list:
59
- with open(execute_file) as test_script_json:
60
- call_load_density_with_send(
61
- main_window,
62
- test_script_json.read(),
63
- program_buffer
64
- )
65
- except Exception as error:
66
- print(repr(error), file=sys.stderr)
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from pybreeze.extend.process_executor.process_executor_utils import build_process
6
+
7
+ if TYPE_CHECKING:
8
+ from pybreeze.pybreeze_ui.editor_main.main_ui import PyBreezeMainWindow
9
+
10
+ from pybreeze.utils.file_process.get_dir_file_list import ask_and_get_dir_files_as_list
11
+ from pybreeze.utils.logging.logger import pybreeze_logger
12
+
13
+
14
+ def call_load_density(
15
+ main_window: PyBreezeMainWindow,
16
+ exec_str: str | None = None,
17
+ program_buffer: int = 1024000
18
+ ):
19
+ build_process(main_window, "je_load_density", exec_str, False, program_buffer)
20
+
21
+
22
+ def call_load_density_with_send(
23
+ main_window: PyBreezeMainWindow,
24
+ exec_str: str | None = None,
25
+ program_buffer: int = 1024000
26
+ ):
27
+ build_process(main_window, "je_load_density", exec_str, True, program_buffer)
28
+
29
+
30
+ def call_load_density_multi_file(
31
+ main_window: PyBreezeMainWindow,
32
+ program_buffer: int = 1024000
33
+ ):
34
+ try:
35
+ need_to_execute_list = ask_and_get_dir_files_as_list(main_window)
36
+ if need_to_execute_list is not None and len(need_to_execute_list) > 0:
37
+ for execute_file in need_to_execute_list:
38
+ with open(execute_file, encoding="utf-8") as test_script_json:
39
+ call_load_density(
40
+ main_window,
41
+ test_script_json.read(),
42
+ program_buffer
43
+ )
44
+ except Exception as error:
45
+ pybreeze_logger.error(f"load density multi file error: {error}")
46
+
47
+
48
+ def call_load_density_multi_file_and_send(
49
+ main_window: PyBreezeMainWindow,
50
+ program_buffer: int = 1024000
51
+ ):
52
+ try:
53
+ need_to_execute_list = ask_and_get_dir_files_as_list(main_window)
54
+ if need_to_execute_list is not None and len(need_to_execute_list) > 0:
55
+ for execute_file in need_to_execute_list:
56
+ with open(execute_file, encoding="utf-8") as test_script_json:
57
+ call_load_density_with_send(
58
+ main_window,
59
+ test_script_json.read(),
60
+ program_buffer
61
+ )
62
+ except Exception as error:
63
+ pybreeze_logger.error(f"load density multi file and send error: {error}")
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import json
4
- import sys
5
4
  from typing import TYPE_CHECKING
6
5
 
7
6
  from je_editor import EditorWidget
@@ -11,6 +10,7 @@ from pybreeze.extend.mail_thunder_extend.mail_thunder_setting import send_after_
11
10
  from pybreeze.extend.process_executor.python_task_process_manager import TaskProcessManager
12
11
  from pybreeze.utils.exception.exception_tags import wrong_test_data_format_exception_tag
13
12
  from pybreeze.utils.exception.exceptions import ITETestExecutorException
13
+ from pybreeze.utils.logging.logger import pybreeze_logger
14
14
 
15
15
  if TYPE_CHECKING:
16
16
  from pybreeze.pybreeze_ui.editor_main.main_ui import PyBreezeMainWindow
@@ -31,14 +31,9 @@ def build_process(
31
31
  test_format_code = exec_str
32
32
  start_process(main_window, package, test_format_code, send_mail, program_buffer)
33
33
  except json.decoder.JSONDecodeError as error:
34
- print(
35
- repr(error) +
36
- "\n"
37
- + wrong_test_data_format_exception_tag,
38
- file=sys.stderr
39
- )
34
+ pybreeze_logger.error(f"{repr(error)}\n{wrong_test_data_format_exception_tag}")
40
35
  except ITETestExecutorException as error:
41
- print(repr(error), file=sys.stderr)
36
+ pybreeze_logger.error(repr(error))
42
37
 
43
38
 
44
39
  def start_process(