PyBreeze 1.0.26__tar.gz → 1.0.28__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 (200) hide show
  1. pybreeze-1.0.28/PKG-INFO +482 -0
  2. pybreeze-1.0.28/README.md +449 -0
  3. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/extend/process_executor/file_runner_process.py +1 -0
  4. pybreeze-1.0.28/pybreeze/extend/process_executor/prthinker/prthinker_process.py +87 -0
  5. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/extend/process_executor/python_task_process_manager.py +20 -2
  6. pybreeze-1.0.28/pybreeze/extend/prthinker_extend/prthinker_setting.py +252 -0
  7. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/extend_multi_language/extend_english.py +55 -0
  8. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/extend_multi_language/extend_traditional_chinese.py +55 -0
  9. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/diagram_editor/diagram_editor_widget.py +47 -43
  10. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/diagram_editor/diagram_mermaid_parser.py +1 -1
  11. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/diagram_editor/diagram_net_utils.py +5 -3
  12. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/diagram_editor/diagram_property_panel.py +39 -26
  13. pybreeze-1.0.28/pybreeze/pybreeze_ui/dialog/prthinker_setting_dialog.py +117 -0
  14. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/jupyter_lab_gui/jupyter_lab_thread.py +2 -1
  15. pybreeze-1.0.28/pybreeze/pybreeze_ui/menu/automation_menu/prthinker_menu/build_prthinker_menu.py +112 -0
  16. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/menu/build_menubar.py +3 -0
  17. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/menu/install_menu/automation_menu/build_automation_install_menu.py +38 -0
  18. pybreeze-1.0.28/pybreeze/pybreeze_ui/menu/tools/tools_menu.py +275 -0
  19. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/tools_gui/curl_import_gui.py +26 -3
  20. pybreeze-1.0.28/pybreeze/pybreeze_ui/tools_gui/har_import_gui.py +188 -0
  21. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/tools_gui/header_analyzer_gui.py +39 -5
  22. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/tools_gui/json_format_gui.py +6 -1
  23. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/tools_gui/response_inspector_gui.py +28 -6
  24. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/utils/curl_import/curl_parser.py +13 -51
  25. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/utils/curl_import/request_codegen.py +3 -1
  26. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/utils/curl_import/script_templates.py +77 -27
  27. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/utils/exception/exception_tags.py +6 -0
  28. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/utils/exception/exceptions.py +6 -0
  29. pybreeze-1.0.28/pybreeze/utils/har_import/har_codegen.py +138 -0
  30. pybreeze-1.0.28/pybreeze/utils/har_import/har_parser.py +304 -0
  31. pybreeze-1.0.28/pybreeze/utils/header_tools/header_merge.py +71 -0
  32. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/utils/jwt_tools/jwt_decoder.py +21 -0
  33. pybreeze-1.0.28/pybreeze/utils/query_tools/__init__.py +0 -0
  34. pybreeze-1.0.28/pybreeze/utils/regex_tools/__init__.py +0 -0
  35. pybreeze-1.0.28/pybreeze/utils/response_inspector/__init__.py +0 -0
  36. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/utils/response_inspector/response_analyzer.py +3 -9
  37. pybreeze-1.0.28/pybreeze/utils/timestamp_tools/__init__.py +0 -0
  38. pybreeze-1.0.28/pybreeze/utils/url_tools/__init__.py +0 -0
  39. pybreeze-1.0.28/pybreeze.egg-info/PKG-INFO +482 -0
  40. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze.egg-info/SOURCES.txt +13 -0
  41. {pybreeze-1.0.26 → pybreeze-1.0.28}/pyproject.toml +1 -1
  42. pybreeze-1.0.26/PKG-INFO +0 -466
  43. pybreeze-1.0.26/README.md +0 -433
  44. pybreeze-1.0.26/pybreeze/pybreeze_ui/menu/tools/tools_menu.py +0 -424
  45. pybreeze-1.0.26/pybreeze.egg-info/PKG-INFO +0 -466
  46. {pybreeze-1.0.26 → pybreeze-1.0.28}/LICENSE +0 -0
  47. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/__init__.py +0 -0
  48. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/__main__.py +0 -0
  49. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/extend/__init__.py +0 -0
  50. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/extend/mail_thunder_extend/__init__.py +0 -0
  51. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/extend/mail_thunder_extend/mail_thunder_setting.py +0 -0
  52. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/extend/process_executor/__init__.py +0 -0
  53. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/extend/process_executor/api_testka/__init__.py +0 -0
  54. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/extend/process_executor/api_testka/api_testka_process.py +0 -0
  55. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/extend/process_executor/auto_control/__init__.py +0 -0
  56. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/extend/process_executor/auto_control/auto_control_process.py +0 -0
  57. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/extend/process_executor/file_automation/__init__.py +0 -0
  58. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/extend/process_executor/file_automation/file_automation_process.py +0 -0
  59. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/extend/process_executor/load_density/__init__.py +0 -0
  60. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/extend/process_executor/load_density/load_density_process.py +0 -0
  61. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/extend/process_executor/mail_thunder/__init__.py +0 -0
  62. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/extend/process_executor/mail_thunder/mail_thunder_process.py +0 -0
  63. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/extend/process_executor/process_executor_utils.py +0 -0
  64. {pybreeze-1.0.26/pybreeze/extend/process_executor/test_pioneer → pybreeze-1.0.28/pybreeze/extend/process_executor/prthinker}/__init__.py +0 -0
  65. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/extend/process_executor/queue_pump.py +0 -0
  66. {pybreeze-1.0.26/pybreeze/extend/process_executor/web_runner → pybreeze-1.0.28/pybreeze/extend/process_executor/test_pioneer}/__init__.py +0 -0
  67. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/extend/process_executor/test_pioneer/test_pioneer_process_manager.py +0 -0
  68. {pybreeze-1.0.26/pybreeze/extend_multi_language → pybreeze-1.0.28/pybreeze/extend/process_executor/web_runner}/__init__.py +0 -0
  69. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/extend/process_executor/web_runner/web_runner_process.py +0 -0
  70. {pybreeze-1.0.26/pybreeze/pybreeze_ui → pybreeze-1.0.28/pybreeze/extend/prthinker_extend}/__init__.py +0 -0
  71. {pybreeze-1.0.26/pybreeze/pybreeze_ui/connect_gui → pybreeze-1.0.28/pybreeze/extend_multi_language}/__init__.py +0 -0
  72. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/extend_multi_language/update_language_dict.py +0 -0
  73. {pybreeze-1.0.26/pybreeze/pybreeze_ui/connect_gui/ssh → pybreeze-1.0.28/pybreeze/pybreeze_ui}/__init__.py +0 -0
  74. {pybreeze-1.0.26/pybreeze/pybreeze_ui/connect_gui/url → pybreeze-1.0.28/pybreeze/pybreeze_ui/connect_gui}/__init__.py +0 -0
  75. {pybreeze-1.0.26/pybreeze/pybreeze_ui/diagram_editor → pybreeze-1.0.28/pybreeze/pybreeze_ui/connect_gui/ssh}/__init__.py +0 -0
  76. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_command_widget.py +0 -0
  77. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_file_viewer_widget.py +0 -0
  78. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_host_key_policy.py +0 -0
  79. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_key_loader.py +0 -0
  80. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_login_widget.py +0 -0
  81. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_main_widget.py +0 -0
  82. {pybreeze-1.0.26/pybreeze/pybreeze_ui/editor_main → pybreeze-1.0.28/pybreeze/pybreeze_ui/connect_gui/url}/__init__.py +0 -0
  83. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/connect_gui/url/ai_code_review_gui.py +0 -0
  84. {pybreeze-1.0.26/pybreeze/pybreeze_ui/extend_ai_gui → pybreeze-1.0.28/pybreeze/pybreeze_ui/diagram_editor}/__init__.py +0 -0
  85. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/diagram_editor/diagram_commands.py +0 -0
  86. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/diagram_editor/diagram_items.py +0 -0
  87. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/diagram_editor/diagram_scene.py +0 -0
  88. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/diagram_editor/diagram_view.py +0 -0
  89. {pybreeze-1.0.26/pybreeze/pybreeze_ui/extend_ai_gui/code_review → pybreeze-1.0.28/pybreeze/pybreeze_ui/dialog}/__init__.py +0 -0
  90. {pybreeze-1.0.26/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui → pybreeze-1.0.28/pybreeze/pybreeze_ui/editor_main}/__init__.py +0 -0
  91. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/editor_main/file_tree_context_menu.py +0 -0
  92. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/editor_main/main_ui.py +0 -0
  93. {pybreeze-1.0.26/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates → pybreeze-1.0.28/pybreeze/pybreeze_ui/extend_ai_gui}/__init__.py +0 -0
  94. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/extend_ai_gui/ai_gui_global_variable.py +0 -0
  95. {pybreeze-1.0.26/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_templates → pybreeze-1.0.28/pybreeze/pybreeze_ui/extend_ai_gui/code_review}/__init__.py +0 -0
  96. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/extend_ai_gui/code_review/code_review_thread.py +0 -0
  97. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/extend_ai_gui/code_review/cot_code_review_gui.py +0 -0
  98. {pybreeze-1.0.26/pybreeze/pybreeze_ui/extend_ai_gui/skills → pybreeze-1.0.28/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui}/__init__.py +0 -0
  99. {pybreeze-1.0.26/pybreeze/pybreeze_ui/jupyter_lab_gui → pybreeze-1.0.28/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates}/__init__.py +0 -0
  100. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/code_smell_detector.py +0 -0
  101. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/first_code_review.py +0 -0
  102. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/first_summary_prompt.py +0 -0
  103. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/global_rule.py +0 -0
  104. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/judge.py +0 -0
  105. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/judge_single_review.py +0 -0
  106. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/linter.py +0 -0
  107. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/step_by_step_analysis.py +0 -0
  108. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/total_summary.py +0 -0
  109. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_prompt_editor_widget.py +0 -0
  110. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/prompt_file_io.py +0 -0
  111. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_editor_widget.py +0 -0
  112. {pybreeze-1.0.26/pybreeze/pybreeze_ui/menu → pybreeze-1.0.28/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_templates}/__init__.py +0 -0
  113. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_templates/code_explainer.py +0 -0
  114. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_templates/code_review.py +0 -0
  115. {pybreeze-1.0.26/pybreeze/pybreeze_ui/menu/automation_menu → pybreeze-1.0.28/pybreeze/pybreeze_ui/extend_ai_gui/skills}/__init__.py +0 -0
  116. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/extend_ai_gui/skills/skills_send_gui.py +0 -0
  117. {pybreeze-1.0.26/pybreeze/pybreeze_ui/menu/automation_menu/api_testka_menu → pybreeze-1.0.28/pybreeze/pybreeze_ui/jupyter_lab_gui}/__init__.py +0 -0
  118. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/jupyter_lab_gui/jupyter_lab_widget.py +0 -0
  119. {pybreeze-1.0.26/pybreeze/pybreeze_ui/menu/automation_menu/auto_control_menu → pybreeze-1.0.28/pybreeze/pybreeze_ui/menu}/__init__.py +0 -0
  120. {pybreeze-1.0.26/pybreeze/pybreeze_ui/menu/automation_menu/automation_file_menu → pybreeze-1.0.28/pybreeze/pybreeze_ui/menu/automation_menu}/__init__.py +0 -0
  121. {pybreeze-1.0.26/pybreeze/pybreeze_ui/menu/automation_menu/load_density_menu → pybreeze-1.0.28/pybreeze/pybreeze_ui/menu/automation_menu/api_testka_menu}/__init__.py +0 -0
  122. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/menu/automation_menu/api_testka_menu/build_api_testka_menu.py +0 -0
  123. {pybreeze-1.0.26/pybreeze/pybreeze_ui/menu/automation_menu/mail_thunder_menu → pybreeze-1.0.28/pybreeze/pybreeze_ui/menu/automation_menu/auto_control_menu}/__init__.py +0 -0
  124. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/menu/automation_menu/auto_control_menu/build_autocontrol_menu.py +0 -0
  125. {pybreeze-1.0.26/pybreeze/pybreeze_ui/menu/automation_menu/test_pioneer_menu → pybreeze-1.0.28/pybreeze/pybreeze_ui/menu/automation_menu/automation_file_menu}/__init__.py +0 -0
  126. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/menu/automation_menu/automation_file_menu/build_automation_file_menu.py +0 -0
  127. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/menu/automation_menu/automation_menu_factory.py +0 -0
  128. {pybreeze-1.0.26/pybreeze/pybreeze_ui/menu/automation_menu/web_runner_menu → pybreeze-1.0.28/pybreeze/pybreeze_ui/menu/automation_menu/load_density_menu}/__init__.py +0 -0
  129. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/menu/automation_menu/load_density_menu/build_load_density_menu.py +0 -0
  130. {pybreeze-1.0.26/pybreeze/pybreeze_ui/menu/extend_jeditor_tab_menu → pybreeze-1.0.28/pybreeze/pybreeze_ui/menu/automation_menu/mail_thunder_menu}/__init__.py +0 -0
  131. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/menu/automation_menu/mail_thunder_menu/build_mail_thunder_menu.py +0 -0
  132. {pybreeze-1.0.26/pybreeze/pybreeze_ui/menu/install_menu → pybreeze-1.0.28/pybreeze/pybreeze_ui/menu/automation_menu/prthinker_menu}/__init__.py +0 -0
  133. {pybreeze-1.0.26/pybreeze/pybreeze_ui/menu/install_menu/automation_menu → pybreeze-1.0.28/pybreeze/pybreeze_ui/menu/automation_menu/test_pioneer_menu}/__init__.py +0 -0
  134. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/menu/automation_menu/test_pioneer_menu/build_test_pioneer_menu.py +0 -0
  135. {pybreeze-1.0.26/pybreeze/pybreeze_ui/menu/install_menu/tools_menu → pybreeze-1.0.28/pybreeze/pybreeze_ui/menu/automation_menu/web_runner_menu}/__init__.py +0 -0
  136. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/menu/automation_menu/web_runner_menu/build_webrunner_menu.py +0 -0
  137. {pybreeze-1.0.26/pybreeze/pybreeze_ui/menu/plugin_menu → pybreeze-1.0.28/pybreeze/pybreeze_ui/menu/extend_jeditor_tab_menu}/__init__.py +0 -0
  138. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/menu/extend_jeditor_tab_menu/jupyter_lab_tab.py +0 -0
  139. {pybreeze-1.0.26/pybreeze/pybreeze_ui/menu/tools → pybreeze-1.0.28/pybreeze/pybreeze_ui/menu/install_menu}/__init__.py +0 -0
  140. {pybreeze-1.0.26/pybreeze/pybreeze_ui/show_code_window → pybreeze-1.0.28/pybreeze/pybreeze_ui/menu/install_menu/automation_menu}/__init__.py +0 -0
  141. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/menu/install_menu/install_utils.py +0 -0
  142. {pybreeze-1.0.26/pybreeze/pybreeze_ui/syntax → pybreeze-1.0.28/pybreeze/pybreeze_ui/menu/install_menu/tools_menu}/__init__.py +0 -0
  143. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/menu/install_menu/tools_menu/build_tool_install_menu.py +0 -0
  144. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/menu/menu_utils.py +0 -0
  145. {pybreeze-1.0.26/pybreeze/pybreeze_ui/tools_gui → pybreeze-1.0.28/pybreeze/pybreeze_ui/menu/plugin_menu}/__init__.py +0 -0
  146. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/menu/plugin_menu/build_plugin_menu.py +0 -0
  147. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/menu/plugin_menu/build_run_with_menu.py +0 -0
  148. {pybreeze-1.0.26/pybreeze/utils → pybreeze-1.0.28/pybreeze/pybreeze_ui/menu/tools}/__init__.py +0 -0
  149. {pybreeze-1.0.26/pybreeze/utils/curl_import → pybreeze-1.0.28/pybreeze/pybreeze_ui/show_code_window}/__init__.py +0 -0
  150. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/show_code_window/code_window.py +0 -0
  151. {pybreeze-1.0.26/pybreeze/utils/diff_tools → pybreeze-1.0.28/pybreeze/pybreeze_ui/syntax}/__init__.py +0 -0
  152. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/syntax/syntax_extend.py +0 -0
  153. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/syntax/syntax_keyword.py +0 -0
  154. {pybreeze-1.0.26/pybreeze/utils/exception → pybreeze-1.0.28/pybreeze/pybreeze_ui/tools_gui}/__init__.py +0 -0
  155. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/tools_gui/diff_gui.py +0 -0
  156. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/tools_gui/hash_gui.py +0 -0
  157. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/tools_gui/http_status_gui.py +0 -0
  158. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/tools_gui/jwt_decoder_gui.py +0 -0
  159. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/tools_gui/output_actions.py +0 -0
  160. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/tools_gui/query_json_gui.py +0 -0
  161. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/tools_gui/regex_gui.py +0 -0
  162. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/tools_gui/timestamp_gui.py +0 -0
  163. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/tools_gui/tool_tabs.py +0 -0
  164. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/pybreeze_ui/tools_gui/url_builder_gui.py +0 -0
  165. {pybreeze-1.0.26/pybreeze/utils/file_process → pybreeze-1.0.28/pybreeze/utils}/__init__.py +0 -0
  166. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/utils/app_dirs.py +0 -0
  167. {pybreeze-1.0.26/pybreeze/utils/hash_tools → pybreeze-1.0.28/pybreeze/utils/curl_import}/__init__.py +0 -0
  168. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/utils/curl_import/request_body.py +0 -0
  169. {pybreeze-1.0.26/pybreeze/utils/header_tools → pybreeze-1.0.28/pybreeze/utils/diff_tools}/__init__.py +0 -0
  170. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/utils/diff_tools/text_diff.py +0 -0
  171. {pybreeze-1.0.26/pybreeze/utils/http_reference → pybreeze-1.0.28/pybreeze/utils/exception}/__init__.py +0 -0
  172. {pybreeze-1.0.26/pybreeze/utils/jwt_tools → pybreeze-1.0.28/pybreeze/utils/file_process}/__init__.py +0 -0
  173. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/utils/file_process/get_dir_file_list.py +0 -0
  174. {pybreeze-1.0.26/pybreeze/utils/logging → pybreeze-1.0.28/pybreeze/utils/har_import}/__init__.py +0 -0
  175. {pybreeze-1.0.26/pybreeze/utils/manager → pybreeze-1.0.28/pybreeze/utils/hash_tools}/__init__.py +0 -0
  176. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/utils/hash_tools/hash_text.py +0 -0
  177. {pybreeze-1.0.26/pybreeze/utils/manager/package_manager → pybreeze-1.0.28/pybreeze/utils/header_tools}/__init__.py +0 -0
  178. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/utils/header_tools/header_analyzer.py +0 -0
  179. {pybreeze-1.0.26/pybreeze/utils/network → pybreeze-1.0.28/pybreeze/utils/http_reference}/__init__.py +0 -0
  180. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/utils/http_reference/status_codes.py +0 -0
  181. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/utils/json_format/__init__.py +0 -0
  182. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/utils/json_format/json_process.py +0 -0
  183. {pybreeze-1.0.26/pybreeze/utils/query_tools → pybreeze-1.0.28/pybreeze/utils/jwt_tools}/__init__.py +0 -0
  184. {pybreeze-1.0.26/pybreeze/utils/regex_tools → pybreeze-1.0.28/pybreeze/utils/logging}/__init__.py +0 -0
  185. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/utils/logging/logger.py +0 -0
  186. {pybreeze-1.0.26/pybreeze/utils/response_inspector → pybreeze-1.0.28/pybreeze/utils/manager}/__init__.py +0 -0
  187. {pybreeze-1.0.26/pybreeze/utils/timestamp_tools → pybreeze-1.0.28/pybreeze/utils/manager/package_manager}/__init__.py +0 -0
  188. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/utils/manager/package_manager/package_manager_class.py +0 -0
  189. {pybreeze-1.0.26/pybreeze/utils/url_tools → pybreeze-1.0.28/pybreeze/utils/network}/__init__.py +0 -0
  190. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/utils/network/http_client.py +0 -0
  191. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/utils/network/url_validation.py +0 -0
  192. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/utils/query_tools/query_convert.py +0 -0
  193. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/utils/regex_tools/regex_tester.py +0 -0
  194. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/utils/subprocess_util.py +0 -0
  195. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/utils/timestamp_tools/timestamp_converter.py +0 -0
  196. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze/utils/url_tools/url_convert.py +0 -0
  197. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze.egg-info/dependency_links.txt +0 -0
  198. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze.egg-info/requires.txt +0 -0
  199. {pybreeze-1.0.26 → pybreeze-1.0.28}/pybreeze.egg-info/top_level.txt +0 -0
  200. {pybreeze-1.0.26 → pybreeze-1.0.28}/setup.cfg +0 -0
@@ -0,0 +1,482 @@
1
+ Metadata-Version: 2.4
2
+ Name: pybreeze
3
+ Version: 1.0.28
4
+ Summary: IDE 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: Programming Language :: Python :: 3.11
10
+ Classifier: Programming Language :: Python :: 3.12
11
+ Classifier: Programming Language :: Python :: 3.13
12
+ Classifier: Programming Language :: Python :: 3.14
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Environment :: Win32 (MS Windows)
15
+ Classifier: Environment :: MacOS X
16
+ Classifier: Environment :: X11 Applications
17
+ Classifier: Operating System :: OS Independent
18
+ Requires-Python: >=3.10
19
+ Description-Content-Type: text/markdown
20
+ License-File: LICENSE
21
+ Requires-Dist: je-editor
22
+ Requires-Dist: je_auto_control
23
+ Requires-Dist: je_web_runner
24
+ Requires-Dist: je_load_density
25
+ Requires-Dist: je_api_testka
26
+ Requires-Dist: je-mail-thunder
27
+ Requires-Dist: automation-file
28
+ Requires-Dist: PySide6==6.11.0
29
+ Requires-Dist: test_pioneer
30
+ Requires-Dist: paramiko
31
+ Requires-Dist: jupyterlab
32
+ Dynamic: license-file
33
+
34
+ # PyBreeze: The Automation-First IDE
35
+
36
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/downloads/)
37
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
38
+ [![PySide6](https://img.shields.io/badge/GUI-PySide6-green.svg)](https://doc.qt.io/qtforpython/)
39
+ [![Documentation](https://readthedocs.org/projects/pybreeze/badge/?version=latest)](https://pybreeze.readthedocs.io/en/latest/index.html)
40
+
41
+ [繁體中文](README/README_zh-TW.md) | [简体中文](README/README_zh-CN.md)
42
+
43
+ **PyBreeze** is a Python IDE purpose-built for automation engineers. Web, API, GUI and load testing live in one window, alongside the everyday HTTP tooling that automation work actually needs — no plugin hunting, no environment archaeology.
44
+
45
+ ![PyBreeze main window](images/main_window.png)
46
+
47
+ *The main window: automation keywords highlighted in an APITestka action file, project tree on the left, run/format/debug/terminal panes below.*
48
+
49
+ ---
50
+
51
+ ## Table of Contents
52
+
53
+ - [A Tour in Screenshots](#a-tour-in-screenshots)
54
+ - [Four-Dimensional Automation](#four-dimensional-automation)
55
+ - [Built-in Tools](#built-in-tools)
56
+ - [AI-Assisted Development](#ai-assisted-development)
57
+ - [Plugin System](#plugin-system)
58
+ - [Multi-Language UI](#multi-language-ui)
59
+ - [Architecture](#architecture)
60
+ - [Installation](#installation)
61
+ - [Quick Start](#quick-start)
62
+ - [Integrated Automation Modules](#integrated-automation-modules)
63
+ - [Project Structure](#project-structure)
64
+ - [Dependencies](#dependencies)
65
+ - [Testing & CI](#testing--ci)
66
+ - [Target Audience](#target-audience)
67
+ - [License](#license)
68
+
69
+ ---
70
+
71
+ ## A Tour in Screenshots
72
+
73
+ Three menus carry most of the IDE. **Automation** runs your scripts, **Tools** opens the utility tabs, **Install** fetches the modules.
74
+
75
+ | Automation | Tools | Install |
76
+ |---|---|---|
77
+ | ![Automation menu](images/menu_automation.png) | ![Tools menu](images/menu_tools.png) | ![Install menu](images/menu_install.png) |
78
+
79
+ Every automation run happens in its own subprocess. Output streams back into a run window while the editor stays responsive — stdout in the normal colour, stderr in red, and the process exit code at the end:
80
+
81
+ ![Run output window](images/run_output_window.png)
82
+
83
+ *A real run: PyBreeze's own curl parser invoked through the IDE's file runner, generating a pytest test.*
84
+
85
+ ---
86
+
87
+ ## Four-Dimensional Automation
88
+
89
+ PyBreeze covers the full spectrum of automation testing out of the box:
90
+
91
+ | Dimension | Module | What it does |
92
+ |---|---|---|
93
+ | **API** | [APITestka](https://github.com/Intergration-Automation-Testing/APITestka) | RESTful testing with request builders, response analyzers, mock servers and assertions |
94
+ | **Web** | [WebRunner](https://github.com/Intergration-Automation-Testing/WebRunner) | Browser-driven interaction and testing with driver and locator integration |
95
+ | **GUI** | [AutoControl](https://github.com/Intergration-Automation-Testing/AutoControl) | Desktop automation via image recognition, coordinates, keyboard/mouse control and recording |
96
+ | **Load** | [LoadDensity](https://github.com/Intergration-Automation-Testing/LoadDensity) | High-concurrency performance testing for stability under pressure |
97
+
98
+ Plus:
99
+
100
+ - **File Automation** — file and directory operations via [automation-file](https://github.com/Intergration-Automation-Testing/AutomationFile)
101
+ - **Mail Automation** — report delivery via [MailThunder](https://github.com/Intergration-Automation-Testing/MailThunder)
102
+ - **Test Framework** — YAML-driven execution via [TestPioneer](https://github.com/Intergration-Automation-Testing/TestPioneer)
103
+
104
+ Each module gets the same menu shape: **Run** (single script, batch directory, with or without an emailed report), **Help** (docs and GitHub open as in-IDE browser tabs), **Project** (scaffold a template directory), and where available a native GUI tab.
105
+
106
+ ### IDE core
107
+
108
+ - **Automation-aware syntax highlighting** — the `AT_*` / GUI / Web / Load keyword sets are registered for `.json`, and TestPioneer's schema for `.yml`, on top of JEditor's language support
109
+ - **Code editor** — built on [JEditor](https://github.com/Intergration-Automation-Testing/JEditor): tabs, project tree, format checker, debugger, terminal, variable inspector and a git client pane
110
+ - **Script execution** — single or batch; large action files are passed by path, never through the command line, so Windows' ~32 KB argv limit is never a factor
111
+ - **Report generation** — HTML / JSON / XML after a run, with optional email delivery
112
+ - **Integrated JupyterLab** — launches as a tab, installing JupyterLab into the project venv if it is missing
113
+ - **Virtual environment awareness** — `venv/` and `.venv/` are detected and used automatically
114
+
115
+ ---
116
+
117
+ ## Built-in Tools
118
+
119
+ ### cURL Import — a copied request becomes a runnable script
120
+
121
+ Paste a `curl` command from your browser's dev tools and pick a target. The parser handles method, URL, headers, bodies, basic auth, `-G` query parameters, `-F` multipart fields (uploads become `files=open(...)`), the `--json` shortcut, `-d @file` bodies and multi-line continuations. Repeated `-H` values are combined the way HTTP combines them (`; ` for cookies, `, ` otherwise) instead of the last one silently winning. Nothing is ever executed — it is pure parsing.
122
+
123
+ | Target: pytest | Target: APITestka JSON action |
124
+ |---|---|
125
+ | ![cURL import to pytest](images/tool_curl_import.png) | ![cURL import to APITestka action](images/tool_curl_import_action.png) |
126
+
127
+ Targets: Python `requests`, a ready-to-run **pytest** test, **APITestka** (Python or a `[["AT_test_api_method", {...}]]` action list that `execute_files` runs directly), and a **LoadDensity** Locust load test. Copy the output, open it straight into an editor tab, or save it with the right extension. One click also hands the parsed URL to the URL parser/builder or the headers to the header analyzer.
128
+
129
+ ### HAR Import — a whole session becomes a test suite
130
+
131
+ "Copy as cURL" captures one request; **Save all as HAR** captures the session. Open the export and every recorded call is listed with method, path, status and media type, with page furniture (CSS, images, fonts) filtered out by default.
132
+
133
+ ![HAR import](images/tool_har_import.png)
134
+
135
+ Select what you want — or take everything listed — and generate one script using the same targets as the cURL importer. Repeated endpoints get numbered test names so no test silently replaces another; HTTP/2 pseudo-headers are dropped, and a `Cookie` header duplicating the recorded cookie list is removed so each value is sent once. A single selected request produces exactly what the cURL importer would. HAR is JSON, so this needs nothing beyond the standard library, and nothing is ever replayed for you.
136
+
137
+ ### Response Inspector — paste a response, read everything in it
138
+
139
+ ![Response Inspector](images/tool_response_inspector.png)
140
+
141
+ The status code is looked up in the HTTP reference, headers are parsed, a JSON body is pretty-printed, and any JWT anywhere in the text (an `Authorization: Bearer` header, for instance) is decoded with its timestamp claims rendered in UTC. Each finding opens in its dedicated tool tab, pre-filled.
142
+
143
+ ### HTTP Header Analyzer — what a header block is actually saying
144
+
145
+ ![Header Analyzer](images/tool_header_analyzer.png)
146
+
147
+ Reports names sent more than once, `Set-Cookie` entries missing `Secure` / `HttpOnly` / `SameSite`, wildcard CORS (and the wildcard-plus-credentials combination browsers reject outright), an HSTS `max-age` too short to survive a restart, CSP `unsafe-inline` / `unsafe-eval`, product banners, deprecated headers, and — for responses — the security headers that are absent. Headers carrying credentials are reported **by name only**; their values never enter the report.
148
+
149
+ ### Text Diff
150
+
151
+ ![Text Diff](images/tool_diff.png)
152
+
153
+ Compare two payloads — an expected vs. actual API response, say — and get a unified diff plus a one-line added/removed summary.
154
+
155
+ ### The everyday utilities
156
+
157
+ Each is a tab or a dock, each has the same copy / open-in-editor / save-to-file row along the bottom.
158
+
159
+ ![JWT decoder, regex tester, HTTP status reference, JSON format](images/tools_montage_a.png)
160
+
161
+ - **JWT Decoder** — header and payload as pretty JSON, with `exp` / `iat` / `nbf` / `auth_time` as readable UTC. Inspection only: the signature is never verified and the token is never trusted.
162
+ - **Regex Tester** — `IGNORECASE` / `MULTILINE` / `DOTALL` / `VERBOSE`, every match with offsets, numbered groups and named groups. An invalid pattern reports a friendly error instead of crashing.
163
+ - **HTTP Status Reference** — search the full status table (sourced from the standard library, so it stays current) by code prefix or keyword.
164
+ - **JSON Format** — pretty-print or minify, with a clear validation error when the input is not JSON.
165
+
166
+ ![Timestamp converter, hash generator, query/JSON, URL builder](images/tools_montage_b.png)
167
+
168
+ - **Timestamp Converter** — a Unix epoch (seconds or milliseconds, auto-detected) or an ISO-8601 date-time in, every representation out in UTC. Deterministic and independent of the local time zone.
169
+ - **Hash Generator** — SHA-256, SHA-512, SHA-1 and MD5 at once (MD5/SHA-1 for interoperability with `usedforsecurity=False`, never for security decisions).
170
+ - **Query ⇄ JSON** — `application/x-www-form-urlencoded` to pretty JSON and back; repeated keys become arrays and vice versa.
171
+ - **URL Parser / Builder** — scheme, host, port, path, query, fragment and credentials as an editable JSON object, and back again. Brackets IPv6 literals and re-encodes query parameters for you.
172
+
173
+ ### Diagram Editor — architecture diagrams without leaving the IDE
174
+
175
+ ![Diagram editor with an imported Mermaid flowchart](images/diagram_editor.png)
176
+
177
+ *A Mermaid `flowchart` pasted into the importer and laid out automatically.*
178
+
179
+ A WYSIWYG `QGraphicsScene` editor: rectangle, rounded, ellipse and diamond nodes, bezier connections with edge labels, free text and images. Mermaid `flowchart` / `graph` import runs a Sugiyama-style layout (layering, crossing reduction, cross-axis alignment). Save and open as `.diagram.json`, export to PNG or SVG, with undo/redo, align, distribute, grid, snap and zoom. Images fetched from a URL are SSRF-validated and size-capped.
180
+
181
+ ### SSH Client — terminal and remote file tree side by side
182
+
183
+ ![SSH client](images/ssh_client.png)
184
+
185
+ Password or private-key authentication, an interactive shell with ANSI handling and keepalive, and a lazy-loading SFTP tree with create-folder / rename / delete / upload / download. Unknown host keys are **not** auto-accepted: the SHA256 fingerprint is shown for confirmation on first connection (trust on first use) and persisted to `~/.pybreeze/ssh_known_hosts`.
186
+
187
+ ### And also
188
+
189
+ - **File Tree Context Menu** — right-click to create, rename, delete, copy absolute or relative paths, or reveal the item in your platform file manager. Renaming or deleting a file open in an editor tab keeps the tab in sync.
190
+ - **Package Manager** — install automation modules and build tools from the menu, output in the shell pane.
191
+ - **Integrated Documentation** — each module's docs and GitHub page open as in-IDE browser tabs.
192
+
193
+ ---
194
+
195
+ ## AI-Assisted Development
196
+
197
+ ### AI Code Review
198
+
199
+ ![AI code review client](images/ai_code_review.png)
200
+
201
+ *Shown in the pre-send state.* Send a selection to an LLM endpoint, then accept or reject the suggestion — the tally is kept in `~/.pybreeze/response_stats.txt`. The URL is SSRF-validated, redirects are not followed, and the response body is size-capped before it reaches the panel.
202
+
203
+ ### Chain-of-Thought Code Review (prthinker)
204
+
205
+ Run the [prthinker](https://github.com/JE-Chen/Code-Review-Framework-Combining-Large-Language-Models-and-Chain-of-Thought-Reasoning) pipeline over the file being edited or over a Pull Request, with output streaming into a run window.
206
+
207
+ ![prthinker settings](images/prthinker_setting.png)
208
+
209
+ One settings form holds the inference backend (`remote`, `local`, OpenAI-compatible, Anthropic, Gemini, Cohere, Mistral, `claude-cli`, `codex-cli`), the code host (GitHub / GitLab / Gitea) and the repository. **Keys and tokens are handed to the review as environment variables, never on a command line** where a process list would show them — and they are masked in logs.
210
+
211
+ ### CoT Prompt Editor
212
+
213
+ ![CoT prompt editor](images/cot_prompt_editor.png)
214
+
215
+ Create and manage the multi-step review chain: first summary → first code review → linter → code smell detector → total summary. Each step's result feeds the final summary. Files are watched, so an external edit shows up immediately.
216
+
217
+ ### Skill Prompt Editor & Skill Send
218
+
219
+ | Skill prompt editor | Skill send |
220
+ |---|---|
221
+ | ![Skill prompt editor](images/skill_prompt_editor.png) | ![Skill send](images/skills_send.png) |
222
+
223
+ Define reusable skill prompts (code explanation, code review), then pick one, edit it if needed, and send it to an LLM endpoint from a dedicated tab or dock. *Both shown in the pre-send state — no endpoint was contacted for these screenshots.*
224
+
225
+ ---
226
+
227
+ ## Plugin System
228
+
229
+ PyBreeze inherits JEditor's plugin architecture, auto-discovered from a `jeditor_plugins/` directory in the working directory. A plugin can register:
230
+
231
+ - **Syntax highlighting** — keyword sets and rules for any language
232
+ - **UI translations** — new interface languages
233
+ - **Run configurations** — "Run with…" for interpreted (`go run main.go`) and compiled (`gcc main.c -o main` then run) languages, executed through PyBreeze's `FileRunnerProcess` with the compiled artifact cleaned up afterwards
234
+ - **Plugin Browser** — browse and install plugins from remote repositories inside the IDE
235
+
236
+ Loaded plugins appear under their own **Plugins** menu with an About entry and one run action per supported suffix. See [PLUGIN_GUIDE.md](PLUGIN_GUIDE.md) for the full API and worked examples (C, C++, Go, Java, Rust, and a French translation).
237
+
238
+ ---
239
+
240
+ ## Multi-Language UI
241
+
242
+ - **English** (default)
243
+ - **Traditional Chinese** (繁體中文)
244
+
245
+ Both dictionaries carry the same 571 keys, and a test enforces that parity so a new string can never land in one language only. Further languages can be added via translation plugins.
246
+
247
+ ---
248
+
249
+ ## Architecture
250
+
251
+ ```mermaid
252
+ flowchart TB
253
+ UI["PyBreeze UI · PySide6"]
254
+
255
+ subgraph Editor["JEditor (Base Editor)"]
256
+ direction LR
257
+ E1["Code Editor + Tabs"]
258
+ E2["File Tree"]
259
+ E3["Syntax Highlighting"]
260
+ E4["Plugin System"]
261
+ end
262
+
263
+ subgraph Automation["Automation Menu"]
264
+ direction LR
265
+ A1["APITestka"]
266
+ A2["AutoControl"]
267
+ A3["WebRunner"]
268
+ A4["LoadDensity"]
269
+ A5["FileAutomation"]
270
+ A6["MailThunder"]
271
+ A7["TestPioneer"]
272
+ end
273
+
274
+ subgraph Executors["Subprocess Executors · TaskProcessManager"]
275
+ direction LR
276
+ X1["je_api_testka"]
277
+ X2["je_auto_control"]
278
+ X3["je_web_runner"]
279
+ X4["je_load_density"]
280
+ X5["automation-file"]
281
+ X6["je-mail-thunder"]
282
+ X7["test_pioneer"]
283
+ end
284
+
285
+ subgraph Tools["Tools"]
286
+ direction LR
287
+ T1["SSH · paramiko"]
288
+ T2["AI Code Review"]
289
+ T3["Prompt Editors"]
290
+ T4["Diagram Editor"]
291
+ T5["HTTP Toolbelt"]
292
+ T6["JupyterLab"]
293
+ end
294
+
295
+ subgraph Install["Install Menu"]
296
+ direction LR
297
+ I1["Module Installers"]
298
+ I2["Build Tools"]
299
+ end
300
+
301
+ UI --> Editor
302
+ UI --> Automation
303
+ UI --> Tools
304
+ UI --> Install
305
+
306
+ A1 --> X1
307
+ A2 --> X2
308
+ A3 --> X3
309
+ A4 --> X4
310
+ A5 --> X5
311
+ A6 --> X6
312
+ A7 --> X7
313
+ ```
314
+
315
+ **The editor process never runs your script.** Every automation module is launched as `python -m <package>` in the project's interpreter with `shell=False`. Two daemon threads read stdout and stderr into thread-safe queues; a 100 ms `QTimer` drains them onto the UI thread in bounded batches. A crash, a hang or an infinite print loop in a script cannot take the IDE with it.
316
+
317
+ For a module-by-module walkthrough of the codebase, see [architecture_explore.md](architecture_explore.md).
318
+
319
+ ---
320
+
321
+ ## Installation
322
+
323
+ ### From PyPI
324
+
325
+ ```bash
326
+ pip install pybreeze
327
+ ```
328
+
329
+ ### From source
330
+
331
+ ```bash
332
+ git clone https://github.com/Intergration-Automation-Testing/AutomationEditor.git
333
+ cd AutomationEditor
334
+ pip install -r requirements.txt
335
+ ```
336
+
337
+ ### System requirements
338
+
339
+ - **Python**: 3.10 – 3.14
340
+ - **OS**: Windows, macOS, Linux
341
+ - **GUI**: PySide6 6.11.0 (installed automatically)
342
+
343
+ ---
344
+
345
+ ## Quick Start
346
+
347
+ ```bash
348
+ python -m pybreeze # command line
349
+ python exe/start_pybreeze.py # from the exe directory
350
+ ```
351
+
352
+ ```python
353
+ from pybreeze import start_editor
354
+
355
+ start_editor() # default dark_amber theme
356
+ start_editor(theme="dark_teal.xml") # any qt_material theme
357
+ ```
358
+
359
+ Once launched:
360
+
361
+ 1. **Write** an automation script in the editor — automation keywords highlight as you type
362
+ 2. **Run** it from the `Automation` menu, picking the target module
363
+ 3. **Watch** the output stream into the run window
364
+ 4. **Generate** an HTML / JSON / XML report
365
+ 5. **Send** it by email through the MailThunder integration
366
+
367
+ ---
368
+
369
+ ## Integrated Automation Modules
370
+
371
+ | Module | Capabilities |
372
+ |---|---|
373
+ | **APITestka** | HTTP methods, async via httpx, Flask mock servers, HTML/JSON/XML reports, scheduler triggers, socket server, JSON-schema and JSONPath assertions, SLA checks, record-replay cassettes |
374
+ | **AutoControl** | Mouse (click, drag, scroll, position), keyboard (type, hotkey, press/release), image recognition and locate-and-click, screenshots, record and playback, shell and process control |
375
+ | **WebRunner** | Browser driver integration, element location and interaction, web test scripting, reports |
376
+ | **LoadDensity** | Concurrent request simulation, performance metrics, stress scenario management, reports |
377
+ | **MailThunder** | SMTP sending, HTML report delivery, attachments, environment-variable configuration |
378
+ | **TestPioneer** | YAML test definitions, template generation, structured execution |
379
+ | **File Automation** | Automated file and directory operations, batch processing |
380
+ | **prthinker** | Chain-of-thought code review of a file or a Pull Request; settings in `~/.pybreeze/prthinker_setting.json`; installed from its own source folder via `Install ▸ Automation ▸ Install prthinker` (needs Python 3.12+) |
381
+
382
+ ---
383
+
384
+ ## Project Structure
385
+
386
+ ```
387
+ PyBreeze/
388
+ ├── pybreeze/
389
+ │ ├── __init__.py # Public API (start_editor, plugin re-exports)
390
+ │ ├── __main__.py # Entry point (python -m pybreeze)
391
+ │ ├── extend/
392
+ │ │ ├── process_executor/ # Subprocess isolation layer
393
+ │ │ │ ├── python_task_process_manager.py # TaskProcessManager (core)
394
+ │ │ │ ├── process_executor_utils.py # build_process / start_process
395
+ │ │ │ ├── file_runner_process.py # Plugin run configs (any language)
396
+ │ │ │ ├── queue_pump.py # Shared QTimer drain
397
+ │ │ │ ├── api_testka/ auto_control/ web_runner/
398
+ │ │ │ ├── load_density/ file_automation/ mail_thunder/
399
+ │ │ │ ├── test_pioneer/ prthinker/
400
+ │ │ ├── mail_thunder_extend/ # Post-test email report hook
401
+ │ │ └── prthinker_extend/ # prthinker settings & argument assembly
402
+ │ ├── extend_multi_language/ # Built-in i18n (English, Traditional Chinese)
403
+ │ ├── pybreeze_ui/
404
+ │ │ ├── editor_main/ # Main window + file tree context menu
405
+ │ │ ├── menu/ # Automation / install / tools / plugin menus
406
+ │ │ ├── tools_gui/ # cURL, HAR, JWT, diff, regex, … tool tabs
407
+ │ │ ├── diagram_editor/ # WYSIWYG diagram editor
408
+ │ │ ├── extend_ai_gui/ # CoT review, prompt editors, skill send
409
+ │ │ ├── connect_gui/ # SSH terminal + SFTP tree, AI review client
410
+ │ │ ├── jupyter_lab_gui/ # JupyterLab tab
411
+ │ │ ├── show_code_window/ # CodeWindow (run output)
412
+ │ │ ├── dialog/ # prthinker settings dialog
413
+ │ │ └── syntax/ # Automation keyword definitions
414
+ │ └── utils/ # curl/HAR parsing, headers, JWT, hashing,
415
+ │ # URL validation, logging, exceptions, …
416
+ ├── exe/ # Standalone launcher & build configs
417
+ ├── docs/ # Sphinx documentation source
418
+ ├── test/ # Unit tests (test_utils) + startup tests
419
+ ├── images/ # Screenshots
420
+ ├── architecture_explore.md # Module-by-module architecture notes
421
+ ├── PLUGIN_GUIDE.md # Plugin development documentation
422
+ ├── pyproject.toml # Package configuration (stable)
423
+ ├── dev.toml # Package configuration (dev channel)
424
+ └── requirements.txt # Runtime dependencies
425
+ ```
426
+
427
+ ---
428
+
429
+ ## Dependencies
430
+
431
+ ### Runtime
432
+
433
+ | Package | Purpose |
434
+ |---|---|
435
+ | `PySide6` (6.11.0) | GUI framework (Qt for Python) |
436
+ | `je-editor` | Base code editor engine |
437
+ | `je_api_testka` | API testing automation |
438
+ | `je_auto_control` | GUI/desktop automation |
439
+ | `je_web_runner` | Web browser automation |
440
+ | `je_load_density` | Load and stress testing |
441
+ | `je-mail-thunder` | Email automation |
442
+ | `automation-file` | File operation automation |
443
+ | `test_pioneer` | YAML-based test framework |
444
+ | `paramiko` | SSH client support |
445
+ | `jupyterlab` | Integrated notebook environment |
446
+
447
+ ### Development
448
+
449
+ `build`, `twine`, `sphinx`, `sphinx-rtd-theme`, `auto-py-to-exe`, `pytest`, `hypothesis`
450
+
451
+ ---
452
+
453
+ ## Testing & CI
454
+
455
+ ```bash
456
+ python -m pip install -r dev_requirements.txt
457
+ python -m pytest test/test_utils/ -v --tb=short
458
+ ```
459
+
460
+ - **Unit tests** — `test/test_utils/`, 60 modules covering the pure-logic layer (curl and HAR parsing, header analysis, SSRF validation, JWT, hashing, timestamps, diffing) plus headless Qt widget tests via `QT_QPA_PLATFORM=offscreen`, with Hypothesis property tests over the parsers
461
+ - **Startup tests** — `test/unit_test/start_automation/` launches the IDE in debug mode and verifies it comes up and exits cleanly
462
+ - **CI** — GitHub Actions on Windows across Python 3.10 – 3.14, on every push and PR plus a nightly run
463
+ - **Static analysis** — SonarCloud, Codacy and Bandit
464
+
465
+ ---
466
+
467
+ ## Target Audience
468
+
469
+ - **Python developers** — a lightweight, dedicated environment for automation scripts without the overhead of a general-purpose IDE
470
+ - **SDETs** — one tool for Web, API and performance tests maintained side by side
471
+ - **Automation beginners** — zero-config environment setup and a menu for every module
472
+ - **DevOps teams** — a place to build and debug integration suites destined for CI/CD
473
+
474
+ ---
475
+
476
+ ## License
477
+
478
+ MIT — see [LICENSE](LICENSE). Copyright (c) 2022 JE-Chen
479
+
480
+ ---
481
+
482
+ <sub>Screenshots are rendered from the actual PyBreeze widgets on Windows 11 with the default `dark_amber` theme; the sample data in each tool is real input processed by the real code path.</sub>