PyBreeze-dev 1.0.19__tar.gz → 1.0.21__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/PKG-INFO +14 -11
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/README.md +12 -8
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/editor_main/main_ui.py +52 -13
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/navigation/navigation_dock.py +40 -12
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze_dev.egg-info/PKG-INFO +14 -11
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pyproject.toml +2 -3
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/LICENSE +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/__main__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/language_server/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/language_server/__main__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/language_server/launch.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/language_server/server_main.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/mail_thunder_extend/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/mail_thunder_extend/mail_thunder_setting.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/process_executor/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/process_executor/file_runner_process.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/process_executor/process_executor_utils.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/process_executor/prthinker/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/process_executor/prthinker/prthinker_process.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/process_executor/python_task_process_manager.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/process_executor/queue_pump.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/process_executor/run_notice.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/process_executor/test_pioneer/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/process_executor/test_pioneer/test_pioneer_process_manager.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/prthinker_extend/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/prthinker_extend/prthinker_setting.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend_multi_language/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend_multi_language/english_integrations.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend_multi_language/extend_english.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend_multi_language/extend_traditional_chinese.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend_multi_language/supported_languages.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend_multi_language/traditional_chinese_error_text.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend_multi_language/traditional_chinese_integrations.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend_multi_language/update_language_dict.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/busy_cursor.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/closing.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/code_result_logs.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/connect_gui/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/connect_gui/ssh/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/connect_gui/ssh/sftp_session.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_command_widget.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_connect_thread.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_file_viewer_widget.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_host_key_policy.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_key_loader.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_login_widget.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_main_widget.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/connect_gui/url/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/connect_gui/url/ai_code_review_gui.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/design/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/design/flow_layout.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/design/panels.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/design/tokens.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/diagram_editor/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/diagram_editor/diagram_commands.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/diagram_editor/diagram_editor_widget.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/diagram_editor/diagram_items.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/diagram_editor/diagram_mermaid_parser.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/diagram_editor/diagram_net_utils.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/diagram_editor/diagram_property_panel.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/diagram_editor/diagram_scene.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/diagram_editor/diagram_view.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/dialog/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/dialog/prthinker_setting_dialog.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/editor_main/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/editor_main/file_tree_context_menu.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/editor_main/pybreeze_icon.ico +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/error_text.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/exact_text.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/ai_gui_global_variable.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/code_review/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/code_review/code_review_thread.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/code_review/cot_chain.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/code_review/cot_code_review_gui.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/code_smell_detector.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/first_code_review.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/first_summary_prompt.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/global_rule.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/judge.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/judge_single_review.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/linter.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/step_by_step_analysis.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/total_summary.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_prompt_editor_widget.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/prompt_editor_widget.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/prompt_file_io.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_editor_widget.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_templates/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_templates/code_explainer.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_templates/code_review.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_store.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/skills/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/extend_ai_gui/skills/skills_send_gui.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/fixed_pitch.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/gui_thread_gc.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/jupyter_lab_gui/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/jupyter_lab_gui/jupyter_lab_thread.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/jupyter_lab_gui/jupyter_lab_widget.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/jupyter_lab_gui/lab_page.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/mcp_gui/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/mcp_gui/mcp_client_gui.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/mcp_gui/mcp_panels.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/mcp_gui/mcp_profile_dialog.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/mcp_gui/mcp_server_panel.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/mcp_gui/mcp_worker.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/api_testka_menu/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/api_testka_menu/build_api_testka_menu.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/auto_control_menu/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/auto_control_menu/build_autocontrol_menu.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/automation_file_menu/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/automation_file_menu/build_automation_file_menu.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/automation_menu_factory.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/load_density_menu/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/load_density_menu/build_load_density_menu.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/mail_thunder_menu/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/mail_thunder_menu/build_mail_thunder_menu.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/prthinker_menu/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/prthinker_menu/build_prthinker_menu.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/test_pioneer_menu/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/test_pioneer_menu/build_test_pioneer_menu.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/web_runner_menu/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/automation_menu/web_runner_menu/build_webrunner_menu.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/build_menubar.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/extend_jeditor_tab_menu/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/extend_jeditor_tab_menu/jupyter_lab_tab.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/install_menu/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/install_menu/automation_menu/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/install_menu/automation_menu/build_automation_install_menu.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/install_menu/install_utils.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/install_menu/tools_menu/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/install_menu/tools_menu/build_tool_install_menu.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/menu_utils.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/plugin_menu/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/plugin_menu/build_plugin_menu.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/plugin_menu/build_run_with_menu.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/tools/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/menu/tools/tools_menu.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/navigation/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/navigation/navigation_model.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/plain_text.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/report_gui/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/report_gui/report_viewer_gui.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/run_shortcut.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/show_code_window/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/show_code_window/code_window.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/syntax/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/syntax/syntax_extend.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/syntax/syntax_keyword.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/terminal_view.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/thread_keeper.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/curl_import_gui.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/diff_gui.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/har_import_gui.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/hash_gui.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/header_analyzer_gui.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/http_status_gui.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/import_gaps.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/json_editor_gui.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/json_format_gui.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/json_tree_panel.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/jwt_decoder_gui.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/keyword_reference_gui.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/output_actions.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/query_json_gui.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/regex_gui.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/response_inspector_gui.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/timestamp_gui.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/tool_tabs.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/tools_gui/url_builder_gui.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/app_dirs.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/curl_import/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/curl_import/curl_parser.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/curl_import/request_body.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/curl_import/request_codegen.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/curl_import/script_templates.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/diff_tools/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/diff_tools/text_diff.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/exception/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/exception/error_templates.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/exception/exception_tags.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/exception/exceptions.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/execution_report/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/execution_report/html_report.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/execution_report/junit_xml.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/execution_report/record_reports.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/execution_report/report_files.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/execution_report/report_filter.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/execution_report/report_schema.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/execution_report/safe_xml.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/file_process/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/file_process/get_dir_file_list.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/file_process/read_capped.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/file_process/replace_file.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/har_import/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/har_import/har_codegen.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/har_import/har_parser.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/hash_tools/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/hash_tools/hash_text.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/header_tools/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/header_tools/header_analyzer.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/header_tools/header_merge.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/header_tools/header_rules.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/header_tools/header_sarif.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/http_reference/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/http_reference/status_codes.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/import_targets/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/import_targets/builtin_targets.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/import_targets/normalized_request.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/import_targets/target_registry.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/import_targets/webrunner_target.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/json_format/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/json_format/json_document.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/json_format/json_process.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/json_format/json_tree_edit.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/json_format/view_safe.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/jwt_tools/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/jwt_tools/jwt_decoder.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/language_service/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/language_service/action_adapter.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/language_service/framework_profiles.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/language_service/json_scan.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/language_service/keyword_metadata.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/language_service/lsp_server.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/language_service/metadata_probe.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/language_service/service_adapter.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/logging/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/logging/logger.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/manager/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/manager/package_manager/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/manager/package_manager/package_manager_class.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/mcp/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/mcp/mcp_call_log.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/mcp/mcp_client.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/mcp/mcp_profile.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/mcp/mcp_redaction.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/mcp/mcp_transport.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/network/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/network/http_client.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/network/public_http.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/network/url_validation.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/query_tools/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/query_tools/query_convert.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/regex_tools/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/regex_tools/regex_tester.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/response_inspector/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/response_inspector/response_analyzer.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/subprocess_util.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/terminal_style.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/terminal_text.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/timestamp_tools/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/timestamp_tools/timestamp_converter.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/ui_state.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/url_tools/__init__.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/utils/url_tools/url_convert.py +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze_dev.egg-info/SOURCES.txt +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze_dev.egg-info/dependency_links.txt +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze_dev.egg-info/requires.txt +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze_dev.egg-info/top_level.txt +0 -0
- {pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/setup.cfg +0 -0
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pybreeze_dev
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.21
|
|
4
4
|
Summary: IDE for multi automation
|
|
5
5
|
Author-email: JE-Chen <jechenmailman@gmail.com>
|
|
6
6
|
Project-URL: Homepage, https://github.com/Integration-Automation/PyBreeze
|
|
7
7
|
Project-URL: Code, https://github.com/Integration-Automation/PyBreeze
|
|
8
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
9
8
|
Classifier: Programming Language :: Python :: 3.11
|
|
10
9
|
Classifier: Programming Language :: Python :: 3.12
|
|
11
10
|
Classifier: Programming Language :: Python :: 3.13
|
|
@@ -15,7 +14,7 @@ Classifier: Environment :: Win32 (MS Windows)
|
|
|
15
14
|
Classifier: Environment :: MacOS X
|
|
16
15
|
Classifier: Environment :: X11 Applications
|
|
17
16
|
Classifier: Operating System :: OS Independent
|
|
18
|
-
Requires-Python: >=3.
|
|
17
|
+
Requires-Python: >=3.11
|
|
19
18
|
Description-Content-Type: text/markdown
|
|
20
19
|
License-File: LICENSE
|
|
21
20
|
Requires-Dist: je-editor>=1.0.27
|
|
@@ -33,7 +32,7 @@ Dynamic: license-file
|
|
|
33
32
|
|
|
34
33
|
# PyBreeze: The Automation-First IDE
|
|
35
34
|
|
|
36
|
-
[](https://www.python.org/downloads/)
|
|
37
36
|
[](LICENSE)
|
|
38
37
|
[](https://doc.qt.io/qtforpython/)
|
|
39
38
|
[](https://pybreeze.readthedocs.io/en/latest/index.html)
|
|
@@ -44,7 +43,11 @@ Dynamic: license-file
|
|
|
44
43
|
|
|
45
44
|

|
|
46
45
|
|
|
47
|
-
*The main window: an APITestka action file open in the editor,
|
|
46
|
+
*The main window in the default theme: an APITestka action file open in the editor, the Navigation view in the side bar with the activity bar at its left, and the output, problems, terminal and debug panes below.*
|
|
47
|
+
|
|
48
|
+

|
|
49
|
+
|
|
50
|
+
*The same window in JEditor Light, with the Explorer in the side bar.*
|
|
48
51
|
|
|
49
52
|
---
|
|
50
53
|
|
|
@@ -108,7 +111,7 @@ Each module gets the same menu shape: **Run** (single script, batch directory, w
|
|
|
108
111
|
|
|
109
112
|
- **Automation keyword sets** — the `AT_*` / GUI / Web / Load keyword sets are registered for `.json`, and TestPioneer's schema for `.yml` and `.yaml`, on top of JEditor's language support. JEditor does not colour them yet: it highlights those files with its own rules for the suffix, which leave registered keywords out
|
|
110
113
|
- **Code editor** — built on [JEditor](https://github.com/Integration-Automation/JEDITOR): tabs, project tree, format checker, debugger, terminal and a git client pane
|
|
111
|
-
- **Navigation panel** — a
|
|
114
|
+
- **Navigation panel** — a view of the side bar, with its own icon in the activity bar, lists what the menus hold as one tree (Automation, Tools, Settings): type in its box to find a tool or a command by name, then press Enter or double-click to open it. It is the view shown on a first start; the activity bar or **View ▸ Navigation** switches to it, and the view left open is the one shown at the next start
|
|
112
115
|
- **Fits a small screen** — a tool tab never asks for more than 60 font heights of width: a row of buttons too long for the tab wraps onto the next line instead of pushing the window wider than the display
|
|
113
116
|
- **Script execution** — single or batch, each run in a window of its own with a Stop button (Run ▸ Stop All Program stops them all), which asks whether to stop the run when it is closed while the run goes on; action files are passed by path, and a script from the tab in front that is too long for a Windows command line (~32 KB) goes through a temporary file
|
|
114
117
|
- **Report generation** — HTML / JSON / XML after a run, with optional email delivery
|
|
@@ -413,7 +416,7 @@ pip install -r requirements.txt
|
|
|
413
416
|
|
|
414
417
|
### System requirements
|
|
415
418
|
|
|
416
|
-
- **Python**: 3.
|
|
419
|
+
- **Python**: 3.11 – 3.14
|
|
417
420
|
- **OS**: Windows, macOS, Linux
|
|
418
421
|
- **GUI**: PySide6 6.11.2 (installed automatically)
|
|
419
422
|
|
|
@@ -429,8 +432,8 @@ python exe/start_pybreeze.py # from the exe directory
|
|
|
429
432
|
```python
|
|
430
433
|
from pybreeze import start_editor
|
|
431
434
|
|
|
432
|
-
start_editor() # the theme picked from UI Style (
|
|
433
|
-
start_editor(theme="
|
|
435
|
+
start_editor() # the theme picked from UI Style (JEditor Dark until one is)
|
|
436
|
+
start_editor(theme="jeditor_light") # a JEditor theme, or any qt_material one such as "dark_teal.xml"; it becomes the picked one
|
|
434
437
|
```
|
|
435
438
|
|
|
436
439
|
Once launched:
|
|
@@ -548,7 +551,7 @@ python -m pytest test/test_utils/ -v --tb=short
|
|
|
548
551
|
|
|
549
552
|
- **Unit tests** — `test/test_utils/`, 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. The SSH terminal and the SFTP file tree also log in to an SSH server the tests start on the loopback address, which serves a temporary folder over SFTP
|
|
550
553
|
- **Startup tests** — `test/unit_test/start_automation/` launches the IDE in debug mode and verifies it comes up and exits cleanly
|
|
551
|
-
- **CI** — GitHub Actions: the whole suite on Windows across Python 3.
|
|
554
|
+
- **CI** — GitHub Actions: the whole suite on Windows across Python 3.11 – 3.14, and a short set of platform smoke tests on Linux and macOS, on every push and PR plus a nightly run; a push to `dev` that passes the suite also publishes `pybreeze_dev` when the package changed
|
|
552
555
|
- **Static analysis** — SonarCloud, Codacy and Bandit
|
|
553
556
|
|
|
554
557
|
---
|
|
@@ -572,4 +575,4 @@ MIT — see [LICENSE](LICENSE). Copyright (c) 2022 JE-Chen
|
|
|
572
575
|
|
|
573
576
|
---
|
|
574
577
|
|
|
575
|
-
<sub>Screenshots are rendered from the actual PyBreeze widgets on Windows 11
|
|
578
|
+
<sub>Screenshots are rendered from the actual PyBreeze widgets on Windows 11: the main window and the menus in the default JEditor Dark theme, the tool tabs in `dark_amber`, the default when those were taken; the sample data in each tool is real input processed by the real code path.</sub>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# PyBreeze: The Automation-First IDE
|
|
2
2
|
|
|
3
|
-
[](https://www.python.org/downloads/)
|
|
4
4
|
[](LICENSE)
|
|
5
5
|
[](https://doc.qt.io/qtforpython/)
|
|
6
6
|
[](https://pybreeze.readthedocs.io/en/latest/index.html)
|
|
@@ -11,7 +11,11 @@
|
|
|
11
11
|
|
|
12
12
|

|
|
13
13
|
|
|
14
|
-
*The main window: an APITestka action file open in the editor,
|
|
14
|
+
*The main window in the default theme: an APITestka action file open in the editor, the Navigation view in the side bar with the activity bar at its left, and the output, problems, terminal and debug panes below.*
|
|
15
|
+
|
|
16
|
+

|
|
17
|
+
|
|
18
|
+
*The same window in JEditor Light, with the Explorer in the side bar.*
|
|
15
19
|
|
|
16
20
|
---
|
|
17
21
|
|
|
@@ -75,7 +79,7 @@ Each module gets the same menu shape: **Run** (single script, batch directory, w
|
|
|
75
79
|
|
|
76
80
|
- **Automation keyword sets** — the `AT_*` / GUI / Web / Load keyword sets are registered for `.json`, and TestPioneer's schema for `.yml` and `.yaml`, on top of JEditor's language support. JEditor does not colour them yet: it highlights those files with its own rules for the suffix, which leave registered keywords out
|
|
77
81
|
- **Code editor** — built on [JEditor](https://github.com/Integration-Automation/JEDITOR): tabs, project tree, format checker, debugger, terminal and a git client pane
|
|
78
|
-
- **Navigation panel** — a
|
|
82
|
+
- **Navigation panel** — a view of the side bar, with its own icon in the activity bar, lists what the menus hold as one tree (Automation, Tools, Settings): type in its box to find a tool or a command by name, then press Enter or double-click to open it. It is the view shown on a first start; the activity bar or **View ▸ Navigation** switches to it, and the view left open is the one shown at the next start
|
|
79
83
|
- **Fits a small screen** — a tool tab never asks for more than 60 font heights of width: a row of buttons too long for the tab wraps onto the next line instead of pushing the window wider than the display
|
|
80
84
|
- **Script execution** — single or batch, each run in a window of its own with a Stop button (Run ▸ Stop All Program stops them all), which asks whether to stop the run when it is closed while the run goes on; action files are passed by path, and a script from the tab in front that is too long for a Windows command line (~32 KB) goes through a temporary file
|
|
81
85
|
- **Report generation** — HTML / JSON / XML after a run, with optional email delivery
|
|
@@ -380,7 +384,7 @@ pip install -r requirements.txt
|
|
|
380
384
|
|
|
381
385
|
### System requirements
|
|
382
386
|
|
|
383
|
-
- **Python**: 3.
|
|
387
|
+
- **Python**: 3.11 – 3.14
|
|
384
388
|
- **OS**: Windows, macOS, Linux
|
|
385
389
|
- **GUI**: PySide6 6.11.2 (installed automatically)
|
|
386
390
|
|
|
@@ -396,8 +400,8 @@ python exe/start_pybreeze.py # from the exe directory
|
|
|
396
400
|
```python
|
|
397
401
|
from pybreeze import start_editor
|
|
398
402
|
|
|
399
|
-
start_editor() # the theme picked from UI Style (
|
|
400
|
-
start_editor(theme="
|
|
403
|
+
start_editor() # the theme picked from UI Style (JEditor Dark until one is)
|
|
404
|
+
start_editor(theme="jeditor_light") # a JEditor theme, or any qt_material one such as "dark_teal.xml"; it becomes the picked one
|
|
401
405
|
```
|
|
402
406
|
|
|
403
407
|
Once launched:
|
|
@@ -515,7 +519,7 @@ python -m pytest test/test_utils/ -v --tb=short
|
|
|
515
519
|
|
|
516
520
|
- **Unit tests** — `test/test_utils/`, 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. The SSH terminal and the SFTP file tree also log in to an SSH server the tests start on the loopback address, which serves a temporary folder over SFTP
|
|
517
521
|
- **Startup tests** — `test/unit_test/start_automation/` launches the IDE in debug mode and verifies it comes up and exits cleanly
|
|
518
|
-
- **CI** — GitHub Actions: the whole suite on Windows across Python 3.
|
|
522
|
+
- **CI** — GitHub Actions: the whole suite on Windows across Python 3.11 – 3.14, and a short set of platform smoke tests on Linux and macOS, on every push and PR plus a nightly run; a push to `dev` that passes the suite also publishes `pybreeze_dev` when the package changed
|
|
519
523
|
- **Static analysis** — SonarCloud, Codacy and Bandit
|
|
520
524
|
|
|
521
525
|
---
|
|
@@ -539,4 +543,4 @@ MIT — see [LICENSE](LICENSE). Copyright (c) 2022 JE-Chen
|
|
|
539
543
|
|
|
540
544
|
---
|
|
541
545
|
|
|
542
|
-
<sub>Screenshots are rendered from the actual PyBreeze widgets on Windows 11
|
|
546
|
+
<sub>Screenshots are rendered from the actual PyBreeze widgets on Windows 11: the main window and the menus in the default JEditor Dark theme, the tool tabs in `dark_amber`, the default when those were taken; the sample data in each tool is real input processed by the real code path.</sub>
|
|
@@ -30,7 +30,12 @@ from pybreeze.pybreeze_ui.closing import AskingDock, may_close
|
|
|
30
30
|
from pybreeze.pybreeze_ui.editor_main.file_tree_context_menu import setup_file_tree_context_menu
|
|
31
31
|
from pybreeze.pybreeze_ui.gui_thread_gc import collect_garbage_on_gui_thread
|
|
32
32
|
from pybreeze.pybreeze_ui.menu.build_menubar import add_menu_to_menubar
|
|
33
|
-
from pybreeze.pybreeze_ui.navigation.navigation_dock import
|
|
33
|
+
from pybreeze.pybreeze_ui.navigation.navigation_dock import (
|
|
34
|
+
NAVIGATION_VIEW,
|
|
35
|
+
VISIBLE_STATE,
|
|
36
|
+
NavigationDock,
|
|
37
|
+
NavigationPanel,
|
|
38
|
+
)
|
|
34
39
|
from pybreeze.pybreeze_ui.navigation.navigation_model import build_navigation
|
|
35
40
|
from pybreeze.pybreeze_ui.show_code_window.code_window import CodeWindow
|
|
36
41
|
from pybreeze.pybreeze_ui.syntax.syntax_extend import \
|
|
@@ -115,7 +120,7 @@ class PyBreezeMainWindow(EditorMain):
|
|
|
115
120
|
self.run_menu.stop_all_program_action.triggered.connect(self.stop_all_runs)
|
|
116
121
|
|
|
117
122
|
# Navigation: what the menus hold, as a tree that stays in view
|
|
118
|
-
self.
|
|
123
|
+
self._add_navigation()
|
|
119
124
|
|
|
120
125
|
# Action scripts are completed and checked from the installed frameworks' keywords
|
|
121
126
|
self._offer_language_server()
|
|
@@ -132,15 +137,43 @@ class PyBreezeMainWindow(EditorMain):
|
|
|
132
137
|
close_timer.timeout.connect(self.debug_close)
|
|
133
138
|
close_timer.start()
|
|
134
139
|
|
|
135
|
-
def
|
|
136
|
-
"""Add the navigation panel
|
|
140
|
+
def _add_navigation(self) -> None:
|
|
141
|
+
"""Add the navigation panel: a view of the side bar where the window has a shell.
|
|
137
142
|
|
|
138
|
-
Built after the menus: each of its lines is one of their actions.
|
|
139
|
-
|
|
143
|
+
Built after the menus: each of its lines is one of their actions.
|
|
144
|
+
JEditor's shell gives it an icon in the activity bar and an entry in
|
|
145
|
+
the View menu, and remembers with its own layout whether it is the
|
|
146
|
+
view shown. JEditor restored that layout while it was building the
|
|
147
|
+
window, before this view existed, so it is restored again here; on a
|
|
148
|
+
first start, with nothing saved, the panel is the view shown. A JEditor
|
|
149
|
+
from before its window had a shell gets the panel in a dock instead.
|
|
150
|
+
"""
|
|
151
|
+
navigation = build_navigation(self)
|
|
152
|
+
workbench = getattr(self, "workbench", None)
|
|
153
|
+
if workbench is None:
|
|
154
|
+
self._add_navigation_dock(navigation)
|
|
155
|
+
return
|
|
156
|
+
self.navigation_dock = None
|
|
157
|
+
self.navigation_panel = NavigationPanel(navigation)
|
|
158
|
+
workbench.add_view(
|
|
159
|
+
NAVIGATION_VIEW, "side", widget=self.navigation_panel,
|
|
160
|
+
title_key="navigation_dock_title", icon="navigation")
|
|
161
|
+
if workbench.has_saved_layout():
|
|
162
|
+
workbench.restore_layout()
|
|
163
|
+
else:
|
|
164
|
+
workbench.show_view(NAVIGATION_VIEW)
|
|
165
|
+
|
|
166
|
+
def _add_navigation_dock(self, navigation: dict) -> None:
|
|
167
|
+
"""Add the navigation panel in a dock at the left, shown unless the user closed it last time.
|
|
168
|
+
|
|
169
|
+
Its entry in the Dock menu shows and hides it. Whether it is shown is
|
|
140
170
|
remembered only when the user says so (that entry, or the panel's own
|
|
141
171
|
close button): the entry's checked state also changes as the IDE closes.
|
|
172
|
+
|
|
173
|
+
:param navigation: what each category holds (``build_navigation``)
|
|
142
174
|
"""
|
|
143
|
-
self.navigation_dock = NavigationDock(
|
|
175
|
+
self.navigation_dock = NavigationDock(navigation, self)
|
|
176
|
+
self.navigation_panel = self.navigation_dock.panel
|
|
144
177
|
self.addDockWidget(Qt.DockWidgetArea.LeftDockWidgetArea, self.navigation_dock)
|
|
145
178
|
self.navigation_dock.setVisible(read_ui_state().get(VISIBLE_STATE) is not False)
|
|
146
179
|
toggle = self.navigation_dock.toggleViewAction()
|
|
@@ -268,9 +301,10 @@ def start_editor(debug_mode: bool = False, theme: str | None = None, **kwargs) -
|
|
|
268
301
|
"""
|
|
269
302
|
Start editor instance
|
|
270
303
|
:param debug_mode: enable debug mode with auto-close timer
|
|
271
|
-
:param theme:
|
|
272
|
-
|
|
273
|
-
|
|
304
|
+
:param theme: a theme of JEditor's own ("jeditor_dark", "jeditor_light") or a qt_material
|
|
305
|
+
theme name (e.g. "dark_teal.xml", "light_blue.xml"). It replaces the theme picked from
|
|
306
|
+
UI Style, and is kept as the picked one. ``None`` starts with the picked theme, JEditor's
|
|
307
|
+
default until one is picked
|
|
274
308
|
:return: None
|
|
275
309
|
"""
|
|
276
310
|
new_ide = QCoreApplication.instance()
|
|
@@ -297,8 +331,8 @@ def open_main_window(app: QApplication, debug_mode: bool = False, theme: str | N
|
|
|
297
331
|
|
|
298
332
|
:param app: the running application, which the theme is applied to
|
|
299
333
|
:param debug_mode: close by itself after a while, as the startup tests need
|
|
300
|
-
:param theme: qt_material theme name, which replaces the one picked from UI
|
|
301
|
-
kept as the picked one; ``None`` keeps the picked one
|
|
334
|
+
:param theme: a JEditor or qt_material theme name, which replaces the one picked from UI
|
|
335
|
+
Style and is kept as the picked one; ``None`` keeps the picked one
|
|
302
336
|
:return: the window, which the caller keeps for as long as the IDE runs
|
|
303
337
|
"""
|
|
304
338
|
window = PyBreezeMainWindow(debug_mode=debug_mode, **kwargs)
|
|
@@ -322,4 +356,9 @@ def _apply_given_theme(app: QApplication, window: PyBreezeMainWindow, theme: str
|
|
|
322
356
|
# a bad one is logged, and the theme is still applied.
|
|
323
357
|
except (OSError, ValueError, TypeError, KeyError, RuntimeError) as error:
|
|
324
358
|
pybreeze_logger.error("Startup setting error: %r", error)
|
|
325
|
-
|
|
359
|
+
apply_style = getattr(window, "apply_style", None)
|
|
360
|
+
if callable(apply_style):
|
|
361
|
+
# JEditor applies its own themes and qt_material's alike, with the editor's colours
|
|
362
|
+
apply_style(theme)
|
|
363
|
+
else:
|
|
364
|
+
apply_stylesheet(app, theme=theme)
|
{pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/navigation/navigation_dock.py
RENAMED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
"""The navigation panel: PyBreeze's areas as a tree that stays in view and can be searched.
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
Typing in its box keeps the lines that hold the text, and Enter or a double
|
|
4
|
+
click on a line does what the menu entry it stands for does. What it lists is
|
|
5
|
+
decided by ``navigation_model``.
|
|
6
|
+
|
|
7
|
+
``NavigationPanel`` is the panel itself. Where JEditor's window has a shell it
|
|
8
|
+
is a view of the side bar, with an icon in the activity bar; ``NavigationDock``
|
|
9
|
+
holds one in a dock at the left of the main window, for a JEditor from before
|
|
10
|
+
its window had a shell.
|
|
6
11
|
"""
|
|
7
12
|
from __future__ import annotations
|
|
8
13
|
|
|
@@ -16,26 +21,27 @@ from pybreeze.pybreeze_ui.navigation.navigation_model import CATEGORIES, Navigat
|
|
|
16
21
|
from pybreeze.utils.logging.logger import pybreeze_logger
|
|
17
22
|
from pybreeze.utils.ui_state import remember
|
|
18
23
|
|
|
19
|
-
# The name the
|
|
24
|
+
# The name the dock's visibility is remembered under (utils/ui_state.py)
|
|
20
25
|
VISIBLE_STATE = "navigation_visible"
|
|
26
|
+
# The panel's ID as a view of JEditor's shell, which its saved layout names
|
|
27
|
+
NAVIGATION_VIEW = "pybreeze_navigation"
|
|
21
28
|
# The least width the panel asks for, in ems: room for a tool's name
|
|
22
29
|
_MIN_WIDTH_EMS = 14
|
|
23
30
|
# Where an item keeps the entry it stands for
|
|
24
31
|
_ENTRY_ROLE = Qt.ItemDataRole.UserRole
|
|
25
32
|
|
|
26
33
|
|
|
27
|
-
class
|
|
34
|
+
class NavigationPanel(QWidget):
|
|
28
35
|
"""The navigation tree with its search box.
|
|
29
36
|
|
|
30
37
|
:param navigation: what each category holds, by the category's key
|
|
31
38
|
(``navigation_model.build_navigation``)
|
|
32
|
-
:param parent: the
|
|
39
|
+
:param parent: the Qt parent
|
|
33
40
|
"""
|
|
34
41
|
|
|
35
42
|
def __init__(self, navigation: dict[str, list[NavigationEntry]], parent: QWidget | None = None) -> None:
|
|
36
43
|
word = language_wrapper.language_word_dict
|
|
37
|
-
super().__init__(
|
|
38
|
-
self.setObjectName("pybreeze_navigation")
|
|
44
|
+
super().__init__(parent)
|
|
39
45
|
|
|
40
46
|
self.filter_edit = QLineEdit()
|
|
41
47
|
self.filter_edit.setPlaceholderText(word.get("navigation_filter_placeholder"))
|
|
@@ -49,14 +55,12 @@ class NavigationDock(QDockWidget):
|
|
|
49
55
|
self.status = StatusLine()
|
|
50
56
|
self.status.hide()
|
|
51
57
|
|
|
52
|
-
|
|
53
|
-
layout = QVBoxLayout(body)
|
|
58
|
+
layout = QVBoxLayout(self)
|
|
54
59
|
apply_spacing(layout, around=Space.TIGHT)
|
|
55
60
|
layout.addWidget(self.filter_edit)
|
|
56
61
|
layout.addWidget(self.tree)
|
|
57
62
|
layout.addWidget(self.status)
|
|
58
|
-
|
|
59
|
-
self.setWidget(body)
|
|
63
|
+
self.setMinimumWidth(_MIN_WIDTH_EMS * em(self))
|
|
60
64
|
|
|
61
65
|
self._fill(navigation)
|
|
62
66
|
|
|
@@ -121,6 +125,30 @@ class NavigationDock(QDockWidget):
|
|
|
121
125
|
item.setExpanded(True)
|
|
122
126
|
return shown
|
|
123
127
|
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
class NavigationDock(QDockWidget):
|
|
131
|
+
"""The navigation panel in a dock at the left of the main window.
|
|
132
|
+
|
|
133
|
+
:param navigation: what each category holds, by the category's key
|
|
134
|
+
(``navigation_model.build_navigation``)
|
|
135
|
+
:param parent: the main window
|
|
136
|
+
"""
|
|
137
|
+
|
|
138
|
+
def __init__(self, navigation: dict[str, list[NavigationEntry]], parent: QWidget | None = None) -> None:
|
|
139
|
+
super().__init__(language_wrapper.language_word_dict.get("navigation_dock_title"), parent)
|
|
140
|
+
self.setObjectName("pybreeze_navigation")
|
|
141
|
+
self.panel = NavigationPanel(navigation)
|
|
142
|
+
# The panel's parts under the names the dock always had them
|
|
143
|
+
self.filter_edit = self.panel.filter_edit
|
|
144
|
+
self.tree = self.panel.tree
|
|
145
|
+
self.status = self.panel.status
|
|
146
|
+
self.setWidget(self.panel)
|
|
147
|
+
|
|
148
|
+
def apply_filter(self, text: str) -> None:
|
|
149
|
+
"""Keep the lines that hold *text* (``NavigationPanel.apply_filter``)."""
|
|
150
|
+
self.panel.apply_filter(text)
|
|
151
|
+
|
|
124
152
|
def closeEvent(self, event) -> None:
|
|
125
153
|
# Closed with its own button: stay closed next time. The Dock menu's
|
|
126
154
|
# entry remembers the same when it is used (main_ui.py).
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pybreeze_dev
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.21
|
|
4
4
|
Summary: IDE for multi automation
|
|
5
5
|
Author-email: JE-Chen <jechenmailman@gmail.com>
|
|
6
6
|
Project-URL: Homepage, https://github.com/Integration-Automation/PyBreeze
|
|
7
7
|
Project-URL: Code, https://github.com/Integration-Automation/PyBreeze
|
|
8
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
9
8
|
Classifier: Programming Language :: Python :: 3.11
|
|
10
9
|
Classifier: Programming Language :: Python :: 3.12
|
|
11
10
|
Classifier: Programming Language :: Python :: 3.13
|
|
@@ -15,7 +14,7 @@ Classifier: Environment :: Win32 (MS Windows)
|
|
|
15
14
|
Classifier: Environment :: MacOS X
|
|
16
15
|
Classifier: Environment :: X11 Applications
|
|
17
16
|
Classifier: Operating System :: OS Independent
|
|
18
|
-
Requires-Python: >=3.
|
|
17
|
+
Requires-Python: >=3.11
|
|
19
18
|
Description-Content-Type: text/markdown
|
|
20
19
|
License-File: LICENSE
|
|
21
20
|
Requires-Dist: je-editor>=1.0.27
|
|
@@ -33,7 +32,7 @@ Dynamic: license-file
|
|
|
33
32
|
|
|
34
33
|
# PyBreeze: The Automation-First IDE
|
|
35
34
|
|
|
36
|
-
[](https://www.python.org/downloads/)
|
|
37
36
|
[](LICENSE)
|
|
38
37
|
[](https://doc.qt.io/qtforpython/)
|
|
39
38
|
[](https://pybreeze.readthedocs.io/en/latest/index.html)
|
|
@@ -44,7 +43,11 @@ Dynamic: license-file
|
|
|
44
43
|
|
|
45
44
|

|
|
46
45
|
|
|
47
|
-
*The main window: an APITestka action file open in the editor,
|
|
46
|
+
*The main window in the default theme: an APITestka action file open in the editor, the Navigation view in the side bar with the activity bar at its left, and the output, problems, terminal and debug panes below.*
|
|
47
|
+
|
|
48
|
+

|
|
49
|
+
|
|
50
|
+
*The same window in JEditor Light, with the Explorer in the side bar.*
|
|
48
51
|
|
|
49
52
|
---
|
|
50
53
|
|
|
@@ -108,7 +111,7 @@ Each module gets the same menu shape: **Run** (single script, batch directory, w
|
|
|
108
111
|
|
|
109
112
|
- **Automation keyword sets** — the `AT_*` / GUI / Web / Load keyword sets are registered for `.json`, and TestPioneer's schema for `.yml` and `.yaml`, on top of JEditor's language support. JEditor does not colour them yet: it highlights those files with its own rules for the suffix, which leave registered keywords out
|
|
110
113
|
- **Code editor** — built on [JEditor](https://github.com/Integration-Automation/JEDITOR): tabs, project tree, format checker, debugger, terminal and a git client pane
|
|
111
|
-
- **Navigation panel** — a
|
|
114
|
+
- **Navigation panel** — a view of the side bar, with its own icon in the activity bar, lists what the menus hold as one tree (Automation, Tools, Settings): type in its box to find a tool or a command by name, then press Enter or double-click to open it. It is the view shown on a first start; the activity bar or **View ▸ Navigation** switches to it, and the view left open is the one shown at the next start
|
|
112
115
|
- **Fits a small screen** — a tool tab never asks for more than 60 font heights of width: a row of buttons too long for the tab wraps onto the next line instead of pushing the window wider than the display
|
|
113
116
|
- **Script execution** — single or batch, each run in a window of its own with a Stop button (Run ▸ Stop All Program stops them all), which asks whether to stop the run when it is closed while the run goes on; action files are passed by path, and a script from the tab in front that is too long for a Windows command line (~32 KB) goes through a temporary file
|
|
114
117
|
- **Report generation** — HTML / JSON / XML after a run, with optional email delivery
|
|
@@ -413,7 +416,7 @@ pip install -r requirements.txt
|
|
|
413
416
|
|
|
414
417
|
### System requirements
|
|
415
418
|
|
|
416
|
-
- **Python**: 3.
|
|
419
|
+
- **Python**: 3.11 – 3.14
|
|
417
420
|
- **OS**: Windows, macOS, Linux
|
|
418
421
|
- **GUI**: PySide6 6.11.2 (installed automatically)
|
|
419
422
|
|
|
@@ -429,8 +432,8 @@ python exe/start_pybreeze.py # from the exe directory
|
|
|
429
432
|
```python
|
|
430
433
|
from pybreeze import start_editor
|
|
431
434
|
|
|
432
|
-
start_editor() # the theme picked from UI Style (
|
|
433
|
-
start_editor(theme="
|
|
435
|
+
start_editor() # the theme picked from UI Style (JEditor Dark until one is)
|
|
436
|
+
start_editor(theme="jeditor_light") # a JEditor theme, or any qt_material one such as "dark_teal.xml"; it becomes the picked one
|
|
434
437
|
```
|
|
435
438
|
|
|
436
439
|
Once launched:
|
|
@@ -548,7 +551,7 @@ python -m pytest test/test_utils/ -v --tb=short
|
|
|
548
551
|
|
|
549
552
|
- **Unit tests** — `test/test_utils/`, 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. The SSH terminal and the SFTP file tree also log in to an SSH server the tests start on the loopback address, which serves a temporary folder over SFTP
|
|
550
553
|
- **Startup tests** — `test/unit_test/start_automation/` launches the IDE in debug mode and verifies it comes up and exits cleanly
|
|
551
|
-
- **CI** — GitHub Actions: the whole suite on Windows across Python 3.
|
|
554
|
+
- **CI** — GitHub Actions: the whole suite on Windows across Python 3.11 – 3.14, and a short set of platform smoke tests on Linux and macOS, on every push and PR plus a nightly run; a push to `dev` that passes the suite also publishes `pybreeze_dev` when the package changed
|
|
552
555
|
- **Static analysis** — SonarCloud, Codacy and Bandit
|
|
553
556
|
|
|
554
557
|
---
|
|
@@ -572,4 +575,4 @@ MIT — see [LICENSE](LICENSE). Copyright (c) 2022 JE-Chen
|
|
|
572
575
|
|
|
573
576
|
---
|
|
574
577
|
|
|
575
|
-
<sub>Screenshots are rendered from the actual PyBreeze widgets on Windows 11
|
|
578
|
+
<sub>Screenshots are rendered from the actual PyBreeze widgets on Windows 11: the main window and the menus in the default JEditor Dark theme, the tool tabs in `dark_amber`, the default when those were taken; the sample data in each tool is real input processed by the real code path.</sub>
|
|
@@ -7,12 +7,12 @@ build-backend = "setuptools.build_meta"
|
|
|
7
7
|
|
|
8
8
|
[project]
|
|
9
9
|
name = "pybreeze_dev"
|
|
10
|
-
version = "1.0.
|
|
10
|
+
version = "1.0.21"
|
|
11
11
|
authors = [
|
|
12
12
|
{ name = "JE-Chen", email = "jechenmailman@gmail.com" },
|
|
13
13
|
]
|
|
14
14
|
description = "IDE for multi automation"
|
|
15
|
-
requires-python = ">=3.
|
|
15
|
+
requires-python = ">=3.11"
|
|
16
16
|
license-files = ["LICENSE"]
|
|
17
17
|
dependencies = [
|
|
18
18
|
"je-editor>=1.0.27", "je_auto_control", "je_web_runner",
|
|
@@ -21,7 +21,6 @@ dependencies = [
|
|
|
21
21
|
"jupyterlab",
|
|
22
22
|
]
|
|
23
23
|
classifiers = [
|
|
24
|
-
"Programming Language :: Python :: 3.10",
|
|
25
24
|
"Programming Language :: Python :: 3.11",
|
|
26
25
|
"Programming Language :: Python :: 3.12",
|
|
27
26
|
"Programming Language :: Python :: 3.13",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/process_executor/file_runner_process.py
RENAMED
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/process_executor/prthinker/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend/prthinker_extend/prthinker_setting.py
RENAMED
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend_multi_language/english_integrations.py
RENAMED
|
File without changes
|
{pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend_multi_language/extend_english.py
RENAMED
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend_multi_language/supported_languages.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/extend_multi_language/update_language_dict.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/connect_gui/ssh/__init__.py
RENAMED
|
File without changes
|
{pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/connect_gui/ssh/sftp_session.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_key_loader.py
RENAMED
|
File without changes
|
{pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_login_widget.py
RENAMED
|
File without changes
|
{pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_main_widget.py
RENAMED
|
File without changes
|
{pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/connect_gui/url/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/diagram_editor/diagram_commands.py
RENAMED
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/diagram_editor/diagram_items.py
RENAMED
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.19 → pybreeze_dev-1.0.21}/pybreeze/pybreeze_ui/diagram_editor/diagram_net_utils.py
RENAMED
|
File without changes
|
|
File without changes
|