PyBreeze-dev 1.0.15__tar.gz → 1.0.17__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.15/pybreeze_dev.egg-info → pybreeze_dev-1.0.17}/PKG-INFO +11 -3
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/README.md +10 -2
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/timestamp_tools/timestamp_converter.py +73 -11
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17/pybreeze_dev.egg-info}/PKG-INFO +11 -3
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pyproject.toml +1 -1
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/LICENSE +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/__main__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/extend/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/extend/mail_thunder_extend/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/extend/mail_thunder_extend/mail_thunder_setting.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/extend/process_executor/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/extend/process_executor/file_runner_process.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/extend/process_executor/process_executor_utils.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/extend/process_executor/prthinker/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/extend/process_executor/prthinker/prthinker_process.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/extend/process_executor/python_task_process_manager.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/extend/process_executor/queue_pump.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/extend/process_executor/run_notice.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/extend/process_executor/test_pioneer/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/extend/process_executor/test_pioneer/test_pioneer_process_manager.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/extend/prthinker_extend/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/extend/prthinker_extend/prthinker_setting.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/extend_multi_language/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/extend_multi_language/extend_english.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/extend_multi_language/extend_traditional_chinese.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/extend_multi_language/update_language_dict.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/busy_cursor.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/closing.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/code_result_logs.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/connect_gui/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/connect_gui/ssh/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/connect_gui/ssh/sftp_session.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_command_widget.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_connect_thread.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_file_viewer_widget.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_host_key_policy.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_key_loader.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_login_widget.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_main_widget.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/connect_gui/url/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/connect_gui/url/ai_code_review_gui.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/diagram_editor/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/diagram_editor/diagram_commands.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/diagram_editor/diagram_editor_widget.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/diagram_editor/diagram_items.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/diagram_editor/diagram_mermaid_parser.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/diagram_editor/diagram_net_utils.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/diagram_editor/diagram_property_panel.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/diagram_editor/diagram_scene.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/diagram_editor/diagram_view.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/dialog/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/dialog/prthinker_setting_dialog.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/editor_main/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/editor_main/file_tree_context_menu.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/editor_main/main_ui.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/editor_main/pybreeze_icon.ico +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/error_text.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/exact_text.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/extend_ai_gui/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/extend_ai_gui/ai_gui_global_variable.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/extend_ai_gui/code_review/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/extend_ai_gui/code_review/code_review_thread.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/extend_ai_gui/code_review/cot_chain.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/extend_ai_gui/code_review/cot_code_review_gui.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/code_smell_detector.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/first_code_review.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/first_summary_prompt.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/global_rule.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/judge.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/judge_single_review.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/linter.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/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.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_code_review_prompt_templates/total_summary.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/cot_prompt_editor_widget.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/prompt_editor_widget.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/prompt_file_io.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_editor_widget.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_templates/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_templates/code_explainer.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_edit_gui/skills_prompt_templates/code_review.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_store.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/extend_ai_gui/skills/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/extend_ai_gui/skills/skills_send_gui.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/fixed_pitch.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/gui_thread_gc.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/jupyter_lab_gui/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/jupyter_lab_gui/jupyter_lab_thread.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/jupyter_lab_gui/jupyter_lab_widget.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/jupyter_lab_gui/lab_page.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/automation_menu/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/automation_menu/api_testka_menu/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/automation_menu/api_testka_menu/build_api_testka_menu.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/automation_menu/auto_control_menu/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/automation_menu/auto_control_menu/build_autocontrol_menu.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/automation_menu/automation_file_menu/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/automation_menu/automation_file_menu/build_automation_file_menu.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/automation_menu/automation_menu_factory.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/automation_menu/load_density_menu/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/automation_menu/load_density_menu/build_load_density_menu.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/automation_menu/mail_thunder_menu/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/automation_menu/mail_thunder_menu/build_mail_thunder_menu.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/automation_menu/prthinker_menu/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/automation_menu/prthinker_menu/build_prthinker_menu.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/automation_menu/test_pioneer_menu/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/automation_menu/test_pioneer_menu/build_test_pioneer_menu.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/automation_menu/web_runner_menu/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/automation_menu/web_runner_menu/build_webrunner_menu.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/build_menubar.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/extend_jeditor_tab_menu/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/extend_jeditor_tab_menu/jupyter_lab_tab.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/install_menu/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/install_menu/automation_menu/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/install_menu/automation_menu/build_automation_install_menu.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/install_menu/install_utils.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/install_menu/tools_menu/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/install_menu/tools_menu/build_tool_install_menu.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/menu_utils.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/plugin_menu/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/plugin_menu/build_plugin_menu.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/plugin_menu/build_run_with_menu.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/tools/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/tools/tools_menu.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/plain_text.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/run_shortcut.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/show_code_window/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/show_code_window/code_window.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/syntax/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/syntax/syntax_extend.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/syntax/syntax_keyword.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/terminal_view.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/thread_keeper.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/tools_gui/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/tools_gui/curl_import_gui.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/tools_gui/diff_gui.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/tools_gui/har_import_gui.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/tools_gui/hash_gui.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/tools_gui/header_analyzer_gui.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/tools_gui/http_status_gui.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/tools_gui/json_format_gui.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/tools_gui/jwt_decoder_gui.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/tools_gui/output_actions.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/tools_gui/query_json_gui.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/tools_gui/regex_gui.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/tools_gui/response_inspector_gui.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/tools_gui/timestamp_gui.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/tools_gui/tool_tabs.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/tools_gui/url_builder_gui.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/app_dirs.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/curl_import/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/curl_import/curl_parser.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/curl_import/request_body.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/curl_import/request_codegen.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/curl_import/script_templates.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/diff_tools/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/diff_tools/text_diff.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/exception/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/exception/error_templates.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/exception/exception_tags.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/exception/exceptions.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/file_process/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/file_process/get_dir_file_list.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/file_process/read_capped.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/file_process/replace_file.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/har_import/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/har_import/har_codegen.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/har_import/har_parser.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/hash_tools/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/hash_tools/hash_text.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/header_tools/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/header_tools/header_analyzer.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/header_tools/header_merge.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/http_reference/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/http_reference/status_codes.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/json_format/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/json_format/json_process.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/json_format/view_safe.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/jwt_tools/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/jwt_tools/jwt_decoder.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/logging/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/logging/logger.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/manager/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/manager/package_manager/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/manager/package_manager/package_manager_class.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/network/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/network/http_client.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/network/public_http.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/network/url_validation.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/query_tools/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/query_tools/query_convert.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/regex_tools/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/regex_tools/regex_tester.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/response_inspector/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/response_inspector/response_analyzer.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/subprocess_util.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/terminal_style.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/terminal_text.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/timestamp_tools/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/url_tools/__init__.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/url_tools/url_convert.py +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze_dev.egg-info/SOURCES.txt +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze_dev.egg-info/dependency_links.txt +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze_dev.egg-info/requires.txt +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze_dev.egg-info/top_level.txt +0 -0
- {pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pybreeze_dev
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.17
|
|
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
|
|
@@ -167,7 +167,7 @@ Each is a tab or a dock, each has the same copy / open-in-editor / save-to-file
|
|
|
167
167
|
|
|
168
168
|

|
|
169
169
|
|
|
170
|
-
- **Timestamp Converter** — a Unix epoch (seconds, milliseconds, microseconds or nanoseconds, auto-detected) or an ISO-8601 date-time (with `Z`, `+08`, `+0800` or `+08:00`, any number of fraction digits, basic or extended) in, every representation out in UTC. Deterministic and independent of the local time zone.
|
|
170
|
+
- **Timestamp Converter** — a Unix epoch (seconds, milliseconds, microseconds or nanoseconds, auto-detected) or an ISO-8601 date-time (with `Z`, `+08`, `+0800` or `+08:00`, any number of fraction digits, basic or extended, and an RFC 9557 zone after the offset as Java's `ZonedDateTime` writes it: `+01:00[Europe/Paris]`) or an HTTP date (`Sun, 06 Nov 1994 08:49:37 GMT`, as in `Date` or `Last-Modified`, and the two older forms RFC 9110 accepts) in, every representation out in UTC. Deterministic and independent of the local time zone.
|
|
171
171
|
- **Hash Generator** — SHA-256, SHA-512, SHA-1 and MD5 at once (MD5/SHA-1 for interoperability with `usedforsecurity=False`, never for security decisions).
|
|
172
172
|
- **Query ⇄ JSON** — `application/x-www-form-urlencoded` to pretty JSON and back; repeated keys become arrays and vice versa.
|
|
173
173
|
- **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.
|
|
@@ -332,6 +332,13 @@ For a module-by-module walkthrough of the codebase, see [architecture_explore.md
|
|
|
332
332
|
pip install pybreeze
|
|
333
333
|
```
|
|
334
334
|
|
|
335
|
+
The development channel follows the `dev` branch. CI publishes a new `pybreeze_dev` each time a push to
|
|
336
|
+
`dev` passes the tests and changes what the package ships:
|
|
337
|
+
|
|
338
|
+
```bash
|
|
339
|
+
pip install pybreeze_dev
|
|
340
|
+
```
|
|
341
|
+
|
|
335
342
|
### From source
|
|
336
343
|
|
|
337
344
|
```bash
|
|
@@ -429,6 +436,7 @@ PyBreeze/
|
|
|
429
436
|
├── exe/ # Standalone launcher & build configs
|
|
430
437
|
├── docs/ # Sphinx documentation source; updates/ is the change log
|
|
431
438
|
├── test/ # Unit tests (test_utils) + startup tests
|
|
439
|
+
├── scripts/ # Release helper for the dev channel (dev_release.py)
|
|
432
440
|
├── images/ # Screenshots
|
|
433
441
|
├── architecture.md # Architecture overview: layers, flows, cross-project contracts
|
|
434
442
|
├── architecture_explore.md # Module-by-module architecture notes
|
|
@@ -474,7 +482,7 @@ python -m pytest test/test_utils/ -v --tb=short
|
|
|
474
482
|
|
|
475
483
|
- **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
|
|
476
484
|
- **Startup tests** — `test/unit_test/start_automation/` launches the IDE in debug mode and verifies it comes up and exits cleanly
|
|
477
|
-
- **CI** — GitHub Actions on Windows across Python 3.10 – 3.14, on every push and PR plus a nightly run
|
|
485
|
+
- **CI** — GitHub Actions on Windows across Python 3.10 – 3.14, on every push and PR plus a nightly run; a push to `dev` that passes also publishes `pybreeze_dev` when the package changed
|
|
478
486
|
- **Static analysis** — SonarCloud, Codacy and Bandit
|
|
479
487
|
|
|
480
488
|
---
|
|
@@ -134,7 +134,7 @@ Each is a tab or a dock, each has the same copy / open-in-editor / save-to-file
|
|
|
134
134
|
|
|
135
135
|

|
|
136
136
|
|
|
137
|
-
- **Timestamp Converter** — a Unix epoch (seconds, milliseconds, microseconds or nanoseconds, auto-detected) or an ISO-8601 date-time (with `Z`, `+08`, `+0800` or `+08:00`, any number of fraction digits, basic or extended) in, every representation out in UTC. Deterministic and independent of the local time zone.
|
|
137
|
+
- **Timestamp Converter** — a Unix epoch (seconds, milliseconds, microseconds or nanoseconds, auto-detected) or an ISO-8601 date-time (with `Z`, `+08`, `+0800` or `+08:00`, any number of fraction digits, basic or extended, and an RFC 9557 zone after the offset as Java's `ZonedDateTime` writes it: `+01:00[Europe/Paris]`) or an HTTP date (`Sun, 06 Nov 1994 08:49:37 GMT`, as in `Date` or `Last-Modified`, and the two older forms RFC 9110 accepts) in, every representation out in UTC. Deterministic and independent of the local time zone.
|
|
138
138
|
- **Hash Generator** — SHA-256, SHA-512, SHA-1 and MD5 at once (MD5/SHA-1 for interoperability with `usedforsecurity=False`, never for security decisions).
|
|
139
139
|
- **Query ⇄ JSON** — `application/x-www-form-urlencoded` to pretty JSON and back; repeated keys become arrays and vice versa.
|
|
140
140
|
- **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.
|
|
@@ -299,6 +299,13 @@ For a module-by-module walkthrough of the codebase, see [architecture_explore.md
|
|
|
299
299
|
pip install pybreeze
|
|
300
300
|
```
|
|
301
301
|
|
|
302
|
+
The development channel follows the `dev` branch. CI publishes a new `pybreeze_dev` each time a push to
|
|
303
|
+
`dev` passes the tests and changes what the package ships:
|
|
304
|
+
|
|
305
|
+
```bash
|
|
306
|
+
pip install pybreeze_dev
|
|
307
|
+
```
|
|
308
|
+
|
|
302
309
|
### From source
|
|
303
310
|
|
|
304
311
|
```bash
|
|
@@ -396,6 +403,7 @@ PyBreeze/
|
|
|
396
403
|
├── exe/ # Standalone launcher & build configs
|
|
397
404
|
├── docs/ # Sphinx documentation source; updates/ is the change log
|
|
398
405
|
├── test/ # Unit tests (test_utils) + startup tests
|
|
406
|
+
├── scripts/ # Release helper for the dev channel (dev_release.py)
|
|
399
407
|
├── images/ # Screenshots
|
|
400
408
|
├── architecture.md # Architecture overview: layers, flows, cross-project contracts
|
|
401
409
|
├── architecture_explore.md # Module-by-module architecture notes
|
|
@@ -441,7 +449,7 @@ python -m pytest test/test_utils/ -v --tb=short
|
|
|
441
449
|
|
|
442
450
|
- **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
|
|
443
451
|
- **Startup tests** — `test/unit_test/start_automation/` launches the IDE in debug mode and verifies it comes up and exits cleanly
|
|
444
|
-
- **CI** — GitHub Actions on Windows across Python 3.10 – 3.14, on every push and PR plus a nightly run
|
|
452
|
+
- **CI** — GitHub Actions on Windows across Python 3.10 – 3.14, on every push and PR plus a nightly run; a push to `dev` that passes also publishes `pybreeze_dev` when the package changed
|
|
445
453
|
- **Static analysis** — SonarCloud, Codacy and Bandit
|
|
446
454
|
|
|
447
455
|
---
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/timestamp_tools/timestamp_converter.py
RENAMED
|
@@ -14,6 +14,7 @@ import re
|
|
|
14
14
|
from dataclasses import dataclass
|
|
15
15
|
from datetime import datetime, timedelta, timezone
|
|
16
16
|
from decimal import MAX_EMAX, MIN_EMIN, ROUND_FLOOR, Decimal, InvalidOperation, localcontext
|
|
17
|
+
from email.utils import parsedate_to_datetime
|
|
17
18
|
|
|
18
19
|
from pybreeze.utils.exception.exception_tags import (
|
|
19
20
|
empty_timestamp_error,
|
|
@@ -129,6 +130,9 @@ def _from_epoch(value: int | Decimal) -> datetime:
|
|
|
129
130
|
# refused "Z", "+0000", "+08", fractions of other than 3 or 6 digits (Go and
|
|
130
131
|
# Kubernetes write 9) and the basic format 20240101T000000Z. A lower-case "z"
|
|
131
132
|
# was refused on every version.
|
|
133
|
+
# The RFC 3339 offset a date-time with suffixes must end in, after its time
|
|
134
|
+
# (a date's last "-01" is not one)
|
|
135
|
+
_OFFSET_END_RE = re.compile(r"[Tt ][^Tt ]*(?:[Zz]|[+-]\d{2}(?::?\d{2})?)$")
|
|
132
136
|
_ISO_RE = re.compile(
|
|
133
137
|
r"(?P<year>\d{4})-?(?P<month>\d{2})-?(?P<day>\d{2})"
|
|
134
138
|
r"(?:[Tt ](?P<hour>\d{2})(?::?(?P<minute>\d{2})(?::?(?P<second>\d{2})(?:[.,](?P<fraction>\d+))?)?)?"
|
|
@@ -167,19 +171,77 @@ def _iso_match(text: str) -> datetime | None:
|
|
|
167
171
|
return moment.astimezone(timezone.utc)
|
|
168
172
|
|
|
169
173
|
|
|
170
|
-
def
|
|
171
|
-
"""
|
|
174
|
+
def _without_suffixes(text: str) -> str:
|
|
175
|
+
"""*text* without its RFC 9557 suffixes (``[Europe/Paris]``, ``[u-ca=gregory]``).
|
|
176
|
+
|
|
177
|
+
RFC 9557 puts them after an RFC 3339 date-time: a time zone, and tags such
|
|
178
|
+
as a calendar, each in brackets (``[!...]`` when critical). Java's
|
|
179
|
+
``ZonedDateTime`` writes one.
|
|
180
|
+
|
|
181
|
+
The offset before them gives the instant, and one is required: taken as
|
|
182
|
+
UTC, a time in Paris with no offset would be an hour off.
|
|
183
|
+
|
|
184
|
+
:raises ValueError: suffixes after a date-time with no offset
|
|
185
|
+
"""
|
|
186
|
+
end = len(text)
|
|
187
|
+
# Each "[...]" at the end, taken off from the last: a pattern searched from
|
|
188
|
+
# every "[" took quadratic time on a long run of brackets
|
|
189
|
+
while text.endswith("]", 0, end):
|
|
190
|
+
start = text.rfind("[", 0, end)
|
|
191
|
+
if start < 0 or "]" in text[start + 1:end - 1]:
|
|
192
|
+
break
|
|
193
|
+
end = start
|
|
194
|
+
if end == len(text):
|
|
195
|
+
return text
|
|
196
|
+
date_time = text[:end]
|
|
197
|
+
if not _OFFSET_END_RE.search(date_time):
|
|
198
|
+
raise ValueError(f"an RFC 9557 suffix after a date-time with no offset: {text}")
|
|
199
|
+
return date_time
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
def _from_http_date(text: str) -> datetime:
|
|
203
|
+
"""*text* as an HTTP date: IMF-fixdate, RFC 850 or asctime (RFC 9110, 5.6.7), or an e-mail date.
|
|
204
|
+
|
|
205
|
+
One with no zone (asctime) is in GMT, as HTTP has it.
|
|
206
|
+
|
|
207
|
+
:raises ValueError: when *text* is none of them
|
|
208
|
+
"""
|
|
209
|
+
try:
|
|
210
|
+
parsed = parsedate_to_datetime(text)
|
|
211
|
+
except (TypeError, IndexError) as error:
|
|
212
|
+
# Python 3.10's early releases raised TypeError for text that is no date
|
|
213
|
+
raise ValueError(f"not an HTTP date: {text}") from error
|
|
214
|
+
return parsed if parsed.tzinfo is not None else parsed.replace(tzinfo=timezone.utc)
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
def _date_time(text: str) -> datetime:
|
|
218
|
+
"""*text* as an instant: ISO 8601 (with any RFC 9557 suffix), or else an HTTP date.
|
|
219
|
+
|
|
220
|
+
:raises ValueError: a field out of range, or *text* in none of the forms
|
|
221
|
+
:raises OverflowError: moving it to UTC leaves the years datetime can hold
|
|
222
|
+
"""
|
|
223
|
+
date_time = _without_suffixes(text)
|
|
224
|
+
parsed = _iso_match(date_time)
|
|
225
|
+
if parsed is not None:
|
|
226
|
+
return parsed
|
|
172
227
|
try:
|
|
173
|
-
parsed = _iso_match(text)
|
|
174
|
-
if parsed is not None:
|
|
175
|
-
return parsed
|
|
176
228
|
# Anything else fromisoformat takes on this Python (3.11+ reads more)
|
|
177
|
-
parsed = datetime.fromisoformat(
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
229
|
+
parsed = datetime.fromisoformat(date_time)
|
|
230
|
+
except ValueError:
|
|
231
|
+
if date_time != text:
|
|
232
|
+
raise
|
|
233
|
+
parsed = _from_http_date(text)
|
|
234
|
+
if parsed.tzinfo is None:
|
|
235
|
+
parsed = parsed.replace(tzinfo=timezone.utc)
|
|
236
|
+
# Moving 0001-01-01 +01:00 (or 9999-12-31 -01:00) to UTC leaves the
|
|
237
|
+
# range datetime can hold: OverflowError, not ValueError.
|
|
238
|
+
return parsed.astimezone(timezone.utc)
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
def _from_iso(text: str) -> datetime:
|
|
242
|
+
"""Parse an ISO-8601 string (or an HTTP date) into a UTC datetime; no offset means UTC."""
|
|
243
|
+
try:
|
|
244
|
+
return _date_time(text)
|
|
183
245
|
except (ValueError, OverflowError) as error:
|
|
184
246
|
pybreeze_logger.error(unrecognized_timestamp_error)
|
|
185
247
|
raise TimestampParseException(unrecognized_timestamp_error) from error
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pybreeze_dev
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.17
|
|
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
|
|
@@ -167,7 +167,7 @@ Each is a tab or a dock, each has the same copy / open-in-editor / save-to-file
|
|
|
167
167
|
|
|
168
168
|

|
|
169
169
|
|
|
170
|
-
- **Timestamp Converter** — a Unix epoch (seconds, milliseconds, microseconds or nanoseconds, auto-detected) or an ISO-8601 date-time (with `Z`, `+08`, `+0800` or `+08:00`, any number of fraction digits, basic or extended) in, every representation out in UTC. Deterministic and independent of the local time zone.
|
|
170
|
+
- **Timestamp Converter** — a Unix epoch (seconds, milliseconds, microseconds or nanoseconds, auto-detected) or an ISO-8601 date-time (with `Z`, `+08`, `+0800` or `+08:00`, any number of fraction digits, basic or extended, and an RFC 9557 zone after the offset as Java's `ZonedDateTime` writes it: `+01:00[Europe/Paris]`) or an HTTP date (`Sun, 06 Nov 1994 08:49:37 GMT`, as in `Date` or `Last-Modified`, and the two older forms RFC 9110 accepts) in, every representation out in UTC. Deterministic and independent of the local time zone.
|
|
171
171
|
- **Hash Generator** — SHA-256, SHA-512, SHA-1 and MD5 at once (MD5/SHA-1 for interoperability with `usedforsecurity=False`, never for security decisions).
|
|
172
172
|
- **Query ⇄ JSON** — `application/x-www-form-urlencoded` to pretty JSON and back; repeated keys become arrays and vice versa.
|
|
173
173
|
- **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.
|
|
@@ -332,6 +332,13 @@ For a module-by-module walkthrough of the codebase, see [architecture_explore.md
|
|
|
332
332
|
pip install pybreeze
|
|
333
333
|
```
|
|
334
334
|
|
|
335
|
+
The development channel follows the `dev` branch. CI publishes a new `pybreeze_dev` each time a push to
|
|
336
|
+
`dev` passes the tests and changes what the package ships:
|
|
337
|
+
|
|
338
|
+
```bash
|
|
339
|
+
pip install pybreeze_dev
|
|
340
|
+
```
|
|
341
|
+
|
|
335
342
|
### From source
|
|
336
343
|
|
|
337
344
|
```bash
|
|
@@ -429,6 +436,7 @@ PyBreeze/
|
|
|
429
436
|
├── exe/ # Standalone launcher & build configs
|
|
430
437
|
├── docs/ # Sphinx documentation source; updates/ is the change log
|
|
431
438
|
├── test/ # Unit tests (test_utils) + startup tests
|
|
439
|
+
├── scripts/ # Release helper for the dev channel (dev_release.py)
|
|
432
440
|
├── images/ # Screenshots
|
|
433
441
|
├── architecture.md # Architecture overview: layers, flows, cross-project contracts
|
|
434
442
|
├── architecture_explore.md # Module-by-module architecture notes
|
|
@@ -474,7 +482,7 @@ python -m pytest test/test_utils/ -v --tb=short
|
|
|
474
482
|
|
|
475
483
|
- **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
|
|
476
484
|
- **Startup tests** — `test/unit_test/start_automation/` launches the IDE in debug mode and verifies it comes up and exits cleanly
|
|
477
|
-
- **CI** — GitHub Actions on Windows across Python 3.10 – 3.14, on every push and PR plus a nightly run
|
|
485
|
+
- **CI** — GitHub Actions on Windows across Python 3.10 – 3.14, on every push and PR plus a nightly run; a push to `dev` that passes also publishes `pybreeze_dev` when the package changed
|
|
478
486
|
- **Static analysis** — SonarCloud, Codacy and Bandit
|
|
479
487
|
|
|
480
488
|
---
|
|
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.15 → pybreeze_dev-1.0.17}/pybreeze/extend/process_executor/file_runner_process.py
RENAMED
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/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.15 → pybreeze_dev-1.0.17}/pybreeze/extend/prthinker_extend/prthinker_setting.py
RENAMED
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/extend_multi_language/extend_english.py
RENAMED
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/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.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/connect_gui/ssh/__init__.py
RENAMED
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/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.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_key_loader.py
RENAMED
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_login_widget.py
RENAMED
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/connect_gui/ssh/ssh_main_widget.py
RENAMED
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/connect_gui/url/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/diagram_editor/diagram_commands.py
RENAMED
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/diagram_editor/diagram_items.py
RENAMED
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/diagram_editor/diagram_net_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/diagram_editor/diagram_scene.py
RENAMED
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/diagram_editor/diagram_view.py
RENAMED
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/dialog/prthinker_setting_dialog.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/editor_main/pybreeze_icon.ico
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
|
|
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
|
|
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.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/extend_ai_gui/prompt_store.py
RENAMED
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/extend_ai_gui/skills/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/jupyter_lab_gui/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/jupyter_lab_gui/lab_page.py
RENAMED
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/automation_menu/__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
|
|
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
|
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/install_menu/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/install_menu/install_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/menu/plugin_menu/__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.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/show_code_window/__init__.py
RENAMED
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/show_code_window/code_window.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.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/tools_gui/curl_import_gui.py
RENAMED
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/tools_gui/har_import_gui.py
RENAMED
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/tools_gui/header_analyzer_gui.py
RENAMED
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/tools_gui/http_status_gui.py
RENAMED
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/tools_gui/json_format_gui.py
RENAMED
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/tools_gui/jwt_decoder_gui.py
RENAMED
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/tools_gui/output_actions.py
RENAMED
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/tools_gui/query_json_gui.py
RENAMED
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/tools_gui/response_inspector_gui.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/pybreeze_ui/tools_gui/url_builder_gui.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
|
|
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.15 → pybreeze_dev-1.0.17}/pybreeze/utils/file_process/get_dir_file_list.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
|
|
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
|
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/manager/package_manager/__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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pybreeze_dev-1.0.15 → pybreeze_dev-1.0.17}/pybreeze/utils/response_inspector/response_analyzer.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|