je-editor 0.0.222__py3-none-any.whl → 0.0.224__py3-none-any.whl

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.

Potentially problematic release.


This version of je-editor might be problematic. Click here for more details.

Files changed (75) hide show
  1. je_editor/__init__.py +2 -2
  2. je_editor/git_client/commit_graph.py +7 -7
  3. je_editor/git_client/git_action.py +0 -7
  4. je_editor/pyside_ui/browser/browser_view.py +16 -4
  5. je_editor/pyside_ui/browser/browser_widget.py +43 -29
  6. je_editor/pyside_ui/browser/main_browser_widget.py +85 -0
  7. je_editor/pyside_ui/code/auto_save/auto_save_manager.py +34 -2
  8. je_editor/pyside_ui/code/auto_save/auto_save_thread.py +19 -6
  9. je_editor/pyside_ui/code/code_format/pep8_format.py +53 -9
  10. je_editor/pyside_ui/code/code_process/code_exec.py +88 -52
  11. je_editor/pyside_ui/code/plaintext_code_edit/code_edit_plaintext.py +116 -55
  12. je_editor/pyside_ui/code/running_process_manager.py +19 -1
  13. je_editor/pyside_ui/code/shell_process/shell_exec.py +71 -48
  14. je_editor/pyside_ui/code/syntax/python_syntax.py +45 -10
  15. je_editor/pyside_ui/code/syntax/syntax_setting.py +40 -12
  16. je_editor/pyside_ui/code/textedit_code_result/code_record.py +34 -12
  17. je_editor/pyside_ui/code/variable_inspector/inspector_gui.py +53 -6
  18. je_editor/pyside_ui/dialog/ai_dialog/set_ai_dialog.py +30 -3
  19. je_editor/pyside_ui/dialog/file_dialog/create_file_dialog.py +35 -2
  20. je_editor/pyside_ui/dialog/file_dialog/open_file_dialog.py +33 -5
  21. je_editor/pyside_ui/dialog/file_dialog/save_file_dialog.py +25 -3
  22. je_editor/pyside_ui/dialog/search_ui/search_error_box.py +26 -1
  23. je_editor/pyside_ui/dialog/search_ui/search_text_box.py +26 -1
  24. je_editor/pyside_ui/git_ui/code_diff_compare/code_diff_viewer_widget.py +11 -11
  25. je_editor/pyside_ui/git_ui/git_client/commit_table.py +46 -8
  26. je_editor/pyside_ui/git_ui/git_client/git_branch_tree_widget.py +49 -15
  27. je_editor/pyside_ui/git_ui/git_client/git_client_gui.py +81 -16
  28. je_editor/pyside_ui/git_ui/git_client/graph_view.py +64 -20
  29. je_editor/pyside_ui/main_ui/ai_widget/ai_config.py +20 -5
  30. je_editor/pyside_ui/main_ui/ai_widget/ask_thread.py +20 -1
  31. je_editor/pyside_ui/main_ui/ai_widget/chat_ui.py +56 -41
  32. je_editor/pyside_ui/main_ui/ai_widget/langchain_interface.py +45 -6
  33. je_editor/pyside_ui/main_ui/console_widget/console_gui.py +44 -12
  34. je_editor/pyside_ui/main_ui/console_widget/qprocess_adapter.py +34 -13
  35. je_editor/pyside_ui/main_ui/dock/destroy_dock.py +33 -2
  36. je_editor/pyside_ui/main_ui/editor/editor_widget.py +104 -20
  37. je_editor/pyside_ui/main_ui/editor/editor_widget_dock.py +34 -7
  38. je_editor/pyside_ui/main_ui/editor/process_input.py +38 -11
  39. je_editor/pyside_ui/main_ui/ipython_widget/rich_jupyter.py +46 -11
  40. je_editor/pyside_ui/main_ui/main_editor.py +180 -42
  41. je_editor/pyside_ui/main_ui/menu/check_style_menu/build_check_style_menu.py +51 -28
  42. je_editor/pyside_ui/main_ui/menu/dock_menu/build_dock_menu.py +83 -36
  43. je_editor/pyside_ui/main_ui/menu/file_menu/build_file_menu.py +70 -17
  44. je_editor/pyside_ui/main_ui/menu/help_menu/build_help_menu.py +35 -4
  45. je_editor/pyside_ui/main_ui/menu/language_menu/build_language_server.py +41 -1
  46. je_editor/pyside_ui/main_ui/menu/python_env_menu/build_venv_menu.py +100 -42
  47. je_editor/pyside_ui/main_ui/menu/run_menu/build_run_menu.py +57 -7
  48. je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/build_debug_menu.py +50 -4
  49. je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/build_program_menu.py +52 -6
  50. je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/build_shell_menu.py +44 -4
  51. je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/utils.py +23 -1
  52. je_editor/pyside_ui/main_ui/menu/set_menu_bar.py +37 -12
  53. je_editor/pyside_ui/main_ui/menu/style_menu/build_style_menu.py +44 -7
  54. je_editor/pyside_ui/main_ui/menu/tab_menu/build_tab_menu.py +127 -44
  55. je_editor/pyside_ui/main_ui/menu/text_menu/build_text_menu.py +65 -1
  56. je_editor/pyside_ui/main_ui/save_settings/setting_utils.py +18 -1
  57. je_editor/pyside_ui/main_ui/save_settings/user_color_setting_file.py +33 -3
  58. je_editor/pyside_ui/main_ui/save_settings/user_setting_file.py +38 -11
  59. je_editor/pyside_ui/main_ui/system_tray/extend_system_tray.py +39 -2
  60. je_editor/start_editor.py +26 -1
  61. je_editor/utils/encodings/python_encodings.py +101 -98
  62. je_editor/utils/file/open/open_file.py +36 -19
  63. je_editor/utils/file/save/save_file.py +35 -14
  64. je_editor/utils/json/json_file.py +29 -14
  65. je_editor/utils/json_format/json_process.py +33 -2
  66. je_editor/utils/logging/loggin_instance.py +38 -8
  67. je_editor/utils/multi_language/multi_language_wrapper.py +29 -4
  68. je_editor/utils/redirect_manager/redirect_manager_class.py +49 -11
  69. je_editor/utils/venv_check/check_venv.py +45 -15
  70. {je_editor-0.0.222.dist-info → je_editor-0.0.224.dist-info}/METADATA +1 -1
  71. {je_editor-0.0.222.dist-info → je_editor-0.0.224.dist-info}/RECORD +74 -74
  72. je_editor/git_client/github.py +0 -81
  73. {je_editor-0.0.222.dist-info → je_editor-0.0.224.dist-info}/WHEEL +0 -0
  74. {je_editor-0.0.222.dist-info → je_editor-0.0.224.dist-info}/licenses/LICENSE +0 -0
  75. {je_editor-0.0.222.dist-info → je_editor-0.0.224.dist-info}/top_level.txt +0 -0
@@ -1,140 +1,140 @@
1
- je_editor/__init__.py,sha256=IZm-mUID0W7-smb9SYEtwcWrpr8mz6OyF4e5akHGrFU,2405
1
+ je_editor/__init__.py,sha256=yIUH6MZZUrVYKo0emfnHmq4hzjTu1NygO2lbIpmYkao,2418
2
2
  je_editor/__main__.py,sha256=2ymm4ESRcqP4K1YQyeaDbGhuK-0C1IausIiEOpbm6Ds,570
3
- je_editor/start_editor.py,sha256=hW7JFOjBkcW7hdC7q-9JsaVTeSNCep1GsqxLmbMU4wg,543
3
+ je_editor/start_editor.py,sha256=M1PcWF-VAt-qhDa2ezJuBHwnxTB60RDJ4gKSw_3pcdY,1501
4
4
  je_editor/code_scan/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  je_editor/code_scan/ruff_thread.py,sha256=DNM4cEZt5PBqIDtyy5GXq9BFwLhSuLu8FFBxn3_9xRE,1983
6
6
  je_editor/code_scan/watchdog_implement.py,sha256=tjkA_9_bHEzGdTm_O1IPSwCka9ELMR4cI_nBKEHHV34,2114
7
7
  je_editor/code_scan/watchdog_thread.py,sha256=UPIYpUCdgAox-44gJnp10ooJfBono1Hkkj5JFi2B_As,2609
8
8
  je_editor/git_client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
- je_editor/git_client/commit_graph.py,sha256=z5as1qS0rQMp_u8xdtIn0b0FKyZzUm68l3EiTjvykCU,2677
10
- je_editor/git_client/git_action.py,sha256=FgIvS_xPZSu0H_UIQoaqJKJa-JZiQwj1oGLVOeSD1nA,6256
9
+ je_editor/git_client/commit_graph.py,sha256=JPCe5-JTMPpziJYI7ufXJibSVYJuLZRw37-L6IY1ve4,2721
10
+ je_editor/git_client/git_action.py,sha256=k5PsnLyaiD3uG_FfotetVAT_ZqKUBEi8nfHX2jXcWLw,6092
11
11
  je_editor/git_client/git_cli.py,sha256=Ad-OdPyOQvAvUHeXWVwvHPCi7xo6o3ljKMTlUzOW53Q,2096
12
- je_editor/git_client/github.py,sha256=aJTIl2LftyWR0Olmv2WDuJDkmLLukz6JKd3FZntb2-8,3324
13
12
  je_editor/pyside_ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
13
  je_editor/pyside_ui/browser/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
14
  je_editor/pyside_ui/browser/browser_download_window.py,sha256=cCOj1WeglNIbabJZdXL0eXWE6bZT-U9huZGFbSSKXgw,3397
16
15
  je_editor/pyside_ui/browser/browser_serach_lineedit.py,sha256=78Wa1X9LWoJW_ppCVTOmD51rJzjOElJGkdPkk4VBkBY,1875
17
- je_editor/pyside_ui/browser/browser_view.py,sha256=6b0J46Y8GnfdYuR40hqlanpG84AtrPkEo9laS8nc374,2771
18
- je_editor/pyside_ui/browser/browser_widget.py,sha256=3DINK7V7BSckm8tqvDggBtGo3sYDrYHsyeFmsqH9zFs,4246
16
+ je_editor/pyside_ui/browser/browser_view.py,sha256=UgzOyHBx8egGO7Pt4Ch18Hie9IrFtMFBvax2tItWJq0,3122
17
+ je_editor/pyside_ui/browser/browser_widget.py,sha256=5bxKKQrzEXAVjuxL61ryz-ZfFnXfXdxy4mLJRowFt5Q,4838
18
+ je_editor/pyside_ui/browser/main_browser_widget.py,sha256=3EjfmnAPkWWhHJm6WftfZIPoQ7kVRGzamWb5bF2cC8M,4044
19
19
  je_editor/pyside_ui/code/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
- je_editor/pyside_ui/code/running_process_manager.py,sha256=VdfdprPNlPmMySOKDOjEEl5X9IsJVPSDb0a2KDKgiQg,1008
20
+ je_editor/pyside_ui/code/running_process_manager.py,sha256=IRddlk05W60OwY1OHCJWQo7mLMfnJIrw5vZdZxV53cU,1852
21
21
  je_editor/pyside_ui/code/auto_save/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
- je_editor/pyside_ui/code/auto_save/auto_save_manager.py,sha256=hQ03TVq-c-mGku51DrjpmLtsPkVcZv4G_jaozC06Ir0,1019
23
- je_editor/pyside_ui/code/auto_save/auto_save_thread.py,sha256=V_A8_4JZdHdF9e2E_rYY_paS7rnJjB8_YVPxTyHZ_QE,1662
22
+ je_editor/pyside_ui/code/auto_save/auto_save_manager.py,sha256=mvNRjaysh-13DU0hJLubfSZ3aF_N_JBYxxOaaXaiOfs,2281
23
+ je_editor/pyside_ui/code/auto_save/auto_save_thread.py,sha256=AhEoQP2iH0OXe6XBUaYOXbx97o82TulcASHzAkwQTlI,2719
24
24
  je_editor/pyside_ui/code/code_format/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
- je_editor/pyside_ui/code/code_format/pep8_format.py,sha256=zrCkUdz2SG4bnMSkXfccvpHAmUOxXLedSBxL_nkdaoE,3574
25
+ je_editor/pyside_ui/code/code_format/pep8_format.py,sha256=hdFg6tFv2PhC1VWkzuNdsZTm_brniR5bN5gFmAJXkUA,5558
26
26
  je_editor/pyside_ui/code/code_process/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
- je_editor/pyside_ui/code/code_process/code_exec.py,sha256=k0EPC2ZhC7yZTJkcezUvELIuD8AkU_GoXQcM8JL2Ptc,10686
27
+ je_editor/pyside_ui/code/code_process/code_exec.py,sha256=-A_yEg5WjQmwYEk_TofcltELHrDnulR7jM6qMP4gi8Q,12732
28
28
  je_editor/pyside_ui/code/plaintext_code_edit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
- je_editor/pyside_ui/code/plaintext_code_edit/code_edit_plaintext.py,sha256=lcwmBemFenH-uDGe6fo70MS47emzPFgy9XL7cipwryY,14249
29
+ je_editor/pyside_ui/code/plaintext_code_edit/code_edit_plaintext.py,sha256=70JEsv6cY7zRYBbbK9g_pNRQgZtqKoSYwac5436DjQM,16255
30
30
  je_editor/pyside_ui/code/shell_process/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
- je_editor/pyside_ui/code/shell_process/shell_exec.py,sha256=3x9nMRlAQdK7asoB_GD-Dx9LyrCOic8YIy0wzapmpiw,9527
31
+ je_editor/pyside_ui/code/shell_process/shell_exec.py,sha256=kFc4b2acrPHkwcqaBlP_YP5hM_bquS6yOGAzxOLKof8,12927
32
32
  je_editor/pyside_ui/code/syntax/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
- je_editor/pyside_ui/code/syntax/python_syntax.py,sha256=9rK7_DYAANgf28PUdVl9xs42b76Re_SWwIpijEGBuzQ,3054
34
- je_editor/pyside_ui/code/syntax/syntax_setting.py,sha256=oaLRF_83Oa6bcAorf7AlZG0Mrt4FmsK7b4aA-LS_bRo,2284
33
+ je_editor/pyside_ui/code/syntax/python_syntax.py,sha256=suuOakQL27B8KsS-XJi2tlMdtC5Tb_A-YX6mpgOPTwo,4542
34
+ je_editor/pyside_ui/code/syntax/syntax_setting.py,sha256=Fgy9bWUl3QWOKLeqOlpNIlMsEz-dEDsZqkqAyGKqZL0,3764
35
35
  je_editor/pyside_ui/code/textedit_code_result/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
- je_editor/pyside_ui/code/textedit_code_result/code_record.py,sha256=pT-CmcADEaXLZ0ih6D6rpe1XywgszrEpcJxtJYgopJE,2162
36
+ je_editor/pyside_ui/code/textedit_code_result/code_record.py,sha256=QQcp79ZxxsLswQtwInrwAOvfETh406IEcQtzXbPcOrw,3398
37
37
  je_editor/pyside_ui/code/variable_inspector/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
- je_editor/pyside_ui/code/variable_inspector/inspector_gui.py,sha256=QMcwN3td5Nr01bWpUHEFJzl-wb0Ifigqx6ybfvQSzJY,4747
38
+ je_editor/pyside_ui/code/variable_inspector/inspector_gui.py,sha256=X5rRPbj6EBKcyxi1v7ch9SPSfQxW_V5xmNaLhHLU6aQ,7021
39
39
  je_editor/pyside_ui/dialog/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
40
  je_editor/pyside_ui/dialog/ai_dialog/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
- je_editor/pyside_ui/dialog/ai_dialog/set_ai_dialog.py,sha256=w_cku2dQthtk0TDSxEeDB-tvzdHV4vmUhFVDlb2ynO8,2392
41
+ je_editor/pyside_ui/dialog/ai_dialog/set_ai_dialog.py,sha256=OP11sUD35oMiqTB5TPta5kHG8qZSxjEj3lVTe26yiR0,3288
42
42
  je_editor/pyside_ui/dialog/file_dialog/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
- je_editor/pyside_ui/dialog/file_dialog/create_file_dialog.py,sha256=3NvGVld_If2TsM_Xt0pgWDTcj51szS8MxG1raU-tP2A,1650
44
- je_editor/pyside_ui/dialog/file_dialog/open_file_dialog.py,sha256=wTI4TwMfJ-960c_C0cLy2EhWbZosewSmpyWOrcf9yLE,3806
45
- je_editor/pyside_ui/dialog/file_dialog/save_file_dialog.py,sha256=pyPfwgrDiDpMKk8T_4oBukgJLxdWnzIKSziwFt4YuUU,1781
43
+ je_editor/pyside_ui/dialog/file_dialog/create_file_dialog.py,sha256=Q3iUyxiBfhu_8fzlSVvMBlD_WEV5APJ7RFIUBxN0MyE,2742
44
+ je_editor/pyside_ui/dialog/file_dialog/open_file_dialog.py,sha256=FjK95FhQ6B42O1271eM84dg6tuNaaytReO1-XQ3Iu2o,5049
45
+ je_editor/pyside_ui/dialog/file_dialog/save_file_dialog.py,sha256=rrJTYZoXgAIWOXPZMDJRgTOwJAXV-UYjQjgKyulMeuI,2781
46
46
  je_editor/pyside_ui/dialog/search_ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
- je_editor/pyside_ui/dialog/search_ui/search_error_box.py,sha256=jSa423cQW_xQ2WAj46CCWPsCP0Gy7g-UDe5o8LQyKQk,1190
48
- je_editor/pyside_ui/dialog/search_ui/search_text_box.py,sha256=ul-98FVByq_TNkkLZcBSF4VSwIQNBBj-4e6jYlh6YEA,1229
47
+ je_editor/pyside_ui/dialog/search_ui/search_error_box.py,sha256=Bp6iSUeIOvj3EXLA4U9-ap2rocRqVZhS1fgHhKaKCLg,1810
48
+ je_editor/pyside_ui/dialog/search_ui/search_text_box.py,sha256=QJrD1UVabLow7l9uJ0cDWQ2K0l6QgvINToQJw9mYKfE,1879
49
49
  je_editor/pyside_ui/git_ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
50
  je_editor/pyside_ui/git_ui/code_diff_compare/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
- je_editor/pyside_ui/git_ui/code_diff_compare/code_diff_viewer_widget.py,sha256=9TyUydcMO3_II9U-lALEfxfwQFJOj1Xlk0RKBOU4NUQ,3411
51
+ je_editor/pyside_ui/git_ui/code_diff_compare/code_diff_viewer_widget.py,sha256=Vr58ropWLJ6x4b-7ZGybMVhSnBLD4vD-jYeICN-nLKc,3657
52
52
  je_editor/pyside_ui/git_ui/code_diff_compare/line_number_code_viewer.py,sha256=VFC98ERf-Wj78MTD0bwAXOKtFRTjcdkndA-SiuiTI0g,5638
53
53
  je_editor/pyside_ui/git_ui/code_diff_compare/multi_file_diff_viewer.py,sha256=Y8Z0MUBkxWjV6dnvMnmopDFCmxmUX49cAmX3DHgs-50,3195
54
54
  je_editor/pyside_ui/git_ui/code_diff_compare/side_by_side_diff_widget.py,sha256=v07KV3V4C6vBLqyoJg4YuFWStx_cVH31jaeniH9V2lw,11100
55
55
  je_editor/pyside_ui/git_ui/git_client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
- je_editor/pyside_ui/git_ui/git_client/commit_table.py,sha256=5NkPx27omhtql1n0E51i5wuXqojnioxRD3SJPq-X0Xg,1136
57
- je_editor/pyside_ui/git_ui/git_client/git_branch_tree_widget.py,sha256=wZ2OwY1LZ-Qv4TFx_7uuDGgb2jUsUKiUVgZoU_mg__I,4748
58
- je_editor/pyside_ui/git_ui/git_client/git_client_gui.py,sha256=PIGrJOlEba4Rg3rHOqNRf-9IjQa2ALl2O5z5mQMu0wo,31542
59
- je_editor/pyside_ui/git_ui/git_client/graph_view.py,sha256=0qLxZMzRZMpDFACiUlv0EyyVkAZiYFlU7d2jE5NuVIE,6045
56
+ je_editor/pyside_ui/git_ui/git_client/commit_table.py,sha256=-tLXZVukvcH2IEbrO9rm-RPDHWPO31hXHfL3jXVmY3A,2579
57
+ je_editor/pyside_ui/git_ui/git_client/git_branch_tree_widget.py,sha256=kPVXD3b5c9geUbzztyrR1Zxuj3vYREH28DZip_9v-Gg,6531
58
+ je_editor/pyside_ui/git_ui/git_client/git_client_gui.py,sha256=oMJl2TKz_C-JxrbKiq7S_7wl_e01EKfEVXPq-qNwWU8,34230
59
+ je_editor/pyside_ui/git_ui/git_client/graph_view.py,sha256=LAuLxOpK1cXO0EDmbjjnRYV8Mdlsl0oyyjmb_rNe70s,7932
60
60
  je_editor/pyside_ui/main_ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
61
- je_editor/pyside_ui/main_ui/main_editor.py,sha256=ZehoXiVy9ZE6_2tHdAC3Gdg5PqdccpqZnM-oD6d9sOQ,11339
61
+ je_editor/pyside_ui/main_ui/main_editor.py,sha256=3SpWEqlxzZR1N7vRJaSrWJDYT2_gy7Ym6t7N72TGzaQ,15901
62
62
  je_editor/pyside_ui/main_ui/ai_widget/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
- je_editor/pyside_ui/main_ui/ai_widget/ai_config.py,sha256=Uc9UkrIeALqjmZCF5ukXtSgU1EB4xa5223gk3CfYXX4,459
64
- je_editor/pyside_ui/main_ui/ai_widget/ask_thread.py,sha256=ma5Cnwlr0RbU-sytmodcYabWueyGE8DKKISZ_0zf3Eo,571
65
- je_editor/pyside_ui/main_ui/ai_widget/chat_ui.py,sha256=yBoWXvGvgUCWjmPoBcOhj0mtOm0R42mYEs7FokYQmnE,6763
66
- je_editor/pyside_ui/main_ui/ai_widget/langchain_interface.py,sha256=_jykolLkwrGXL1Y_Scyf6Y9560rb9blGwDlpflRm9RI,1773
63
+ je_editor/pyside_ui/main_ui/ai_widget/ai_config.py,sha256=9lNwVrb61_UxbwC5-5bj2I2kKwRkRKX1JDiqeLJjqOc,1320
64
+ je_editor/pyside_ui/main_ui/ai_widget/ask_thread.py,sha256=suTFGDAuhhIq2W8tyEgY_U5eQAKlEQyUPO_ej_3A3eI,1491
65
+ je_editor/pyside_ui/main_ui/ai_widget/chat_ui.py,sha256=fuNWfTh5mbWcNhVqIwdwo3WCNQOVm4xMPIzNT8faF6k,8946
66
+ je_editor/pyside_ui/main_ui/ai_widget/langchain_interface.py,sha256=ZQPNjIuwMLNRKj4a1Uk8z4I2CcytqcAEslEl56glZmg,3488
67
67
  je_editor/pyside_ui/main_ui/console_widget/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
- je_editor/pyside_ui/main_ui/console_widget/console_gui.py,sha256=3H0Ocj9oDtgAoH7mT2YjDsSeFW3FphsstJqtIesS4yA,5572
69
- je_editor/pyside_ui/main_ui/console_widget/qprocess_adapter.py,sha256=UIyIoCEyt6hMxc2oLH68ioERFyuPDnPub05_Yi_-rGs,2304
68
+ je_editor/pyside_ui/main_ui/console_widget/console_gui.py,sha256=YLo4huhKInAt0uwnRohqIfRIGWowSpy5I8wYJ3eXjaE,7427
69
+ je_editor/pyside_ui/main_ui/console_widget/qprocess_adapter.py,sha256=uKK-BJcc8TXFaiyNEeEtcIk1dZiLQtnug1YN9L8jiUg,4092
70
70
  je_editor/pyside_ui/main_ui/dock/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
- je_editor/pyside_ui/main_ui/dock/destroy_dock.py,sha256=MTN45BykNm6FA4gMW7gI4Kr9orTdcxVTm7mch3DUhaw,604
71
+ je_editor/pyside_ui/main_ui/dock/destroy_dock.py,sha256=cTuqRLZN6elINnTJjv105oH6O0G4J0xCOOs7-mhirNg,1876
72
72
  je_editor/pyside_ui/main_ui/editor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
- je_editor/pyside_ui/main_ui/editor/editor_widget.py,sha256=AnrBGoToipAtxh2XRNey3wskKns6AxJ6hwtdST3fovw,10387
74
- je_editor/pyside_ui/main_ui/editor/editor_widget_dock.py,sha256=6oDf0pKx0sThlk_Qz0gduPIpasPqib6OYnMnQ4FRXFo,1930
75
- je_editor/pyside_ui/main_ui/editor/process_input.py,sha256=zj29E3He5_PD23HnIaDQ1vn3LWRECXTf8P7MWsX73k0,3401
73
+ je_editor/pyside_ui/main_ui/editor/editor_widget.py,sha256=-s8Jg8V4t3VRndncHi6PWdFgeZw-A-EWonhixeWuPEg,14035
74
+ je_editor/pyside_ui/main_ui/editor/editor_widget_dock.py,sha256=MFzFJY12j0vYcjrundYrFW0JdPyDUX8zWD1551-cJu4,3251
75
+ je_editor/pyside_ui/main_ui/editor/process_input.py,sha256=SSZEdpnu2gFpY39z_pFR-bbZ9E4gmo3IO7zkQidV6Fw,5347
76
76
  je_editor/pyside_ui/main_ui/ipython_widget/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
- je_editor/pyside_ui/main_ui/ipython_widget/rich_jupyter.py,sha256=LKbMbgpstsk_EiwbBSJ9Ljn7Ia3j2UNpQ_JAI6_LJ4Q,1629
77
+ je_editor/pyside_ui/main_ui/ipython_widget/rich_jupyter.py,sha256=CHEtjWykTSkWu9VFUU24O_8elXtFVR75UVCU79AbwZA,3942
78
78
  je_editor/pyside_ui/main_ui/menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
79
- je_editor/pyside_ui/main_ui/menu/set_menu_bar.py,sha256=I12DXLyRO4cKe17fQY-QDazKEIh9W36LNV1aKUw47MU,1823
79
+ je_editor/pyside_ui/main_ui/menu/set_menu_bar.py,sha256=3_3SV0bdK9NV7faJv0LG5PCHQp0AAhpGxVfPs3yCoN8,3181
80
80
  je_editor/pyside_ui/main_ui/menu/check_style_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
- je_editor/pyside_ui/main_ui/menu/check_style_menu/build_check_style_menu.py,sha256=1wD6FI21Dw3IcQONuTkHP9rUPGwY70OvCtSc-ZcTKMk,3793
81
+ je_editor/pyside_ui/main_ui/menu/check_style_menu/build_check_style_menu.py,sha256=2M0TJ_NqToRgpdjl1eTcML9VWC0617B6ho5YFZPxFQg,5490
82
82
  je_editor/pyside_ui/main_ui/menu/dock_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
- je_editor/pyside_ui/main_ui/menu/dock_menu/build_dock_menu.py,sha256=KWblg3ZxsMSPLYWeYsnx15vJ3TdHL7kQQEEiuk0t0DE,9146
83
+ je_editor/pyside_ui/main_ui/menu/dock_menu/build_dock_menu.py,sha256=GyouRpI6_6gXqa7vQtH8ZwD8mU1BdSLG32rsdNllf08,10801
84
84
  je_editor/pyside_ui/main_ui/menu/file_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
85
- je_editor/pyside_ui/main_ui/menu/file_menu/build_file_menu.py,sha256=YT6kvXShRbfM4Qo51VveO_IK8uDqlNrGwHZUiM6_Tes,6881
85
+ je_editor/pyside_ui/main_ui/menu/file_menu/build_file_menu.py,sha256=5Qtn3ZEWtfyems4AhBh2UCl0NwxTJy1nXR38umFMDdY,8882
86
86
  je_editor/pyside_ui/main_ui/menu/help_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
- je_editor/pyside_ui/main_ui/menu/help_menu/build_help_menu.py,sha256=iy1xDpV-u4DhZp8ZsetVKwHuJCctYgCWMpkIv12u3V0,2869
87
+ je_editor/pyside_ui/main_ui/menu/help_menu/build_help_menu.py,sha256=sJ6tb4vYeb9an_pkV2i_r9d3JcRUOD040LTMH6xUZJE,4161
88
88
  je_editor/pyside_ui/main_ui/menu/language_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
89
- je_editor/pyside_ui/main_ui/menu/language_menu/build_language_server.py,sha256=23jKdAYxN65xJMVd5NbCwhIjwh2kfXVDszN1wmIs1A0,2333
89
+ je_editor/pyside_ui/main_ui/menu/language_menu/build_language_server.py,sha256=xiNNFuhqbqn6bLgIHprSnNZOzI1JV25FfkNnSnK1g0Y,3831
90
90
  je_editor/pyside_ui/main_ui/menu/python_env_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
91
- je_editor/pyside_ui/main_ui/menu/python_env_menu/build_venv_menu.py,sha256=Hv_UbIwlRGlcpvDVSHjNHFslYvFawLh81raWA6zoJAY,9206
91
+ je_editor/pyside_ui/main_ui/menu/python_env_menu/build_venv_menu.py,sha256=sEzDechqr7TFLTgxnDR0vNpuLjA10VRcLVadu5HSdl0,12381
92
92
  je_editor/pyside_ui/main_ui/menu/run_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
93
- je_editor/pyside_ui/main_ui/menu/run_menu/build_run_menu.py,sha256=r1jl9FYHttRK6D09YItjVI6qsz46TA-OCV03TYOI4W8,5269
93
+ je_editor/pyside_ui/main_ui/menu/run_menu/build_run_menu.py,sha256=rWNairTwafl2mwS0ihmQGaLc9PKacD4v_NuSRkOLu-s,6591
94
94
  je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
95
- je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/build_debug_menu.py,sha256=eTkByv3TBxYuyxNWYnohWNPo2I4COxglV_GEeTsgNvk,3329
96
- je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/build_program_menu.py,sha256=jfc7l6zYpRdtYdj2f0nydP41hxEkqCXFISLcTn_AU0E,3125
97
- je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/build_shell_menu.py,sha256=KNRNjMyqhaimjOrwuEwtVfGD90xph0VYl25_-kUGllE,2896
98
- je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/utils.py,sha256=zk5adQ7xidJgzaO81kKxc7LI34jCplcocL6vhacHEec,858
95
+ je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/build_debug_menu.py,sha256=cU-or3TTC2EwHCXKxgmcuKi6kFjTGbsuNzewGLhJdSc,5144
96
+ je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/build_program_menu.py,sha256=6PQxGqCq6_OS2zwL8yoVjEhODc9rd2Kf-XpHl2r2GE8,4873
97
+ je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/build_shell_menu.py,sha256=27r-ZWVxTFOi3NOebZpZNt1YCUVsXOpG5ZCh7-znG8I,4563
98
+ je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/utils.py,sha256=8amFQeDg50jwTmM9gHcWGWjIunuQrvbBByhKyvVwt54,1731
99
99
  je_editor/pyside_ui/main_ui/menu/style_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
100
- je_editor/pyside_ui/main_ui/menu/style_menu/build_style_menu.py,sha256=OjfcjQ7fA1Z1rMwIS9oGkIkC-jy-e0jdGoYo1btTqUQ,1852
100
+ je_editor/pyside_ui/main_ui/menu/style_menu/build_style_menu.py,sha256=h8KBhteZ3HfF8bmh-eUl9P7YUTlOPQH9AcvSp-XBGCc,3229
101
101
  je_editor/pyside_ui/main_ui/menu/tab_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
102
- je_editor/pyside_ui/main_ui/menu/tab_menu/build_tab_menu.py,sha256=O9EGA_3FrIb-wkyeRbCQm4nzEoEebLDsbYcEGsqtR3o,10182
102
+ je_editor/pyside_ui/main_ui/menu/tab_menu/build_tab_menu.py,sha256=HU-a2veddgrAvN9A50KyqDt8U9T3GTCVKHMfPbMyjEo,13152
103
103
  je_editor/pyside_ui/main_ui/menu/text_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
104
- je_editor/pyside_ui/main_ui/menu/text_menu/build_text_menu.py,sha256=k3pOpK4i8ccs3D8VIrNx8g3kUDp1fZdqv9H5uEvNl5c,3558
104
+ je_editor/pyside_ui/main_ui/menu/text_menu/build_text_menu.py,sha256=noN69yMQFlaMOSKRJSuMuJu5jLgKQ3zsdNxwv9tb3VU,5863
105
105
  je_editor/pyside_ui/main_ui/save_settings/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
106
- je_editor/pyside_ui/main_ui/save_settings/setting_utils.py,sha256=p1gY71j_PgSdlibA0uOm1eIKvOlIH_jNIJ-At0x3iMU,600
107
- je_editor/pyside_ui/main_ui/save_settings/user_color_setting_file.py,sha256=o0BZRHPMUEtoXaf0ihfOEzt3doLwgSmU3gQx51cCWAg,3145
108
- je_editor/pyside_ui/main_ui/save_settings/user_setting_file.py,sha256=XkHC2BABD6xLIx7gFTy6NzjqYXFMImSngwqp9GxELdc,1034
106
+ je_editor/pyside_ui/main_ui/save_settings/setting_utils.py,sha256=ULAQTkRmeQI4f1VTqAw3RrBlt-iNKXlAxD8rtj4pPnY,1370
107
+ je_editor/pyside_ui/main_ui/save_settings/user_color_setting_file.py,sha256=Tmw-kN8XnimWAqsRPGcb8ikncTszAodPKuQDRXdf2IE,4471
108
+ je_editor/pyside_ui/main_ui/save_settings/user_setting_file.py,sha256=9mMRiPwHbeUAlmC_p8crjCQWlBul3gRDgFcgOaaBCN4,2519
109
109
  je_editor/pyside_ui/main_ui/system_tray/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
110
- je_editor/pyside_ui/main_ui/system_tray/extend_system_tray.py,sha256=xrk3TEaWdYyqc2U7po928sHV_tUj5QCdOsZEDKoU3_Y,2259
110
+ je_editor/pyside_ui/main_ui/system_tray/extend_system_tray.py,sha256=ZpZXFZQlOC2OlW68i9CUT9w4SMClj_4KE0mUWupqKDs,3655
111
111
  je_editor/utils/__init__.py,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
112
112
  je_editor/utils/encodings/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
113
- je_editor/utils/encodings/python_encodings.py,sha256=Nn_GsBZcPHcY5djoL2ki5eriKUpCI0ZgZ6XKgnEo1YI,1613
113
+ je_editor/utils/encodings/python_encodings.py,sha256=bo_KFevgfMcxTQ6Q46nz9X_scxDAx5A3G86GLmSaGXY,6789
114
114
  je_editor/utils/exception/__init__.py,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
115
115
  je_editor/utils/exception/exception_tags.py,sha256=KjkbbqrtIuNn07657AOVEpX0RZlOpTUFxKPiHld3xgM,1104
116
116
  je_editor/utils/exception/exceptions.py,sha256=4e2ivqFWgBq4L_8QgRjd79xdOAgR_tyW_hpBlQeePpw,506
117
117
  je_editor/utils/file/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
118
118
  je_editor/utils/file/open/__init__.py,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
119
- je_editor/utils/file/open/open_file.py,sha256=zaqj0g87AbczCTNnVW9xPsQ2Da9pTsUwO75WIp08IPg,1211
119
+ je_editor/utils/file/open/open_file.py,sha256=MDDNQAIvM_Z-YdaisaLjr1o1HMPV0RHJC145JVy40fo,2473
120
120
  je_editor/utils/file/save/__init__.py,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
121
- je_editor/utils/file/save/save_file.py,sha256=j_WpSXz2M0XweuruiC332-ZXpqgPiYlZULOnEiwuUOM,998
121
+ je_editor/utils/file/save/save_file.py,sha256=msAHjnguRlWvqfWrnrzPqiPwtl5CW2JdgyRI4fwQnNg,2299
122
122
  je_editor/utils/json/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
123
- je_editor/utils/json/json_file.py,sha256=zTzQp-VFlaXg7puxC3EgEECURuuDmfJ8I9emX0EZyfw,1699
123
+ je_editor/utils/json/json_file.py,sha256=vID8JsBCTNJbCdjWeufgqokPIkKxtKca6z-zl_rY0-s,2925
124
124
  je_editor/utils/json_format/__init__.py,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
125
- je_editor/utils/json_format/json_process.py,sha256=tszo48OnVivVkuuPrl-FtGaaq-1YOJLKT2o2A3qQi3M,1250
125
+ je_editor/utils/json_format/json_process.py,sha256=a_zVIyzEFU5KJ9ZJVnYGnWApv--9gFp-sSJ4R-vrmG0,2940
126
126
  je_editor/utils/logging/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
127
- je_editor/utils/logging/loggin_instance.py,sha256=5MUuLesU_WpR_Iu1uoAATi5Bj2yMYkimZrMfiXbk5pI,881
127
+ je_editor/utils/logging/loggin_instance.py,sha256=tEz2_gogBJwrRpew6-dLeMuQVnNiq0o0bttTR0CmKd0,2466
128
128
  je_editor/utils/multi_language/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
129
129
  je_editor/utils/multi_language/english.py,sha256=r1GSpQZNGoeqgvOvaz1r9rJgEMGLjHIIyn7UHiKILBg,10047
130
- je_editor/utils/multi_language/multi_language_wrapper.py,sha256=_MtYrE51poQ1p_iWvT2eg_604uj6IsiBgGpifWpYLGc,1050
130
+ je_editor/utils/multi_language/multi_language_wrapper.py,sha256=EmXDzpzhE75t8aL_N_pihJ_55aJ9ha2jWGe0VGLxvyw,2063
131
131
  je_editor/utils/multi_language/traditional_chinese.py,sha256=JS47iDkVgPQBQi-13Zr32joN8rnz22HBR79vaiEz8W4,10102
132
132
  je_editor/utils/redirect_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
133
- je_editor/utils/redirect_manager/redirect_manager_class.py,sha256=1gICetKpohBvmxmVhnqeCRq7AQS2YWK4AURmrqnVYVw,2277
133
+ je_editor/utils/redirect_manager/redirect_manager_class.py,sha256=UxyYjfJ_VYpCHomDLREIXPIu9-N6GWhUcnOUc2BcUAs,3867
134
134
  je_editor/utils/venv_check/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
135
- je_editor/utils/venv_check/check_venv.py,sha256=oCrMdue4NYUUGrVifh_iHFwIgxVx9azYN4jz3Xiulgg,999
136
- je_editor-0.0.222.dist-info/licenses/LICENSE,sha256=KMhUHh6pnIUvmXDW-49L_Sz63bqkOlPDqsecaqKiitU,1091
137
- je_editor-0.0.222.dist-info/METADATA,sha256=6FccWz2MH7kpbQpNXxZk8Jj4tWL-QlMU9VqAOqpZDtU,3487
138
- je_editor-0.0.222.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
139
- je_editor-0.0.222.dist-info/top_level.txt,sha256=_9YA7BgxpkmdLs-5V_UQILxClcMRgPyG1a3qaE-Bkcs,10
140
- je_editor-0.0.222.dist-info/RECORD,,
135
+ je_editor/utils/venv_check/check_venv.py,sha256=3cqr7pR4daG3xwYF8Y7g8saASAU9SFPESvwwdjXnj5w,2438
136
+ je_editor-0.0.224.dist-info/licenses/LICENSE,sha256=KMhUHh6pnIUvmXDW-49L_Sz63bqkOlPDqsecaqKiitU,1091
137
+ je_editor-0.0.224.dist-info/METADATA,sha256=yDxOd8E9PpaD1coYYaQcc_zugRnh-7GoWQD2-8z4-5U,3487
138
+ je_editor-0.0.224.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
139
+ je_editor-0.0.224.dist-info/top_level.txt,sha256=_9YA7BgxpkmdLs-5V_UQILxClcMRgPyG1a3qaE-Bkcs,10
140
+ je_editor-0.0.224.dist-info/RECORD,,
@@ -1,81 +0,0 @@
1
- import datetime
2
- import traceback
3
-
4
- from git import Repo, GitCommandError, InvalidGitRepositoryError, NoSuchPathError
5
-
6
-
7
- class GitCloneHandler:
8
- """
9
- Handles cloning of remote Git repositories with audit logging.
10
- 負責複製遠端 Git 儲存庫,並記錄稽核日誌。
11
- 可在 UI 或 CLI 環境中重複使用。
12
- """
13
-
14
- def __init__(self, audit_log_path: str = "git_clone_audit.log"):
15
- """
16
- Initialize the handler with an audit log file path.
17
- 初始化處理器,指定稽核日誌檔案路徑。
18
-
19
- :param audit_log_path: Path to the audit log file
20
- 稽核日誌檔案的路徑
21
- """
22
- self.audit_log_path = audit_log_path
23
-
24
- def clone_repo(self, remote_url: str, local_path: str) -> str:
25
- """
26
- Clone a remote repository to a local path.
27
- 將遠端 Git 儲存庫複製到本地路徑。
28
-
29
- :param remote_url: The Git repository URL (e.g., https://github.com/user/repo.git)
30
- Git 儲存庫的 URL
31
- :param local_path: The local directory to clone into
32
- 要複製到的本地目錄
33
- :return: The path to the cloned repository
34
- 複製完成後的本地路徑
35
- :raises: RuntimeError if cloning fails
36
- 若複製失敗則拋出 RuntimeError
37
- """
38
- try:
39
- # 記錄開始複製 / Log start of cloning
40
- self._log_audit(f"Cloning started: {remote_url} -> {local_path}")
41
-
42
- # 執行 Git 複製 / Perform Git clone
43
- Repo.clone_from(remote_url, local_path)
44
-
45
- # 記錄完成複製 / Log completion
46
- self._log_audit(f"Cloning completed: {remote_url} -> {local_path}")
47
- return local_path
48
-
49
- except (GitCommandError, InvalidGitRepositoryError, NoSuchPathError) as e:
50
- # 捕捉 Git 相關錯誤 / Catch Git-related errors
51
- self._log_audit(
52
- f"ERROR: Git operation failed: {remote_url} -> {local_path}\n"
53
- f"{str(e)}\nTraceback:\n{traceback.format_exc()}"
54
- )
55
- raise RuntimeError(f"Git operation failed: {str(e)}") from e
56
-
57
- except Exception as e:
58
- # 捕捉其他未預期錯誤 / Catch unexpected errors
59
- self._log_audit(
60
- f"ERROR: Unexpected error during clone: {remote_url} -> {local_path}\n"
61
- f"{str(e)}\nTraceback:\n{traceback.format_exc()}"
62
- )
63
- raise RuntimeError(f"Unexpected error during clone: {str(e)}") from e
64
-
65
- def _log_audit(self, message: str):
66
- """
67
- Append an audit log entry with timestamp.
68
- 在稽核日誌中加入帶有時間戳的紀錄。
69
-
70
- :param message: The message to log
71
- 要記錄的訊息
72
- """
73
- timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
74
- log_entry = f"[{timestamp}] {message}\n"
75
- try:
76
- with open(self.audit_log_path, "a", encoding="utf-8") as f:
77
- f.write(log_entry)
78
- except Exception:
79
- # 確保日誌寫入失敗不會影響主要流程
80
- # Never let audit logging failure break the flow
81
- pass