je-editor 0.0.221__py3-none-any.whl → 0.0.223__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.
- je_editor/__init__.py +2 -2
- je_editor/code_scan/ruff_thread.py +33 -6
- je_editor/code_scan/watchdog_implement.py +42 -20
- je_editor/code_scan/watchdog_thread.py +54 -9
- je_editor/git_client/commit_graph.py +32 -43
- je_editor/git_client/{git.py → git_action.py} +1 -1
- je_editor/git_client/git_cli.py +4 -4
- je_editor/pyside_ui/browser/browser_download_window.py +41 -5
- je_editor/pyside_ui/browser/browser_serach_lineedit.py +25 -1
- je_editor/pyside_ui/browser/browser_view.py +56 -3
- je_editor/pyside_ui/browser/browser_widget.py +52 -22
- je_editor/pyside_ui/browser/main_browser_widget.py +72 -0
- je_editor/pyside_ui/git_ui/code_diff_compare/__init__.py +0 -0
- je_editor/pyside_ui/git_ui/code_diff_compare/code_diff_viewer_widget.py +90 -0
- je_editor/pyside_ui/git_ui/code_diff_compare/line_number_code_viewer.py +141 -0
- je_editor/pyside_ui/git_ui/code_diff_compare/multi_file_diff_viewer.py +88 -0
- je_editor/pyside_ui/git_ui/code_diff_compare/side_by_side_diff_widget.py +271 -0
- je_editor/pyside_ui/git_ui/git_client/__init__.py +0 -0
- je_editor/pyside_ui/git_ui/{git_branch_tree_widget.py → git_client/git_branch_tree_widget.py} +17 -14
- je_editor/pyside_ui/git_ui/git_client/git_client_gui.py +799 -0
- je_editor/pyside_ui/main_ui/ai_widget/langchain_interface.py +1 -1
- je_editor/pyside_ui/main_ui/main_editor.py +5 -8
- je_editor/pyside_ui/main_ui/menu/dock_menu/build_dock_menu.py +17 -17
- je_editor/pyside_ui/main_ui/menu/help_menu/build_help_menu.py +2 -2
- je_editor/pyside_ui/main_ui/menu/tab_menu/build_tab_menu.py +21 -21
- je_editor/utils/multi_language/english.py +2 -1
- je_editor/utils/multi_language/traditional_chinese.py +2 -2
- {je_editor-0.0.221.dist-info → je_editor-0.0.223.dist-info}/METADATA +3 -3
- {je_editor-0.0.221.dist-info → je_editor-0.0.223.dist-info}/RECORD +34 -28
- je_editor/git_client/github.py +0 -50
- je_editor/pyside_ui/git_ui/git_client_gui.py +0 -291
- /je_editor/pyside_ui/git_ui/{commit_table.py → git_client/commit_table.py} +0 -0
- /je_editor/pyside_ui/git_ui/{graph_view.py → git_client/graph_view.py} +0 -0
- {je_editor-0.0.221.dist-info → je_editor-0.0.223.dist-info}/WHEEL +0 -0
- {je_editor-0.0.221.dist-info → je_editor-0.0.223.dist-info}/licenses/LICENSE +0 -0
- {je_editor-0.0.221.dist-info → je_editor-0.0.223.dist-info}/top_level.txt +0 -0
|
@@ -5,7 +5,7 @@ import re
|
|
|
5
5
|
from typing import Union, TYPE_CHECKING
|
|
6
6
|
|
|
7
7
|
from PySide6.QtWidgets import QMessageBox
|
|
8
|
-
from
|
|
8
|
+
from langchain_core.prompts.chat import SystemMessagePromptTemplate
|
|
9
9
|
from langchain_openai import ChatOpenAI
|
|
10
10
|
from pydantic import SecretStr
|
|
11
11
|
|
|
@@ -8,10 +8,10 @@ import jedi.settings
|
|
|
8
8
|
from PySide6.QtCore import QTimer, QEvent
|
|
9
9
|
from PySide6.QtGui import QFontDatabase, QIcon, Qt, QTextCharFormat
|
|
10
10
|
from PySide6.QtWidgets import QMainWindow, QWidget, QTabWidget
|
|
11
|
-
from frontengine import FrontEngineMainUI
|
|
12
11
|
from qt_material import QtStyleTools
|
|
13
12
|
|
|
14
13
|
from je_editor.pyside_ui.browser.browser_widget import BrowserWidget
|
|
14
|
+
from je_editor.pyside_ui.browser.main_browser_widget import MainBrowserWidget
|
|
15
15
|
from je_editor.pyside_ui.code.auto_save.auto_save_manager import init_new_auto_save_thread, file_is_open_manager_dict
|
|
16
16
|
from je_editor.pyside_ui.main_ui.editor.editor_widget import EditorWidget
|
|
17
17
|
from je_editor.pyside_ui.main_ui.menu.set_menu_bar import set_menu_bar
|
|
@@ -104,14 +104,11 @@ class EditorMain(QMainWindow, QtStyleTools):
|
|
|
104
104
|
self.redirect_timer.timeout.connect(self.redirect)
|
|
105
105
|
self.redirect_timer.start()
|
|
106
106
|
# TAB Add
|
|
107
|
+
main_browser_widget = MainBrowserWidget()
|
|
107
108
|
self.tab_widget.addTab(EditorWidget(self), language_wrapper.language_word_dict.get("tab_name_editor"))
|
|
108
|
-
self.tab_widget.addTab(
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
self.tab_widget.addTab(BrowserWidget(), language_wrapper.language_word_dict.get("tab_name_web_browser"))
|
|
112
|
-
self.tab_widget.addTab(
|
|
113
|
-
BrowserWidget(start_url="https://stackoverflow.com/", search_prefix="https://stackoverflow.com/search?q="),
|
|
114
|
-
language_wrapper.language_word_dict.get("tab_menu_stackoverflow_tab_name"))
|
|
109
|
+
self.tab_widget.addTab(main_browser_widget, language_wrapper.language_word_dict.get("tab_name_web_browser"))
|
|
110
|
+
main_browser_widget.add_browser_tab(
|
|
111
|
+
BrowserWidget(start_url="https://stackoverflow.com/", search_prefix="https://stackoverflow.com/search?q="))
|
|
115
112
|
|
|
116
113
|
for widget_name, widget in EDITOR_EXTEND_TAB.items():
|
|
117
114
|
self.tab_widget.addTab(widget(), widget_name)
|
|
@@ -8,10 +8,11 @@ from PySide6.QtGui import QAction
|
|
|
8
8
|
from PySide6.QtWidgets import QFileDialog
|
|
9
9
|
from frontengine import FrontEngineMainUI
|
|
10
10
|
|
|
11
|
-
from je_editor.pyside_ui.
|
|
11
|
+
from je_editor.pyside_ui.git_ui.code_diff_compare.code_diff_viewer_widget import DiffViewerWidget
|
|
12
|
+
from je_editor.pyside_ui.browser.main_browser_widget import MainBrowserWidget
|
|
12
13
|
from je_editor.pyside_ui.code.variable_inspector.inspector_gui import VariableInspector
|
|
13
|
-
from je_editor.pyside_ui.git_ui.git_branch_tree_widget import GitTreeViewGUI
|
|
14
|
-
from je_editor.pyside_ui.git_ui.git_client_gui import
|
|
14
|
+
from je_editor.pyside_ui.git_ui.git_client.git_branch_tree_widget import GitTreeViewGUI
|
|
15
|
+
from je_editor.pyside_ui.git_ui.git_client.git_client_gui import GitGui
|
|
15
16
|
from je_editor.pyside_ui.main_ui.ai_widget.chat_ui import ChatUI
|
|
16
17
|
from je_editor.pyside_ui.main_ui.console_widget.console_gui import ConsoleWidget
|
|
17
18
|
from je_editor.pyside_ui.main_ui.dock.destroy_dock import DestroyDock
|
|
@@ -36,13 +37,6 @@ def set_dock_menu(ui_we_want_to_set: EditorMain) -> None:
|
|
|
36
37
|
lambda: add_dock_widget(ui_we_want_to_set)
|
|
37
38
|
)
|
|
38
39
|
ui_we_want_to_set.dock_menu.addAction(ui_we_want_to_set.dock_menu.new_dock_browser_action)
|
|
39
|
-
# Stackoverflow
|
|
40
|
-
ui_we_want_to_set.dock_menu.new_dock_stackoverflow_action = QAction(
|
|
41
|
-
language_wrapper.language_word_dict.get("dock_stackoverflow_label"))
|
|
42
|
-
ui_we_want_to_set.dock_menu.new_dock_stackoverflow_action.triggered.connect(
|
|
43
|
-
lambda: add_dock_widget(ui_we_want_to_set, "stackoverflow")
|
|
44
|
-
)
|
|
45
|
-
ui_we_want_to_set.dock_menu.addAction(ui_we_want_to_set.dock_menu.new_dock_stackoverflow_action)
|
|
46
40
|
# Editor
|
|
47
41
|
ui_we_want_to_set.dock_menu.new_tab_dock_editor_action = QAction(
|
|
48
42
|
language_wrapper.language_word_dict.get("dock_editor_label"))
|
|
@@ -99,6 +93,13 @@ def set_dock_menu(ui_we_want_to_set: EditorMain) -> None:
|
|
|
99
93
|
lambda: add_dock_widget(ui_we_want_to_set, "console_widget")
|
|
100
94
|
)
|
|
101
95
|
ui_we_want_to_set.dock_menu.addAction(ui_we_want_to_set.dock_menu.new_dynamic_console)
|
|
96
|
+
# Code diff viewer
|
|
97
|
+
ui_we_want_to_set.dock_menu.new_code_diff_viewer = QAction(
|
|
98
|
+
language_wrapper.language_word_dict.get("tab_code_diff_viewer_tab_name"))
|
|
99
|
+
ui_we_want_to_set.dock_menu.new_code_diff_viewer.triggered.connect(
|
|
100
|
+
lambda: add_dock_widget(ui_we_want_to_set, "code_diff_viewer")
|
|
101
|
+
)
|
|
102
|
+
ui_we_want_to_set.dock_menu.addAction(ui_we_want_to_set.dock_menu.new_code_diff_viewer)
|
|
102
103
|
|
|
103
104
|
def add_dock_widget(ui_we_want_to_set: EditorMain, widget_type: str = None):
|
|
104
105
|
jeditor_logger.info("build_dock_menu.py add_dock_widget "
|
|
@@ -106,11 +107,7 @@ def add_dock_widget(ui_we_want_to_set: EditorMain, widget_type: str = None):
|
|
|
106
107
|
f"widget_type: {widget_type}")
|
|
107
108
|
# Dock widget
|
|
108
109
|
dock_widget = DestroyDock()
|
|
109
|
-
if widget_type == "
|
|
110
|
-
dock_widget.setWindowTitle("stackoverflow")
|
|
111
|
-
dock_widget.setWidget(BrowserWidget(
|
|
112
|
-
start_url="https://stackoverflow.com/", search_prefix="https://stackoverflow.com/search?q="))
|
|
113
|
-
elif widget_type == "editor":
|
|
110
|
+
if widget_type == "editor":
|
|
114
111
|
file_path = QFileDialog().getOpenFileName(
|
|
115
112
|
parent=ui_we_want_to_set,
|
|
116
113
|
dir=str(Path.cwd())
|
|
@@ -134,7 +131,7 @@ def add_dock_widget(ui_we_want_to_set: EditorMain, widget_type: str = None):
|
|
|
134
131
|
dock_widget.setWidget(ChatUI(ui_we_want_to_set))
|
|
135
132
|
elif widget_type == "git_client":
|
|
136
133
|
dock_widget.setWindowTitle(language_wrapper.language_word_dict.get("tab_menu_git_client_tab_name"))
|
|
137
|
-
dock_widget.setWidget(
|
|
134
|
+
dock_widget.setWidget(GitGui())
|
|
138
135
|
elif widget_type == "git_branch_tree_view":
|
|
139
136
|
dock_widget.setWindowTitle(language_wrapper.language_word_dict.get("tab_menu_git_branch_tree_view_tab_name"))
|
|
140
137
|
dock_widget.setWidget(GitTreeViewGUI())
|
|
@@ -144,8 +141,11 @@ def add_dock_widget(ui_we_want_to_set: EditorMain, widget_type: str = None):
|
|
|
144
141
|
elif widget_type == "console_widget":
|
|
145
142
|
dock_widget.setWindowTitle(language_wrapper.language_word_dict.get("tab_menu_console_widget_tab_name"))
|
|
146
143
|
dock_widget.setWidget(ConsoleWidget())
|
|
144
|
+
elif widget_type == "code_diff_viewer":
|
|
145
|
+
dock_widget.setWindowTitle(language_wrapper.language_word_dict.get("tab_code_diff_viewer_tab_name"))
|
|
146
|
+
dock_widget.setWidget(DiffViewerWidget())
|
|
147
147
|
else:
|
|
148
148
|
dock_widget.setWindowTitle(language_wrapper.language_word_dict.get("dock_browser_title"))
|
|
149
|
-
dock_widget.setWidget(
|
|
149
|
+
dock_widget.setWidget(MainBrowserWidget())
|
|
150
150
|
if dock_widget.widget() is not None:
|
|
151
151
|
ui_we_want_to_set.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, dock_widget)
|
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from typing import TYPE_CHECKING
|
|
4
4
|
|
|
5
|
-
from je_editor.pyside_ui.browser.
|
|
5
|
+
from je_editor.pyside_ui.browser.main_browser_widget import MainBrowserWidget
|
|
6
6
|
from je_editor.utils.logging.loggin_instance import jeditor_logger
|
|
7
7
|
|
|
8
8
|
if TYPE_CHECKING:
|
|
@@ -53,7 +53,7 @@ def open_web_browser(ui_we_want_to_set: EditorMain, url: str, tab_name: str):
|
|
|
53
53
|
f"url: {url} "
|
|
54
54
|
f"tab_name: {tab_name}")
|
|
55
55
|
ui_we_want_to_set.tab_widget.addTab(
|
|
56
|
-
|
|
56
|
+
MainBrowserWidget(start_url=url),
|
|
57
57
|
f"{tab_name}{ui_we_want_to_set.tab_widget.count()}"
|
|
58
58
|
)
|
|
59
59
|
|
|
@@ -4,10 +4,11 @@ from typing import TYPE_CHECKING
|
|
|
4
4
|
|
|
5
5
|
from frontengine import FrontEngineMainUI
|
|
6
6
|
|
|
7
|
-
from je_editor.pyside_ui.
|
|
7
|
+
from je_editor.pyside_ui.git_ui.code_diff_compare.code_diff_viewer_widget import DiffViewerWidget
|
|
8
|
+
from je_editor.pyside_ui.browser.main_browser_widget import MainBrowserWidget
|
|
8
9
|
from je_editor.pyside_ui.code.variable_inspector.inspector_gui import VariableInspector
|
|
9
|
-
from je_editor.pyside_ui.git_ui.git_branch_tree_widget import GitTreeViewGUI
|
|
10
|
-
from je_editor.pyside_ui.git_ui.git_client_gui import
|
|
10
|
+
from je_editor.pyside_ui.git_ui.git_client.git_branch_tree_widget import GitTreeViewGUI
|
|
11
|
+
from je_editor.pyside_ui.git_ui.git_client.git_client_gui import GitGui
|
|
11
12
|
from je_editor.pyside_ui.main_ui.ai_widget.chat_ui import ChatUI
|
|
12
13
|
from je_editor.pyside_ui.main_ui.console_widget.console_gui import ConsoleWidget
|
|
13
14
|
from je_editor.pyside_ui.main_ui.editor.editor_widget import EditorWidget
|
|
@@ -46,13 +47,6 @@ def set_tab_menu(ui_we_want_to_set: EditorMain) -> None:
|
|
|
46
47
|
lambda: add_web_tab(ui_we_want_to_set)
|
|
47
48
|
)
|
|
48
49
|
ui_we_want_to_set.tab_menu.addAction(ui_we_want_to_set.tab_menu.add_web_action)
|
|
49
|
-
# Stackoverflow
|
|
50
|
-
ui_we_want_to_set.tab_menu.add_stackoverflow_action = QAction(
|
|
51
|
-
language_wrapper.language_word_dict.get("tab_menu_add_stackoverflow_label"))
|
|
52
|
-
ui_we_want_to_set.tab_menu.add_stackoverflow_action.triggered.connect(
|
|
53
|
-
lambda: add_stackoverflow_tab(ui_we_want_to_set)
|
|
54
|
-
)
|
|
55
|
-
ui_we_want_to_set.tab_menu.addAction(ui_we_want_to_set.tab_menu.add_stackoverflow_action)
|
|
56
50
|
# IPython
|
|
57
51
|
ui_we_want_to_set.tab_menu.add_ipython_action = QAction(
|
|
58
52
|
language_wrapper.language_word_dict.get("tab_menu_ipython_tab_name"))
|
|
@@ -95,6 +89,13 @@ def set_tab_menu(ui_we_want_to_set: EditorMain) -> None:
|
|
|
95
89
|
lambda: add_console_widget_tab(ui_we_want_to_set)
|
|
96
90
|
)
|
|
97
91
|
ui_we_want_to_set.tab_menu.addAction(ui_we_want_to_set.tab_menu.add_console_widget_ui_action)
|
|
92
|
+
# Code diff viewer
|
|
93
|
+
ui_we_want_to_set.tab_menu.add_code_diff_viewer_ui_action = QAction(
|
|
94
|
+
language_wrapper.language_word_dict.get("tab_code_diff_viewer_tab_name"))
|
|
95
|
+
ui_we_want_to_set.tab_menu.add_code_diff_viewer_ui_action.triggered.connect(
|
|
96
|
+
lambda: add_code_diff_compare_tab(ui_we_want_to_set)
|
|
97
|
+
)
|
|
98
|
+
ui_we_want_to_set.tab_menu.addAction(ui_we_want_to_set.tab_menu.add_code_diff_viewer_ui_action)
|
|
98
99
|
|
|
99
100
|
def add_editor_tab(ui_we_want_to_set: EditorMain):
|
|
100
101
|
jeditor_logger.info(f"build_tab_menu.py add editor tab ui_we_want_to_set: {ui_we_want_to_set}")
|
|
@@ -117,19 +118,11 @@ def add_frontengine_tab(ui_we_want_to_set: EditorMain):
|
|
|
117
118
|
def add_web_tab(ui_we_want_to_set: EditorMain):
|
|
118
119
|
jeditor_logger.info(f"build_tab_menu.py add web tab ui_we_want_to_set: {ui_we_want_to_set}")
|
|
119
120
|
ui_we_want_to_set.tab_widget.addTab(
|
|
120
|
-
|
|
121
|
+
MainBrowserWidget(),
|
|
121
122
|
f"{language_wrapper.language_word_dict.get('tab_menu_web_tab_name')} "
|
|
122
123
|
f"{ui_we_want_to_set.tab_widget.count()}")
|
|
123
124
|
|
|
124
125
|
|
|
125
|
-
def add_stackoverflow_tab(ui_we_want_to_set: EditorMain):
|
|
126
|
-
jeditor_logger.info(f"build_tab_menu.py add stackoverflow tab ui_we_want_to_set: {ui_we_want_to_set}")
|
|
127
|
-
ui_we_want_to_set.tab_widget.addTab(
|
|
128
|
-
BrowserWidget(start_url="https://stackoverflow.com/", search_prefix="https://stackoverflow.com/search?q="),
|
|
129
|
-
f"{language_wrapper.language_word_dict.get('tab_menu_stackoverflow_tab_name')} "
|
|
130
|
-
f"{ui_we_want_to_set.tab_widget.count()}")
|
|
131
|
-
|
|
132
|
-
|
|
133
126
|
def add_ipython_tab(ui_we_want_to_set: EditorMain):
|
|
134
127
|
jeditor_logger.info(f"build_tab_menu.py add ipython tab ui_we_want_to_set: {ui_we_want_to_set}")
|
|
135
128
|
ui_we_want_to_set.tab_widget.addTab(
|
|
@@ -149,7 +142,7 @@ def add_chat_ui_tab(ui_we_want_to_set: EditorMain):
|
|
|
149
142
|
def add_git_client_tab(ui_we_want_to_set: EditorMain):
|
|
150
143
|
jeditor_logger.info(f"build_tab_menu.py add git client tab ui_we_want_to_set: {ui_we_want_to_set}")
|
|
151
144
|
ui_we_want_to_set.tab_widget.addTab(
|
|
152
|
-
|
|
145
|
+
GitGui(),
|
|
153
146
|
f"{language_wrapper.language_word_dict.get('tab_menu_git_client_tab_name')} "
|
|
154
147
|
f"{ui_we_want_to_set.tab_widget.count()}")
|
|
155
148
|
|
|
@@ -173,4 +166,11 @@ def add_console_widget_tab(ui_we_want_to_set: EditorMain):
|
|
|
173
166
|
ui_we_want_to_set.tab_widget.addTab(
|
|
174
167
|
ConsoleWidget(),
|
|
175
168
|
f"{language_wrapper.language_word_dict.get('tab_menu_console_widget_tab_name')} "
|
|
176
|
-
f"{ui_we_want_to_set.tab_widget.count()}")
|
|
169
|
+
f"{ui_we_want_to_set.tab_widget.count()}")
|
|
170
|
+
|
|
171
|
+
def add_code_diff_compare_tab(ui_we_want_to_set: EditorMain):
|
|
172
|
+
jeditor_logger.info(f"build_tab_menu.py add code diff compare tab ui_we_want_to_set: {ui_we_want_to_set}")
|
|
173
|
+
ui_we_want_to_set.tab_widget.addTab(
|
|
174
|
+
DiffViewerWidget(),
|
|
175
|
+
f"{language_wrapper.language_word_dict.get('tab_code_diff_viewer_tab_name')} "
|
|
176
|
+
f"{ui_we_want_to_set.tab_widget.count()}")
|
|
@@ -114,6 +114,7 @@ please make sure that the current encoding is consistent with the default encodi
|
|
|
114
114
|
"tab_menu_git_branch_tree_view_tab_name": "Git BranchTreeViewer",
|
|
115
115
|
"tab_menu_variable_inspector_tab_name": "Variable Inspector",
|
|
116
116
|
"tab_menu_console_widget_tab_name": "Console Widget",
|
|
117
|
+
"tab_code_diff_viewer_tab_name": "Code Diff Viewer",
|
|
117
118
|
# Text Menu
|
|
118
119
|
"text_menu_label": "Text",
|
|
119
120
|
"text_menu_label_font": "Font",
|
|
@@ -216,5 +217,5 @@ please make sure that the current encoding is consistent with the default encodi
|
|
|
216
217
|
"dynamic_console_process_running": "Process is running; stop it first",
|
|
217
218
|
"dynamic_console_done": "[done] exit={code}, status={status}",
|
|
218
219
|
"dynamic_console_system_prefix": "[system] ",
|
|
219
|
-
|
|
220
|
+
# Code diff viewer
|
|
220
221
|
}
|
|
@@ -104,10 +104,11 @@ traditional_chinese_word_dict = {
|
|
|
104
104
|
"tab_menu_stackoverflow_tab_name": "Stackoverflow",
|
|
105
105
|
"tab_menu_ipython_tab_name": "IPython(Jupyter)",
|
|
106
106
|
"tab_menu_chat_ui_tab_name": "ChatUI",
|
|
107
|
-
"tab_menu_git_client_tab_name": "Git
|
|
107
|
+
"tab_menu_git_client_tab_name": "Git History",
|
|
108
108
|
"tab_menu_git_branch_tree_view_tab_name": "Git BranchTreeViewer",
|
|
109
109
|
"tab_menu_variable_inspector_tab_name": "Variable Inspector",
|
|
110
110
|
"tab_menu_console_widget_tab_name": "ConsoleWidget",
|
|
111
|
+
"tab_code_diff_viewer_tab_name": "Code Diff Viewer",
|
|
111
112
|
# Text Menu
|
|
112
113
|
"text_menu_label": "文字",
|
|
113
114
|
"text_menu_label_font": "字體",
|
|
@@ -210,5 +211,4 @@ traditional_chinese_word_dict = {
|
|
|
210
211
|
"dynamic_console_process_running": "程序正在執行;請先停止",
|
|
211
212
|
"dynamic_console_done": "[完成] 退出碼={code}, 狀態={status}",
|
|
212
213
|
"dynamic_console_system_prefix": "[系統] ",
|
|
213
|
-
|
|
214
214
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: je_editor
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.223
|
|
4
4
|
Summary: JEditor is basic but powerful editor include GPT
|
|
5
5
|
Author-email: JE-Chen <jechenmailman@gmail.com>
|
|
6
6
|
Project-URL: Homepage, https://github.com/JE-Chen/je_editor
|
|
@@ -23,8 +23,8 @@ Requires-Dist: frontengine
|
|
|
23
23
|
Requires-Dist: pycodestyle
|
|
24
24
|
Requires-Dist: jedi
|
|
25
25
|
Requires-Dist: qtconsole
|
|
26
|
-
Requires-Dist: langchain_openai
|
|
27
|
-
Requires-Dist: langchain
|
|
26
|
+
Requires-Dist: langchain_openai==1.0.0
|
|
27
|
+
Requires-Dist: langchain==1.0.0
|
|
28
28
|
Requires-Dist: pydantic
|
|
29
29
|
Requires-Dist: watchdog
|
|
30
30
|
Requires-Dist: ruff
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
je_editor/__init__.py,sha256=
|
|
1
|
+
je_editor/__init__.py,sha256=yIUH6MZZUrVYKo0emfnHmq4hzjTu1NygO2lbIpmYkao,2418
|
|
2
2
|
je_editor/__main__.py,sha256=2ymm4ESRcqP4K1YQyeaDbGhuK-0C1IausIiEOpbm6Ds,570
|
|
3
3
|
je_editor/start_editor.py,sha256=hW7JFOjBkcW7hdC7q-9JsaVTeSNCep1GsqxLmbMU4wg,543
|
|
4
4
|
je_editor/code_scan/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
-
je_editor/code_scan/ruff_thread.py,sha256=
|
|
6
|
-
je_editor/code_scan/watchdog_implement.py,sha256=
|
|
7
|
-
je_editor/code_scan/watchdog_thread.py,sha256=
|
|
5
|
+
je_editor/code_scan/ruff_thread.py,sha256=DNM4cEZt5PBqIDtyy5GXq9BFwLhSuLu8FFBxn3_9xRE,1983
|
|
6
|
+
je_editor/code_scan/watchdog_implement.py,sha256=tjkA_9_bHEzGdTm_O1IPSwCka9ELMR4cI_nBKEHHV34,2114
|
|
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=
|
|
10
|
-
je_editor/git_client/
|
|
11
|
-
je_editor/git_client/git_cli.py,sha256=
|
|
12
|
-
je_editor/git_client/github.py,sha256=7ipQwkTS2ovjTe66kOyxlJth6HlEpqEZJ21PlKpKDw0,2124
|
|
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
|
|
11
|
+
je_editor/git_client/git_cli.py,sha256=Ad-OdPyOQvAvUHeXWVwvHPCi7xo6o3ljKMTlUzOW53Q,2096
|
|
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
|
-
je_editor/pyside_ui/browser/browser_download_window.py,sha256=
|
|
16
|
-
je_editor/pyside_ui/browser/browser_serach_lineedit.py,sha256=
|
|
17
|
-
je_editor/pyside_ui/browser/browser_view.py,sha256=
|
|
18
|
-
je_editor/pyside_ui/browser/browser_widget.py,sha256=
|
|
14
|
+
je_editor/pyside_ui/browser/browser_download_window.py,sha256=cCOj1WeglNIbabJZdXL0eXWE6bZT-U9huZGFbSSKXgw,3397
|
|
15
|
+
je_editor/pyside_ui/browser/browser_serach_lineedit.py,sha256=78Wa1X9LWoJW_ppCVTOmD51rJzjOElJGkdPkk4VBkBY,1875
|
|
16
|
+
je_editor/pyside_ui/browser/browser_view.py,sha256=UgzOyHBx8egGO7Pt4Ch18Hie9IrFtMFBvax2tItWJq0,3122
|
|
17
|
+
je_editor/pyside_ui/browser/browser_widget.py,sha256=YrNF918BUt2PlraeUqzhp1cyc9QCaqHv6lo5GmhmEZA,4123
|
|
18
|
+
je_editor/pyside_ui/browser/main_browser_widget.py,sha256=Ib5buoyDUQn0VIXfBPB8xN29QdDUDnLaWPF-WUMw0kY,2955
|
|
19
19
|
je_editor/pyside_ui/code/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
20
|
je_editor/pyside_ui/code/running_process_manager.py,sha256=VdfdprPNlPmMySOKDOjEEl5X9IsJVPSDb0a2KDKgiQg,1008
|
|
21
21
|
je_editor/pyside_ui/code/auto_save/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -47,17 +47,23 @@ je_editor/pyside_ui/dialog/search_ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeu
|
|
|
47
47
|
je_editor/pyside_ui/dialog/search_ui/search_error_box.py,sha256=jSa423cQW_xQ2WAj46CCWPsCP0Gy7g-UDe5o8LQyKQk,1190
|
|
48
48
|
je_editor/pyside_ui/dialog/search_ui/search_text_box.py,sha256=ul-98FVByq_TNkkLZcBSF4VSwIQNBBj-4e6jYlh6YEA,1229
|
|
49
49
|
je_editor/pyside_ui/git_ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
50
|
-
je_editor/pyside_ui/git_ui/
|
|
51
|
-
je_editor/pyside_ui/git_ui/
|
|
52
|
-
je_editor/pyside_ui/git_ui/
|
|
53
|
-
je_editor/pyside_ui/git_ui/
|
|
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
|
|
52
|
+
je_editor/pyside_ui/git_ui/code_diff_compare/line_number_code_viewer.py,sha256=VFC98ERf-Wj78MTD0bwAXOKtFRTjcdkndA-SiuiTI0g,5638
|
|
53
|
+
je_editor/pyside_ui/git_ui/code_diff_compare/multi_file_diff_viewer.py,sha256=Y8Z0MUBkxWjV6dnvMnmopDFCmxmUX49cAmX3DHgs-50,3195
|
|
54
|
+
je_editor/pyside_ui/git_ui/code_diff_compare/side_by_side_diff_widget.py,sha256=v07KV3V4C6vBLqyoJg4YuFWStx_cVH31jaeniH9V2lw,11100
|
|
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=oMJl2TKz_C-JxrbKiq7S_7wl_e01EKfEVXPq-qNwWU8,34230
|
|
59
|
+
je_editor/pyside_ui/git_ui/git_client/graph_view.py,sha256=0qLxZMzRZMpDFACiUlv0EyyVkAZiYFlU7d2jE5NuVIE,6045
|
|
54
60
|
je_editor/pyside_ui/main_ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
55
|
-
je_editor/pyside_ui/main_ui/main_editor.py,sha256
|
|
61
|
+
je_editor/pyside_ui/main_ui/main_editor.py,sha256=ZGOiqKwa5qolDFXUTczItUYC6GUEvJiCT4gC0wFEdes,11354
|
|
56
62
|
je_editor/pyside_ui/main_ui/ai_widget/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
57
63
|
je_editor/pyside_ui/main_ui/ai_widget/ai_config.py,sha256=Uc9UkrIeALqjmZCF5ukXtSgU1EB4xa5223gk3CfYXX4,459
|
|
58
64
|
je_editor/pyside_ui/main_ui/ai_widget/ask_thread.py,sha256=ma5Cnwlr0RbU-sytmodcYabWueyGE8DKKISZ_0zf3Eo,571
|
|
59
65
|
je_editor/pyside_ui/main_ui/ai_widget/chat_ui.py,sha256=yBoWXvGvgUCWjmPoBcOhj0mtOm0R42mYEs7FokYQmnE,6763
|
|
60
|
-
je_editor/pyside_ui/main_ui/ai_widget/langchain_interface.py,sha256=
|
|
66
|
+
je_editor/pyside_ui/main_ui/ai_widget/langchain_interface.py,sha256=_jykolLkwrGXL1Y_Scyf6Y9560rb9blGwDlpflRm9RI,1773
|
|
61
67
|
je_editor/pyside_ui/main_ui/console_widget/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
62
68
|
je_editor/pyside_ui/main_ui/console_widget/console_gui.py,sha256=3H0Ocj9oDtgAoH7mT2YjDsSeFW3FphsstJqtIesS4yA,5572
|
|
63
69
|
je_editor/pyside_ui/main_ui/console_widget/qprocess_adapter.py,sha256=UIyIoCEyt6hMxc2oLH68ioERFyuPDnPub05_Yi_-rGs,2304
|
|
@@ -74,11 +80,11 @@ je_editor/pyside_ui/main_ui/menu/set_menu_bar.py,sha256=I12DXLyRO4cKe17fQY-QDazK
|
|
|
74
80
|
je_editor/pyside_ui/main_ui/menu/check_style_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
75
81
|
je_editor/pyside_ui/main_ui/menu/check_style_menu/build_check_style_menu.py,sha256=1wD6FI21Dw3IcQONuTkHP9rUPGwY70OvCtSc-ZcTKMk,3793
|
|
76
82
|
je_editor/pyside_ui/main_ui/menu/dock_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
77
|
-
je_editor/pyside_ui/main_ui/menu/dock_menu/build_dock_menu.py,sha256=
|
|
83
|
+
je_editor/pyside_ui/main_ui/menu/dock_menu/build_dock_menu.py,sha256=2G9KaqjC9WwGE6ZkVBtuDFqcfnGBlqr_DYnvJw1hjZU,8478
|
|
78
84
|
je_editor/pyside_ui/main_ui/menu/file_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
79
85
|
je_editor/pyside_ui/main_ui/menu/file_menu/build_file_menu.py,sha256=YT6kvXShRbfM4Qo51VveO_IK8uDqlNrGwHZUiM6_Tes,6881
|
|
80
86
|
je_editor/pyside_ui/main_ui/menu/help_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
81
|
-
je_editor/pyside_ui/main_ui/menu/help_menu/build_help_menu.py,sha256=
|
|
87
|
+
je_editor/pyside_ui/main_ui/menu/help_menu/build_help_menu.py,sha256=KjMDwPNxpiOGlHoiJ_XPkYbCtm7LuNUTso_rwM5fIY0,2882
|
|
82
88
|
je_editor/pyside_ui/main_ui/menu/language_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
83
89
|
je_editor/pyside_ui/main_ui/menu/language_menu/build_language_server.py,sha256=23jKdAYxN65xJMVd5NbCwhIjwh2kfXVDszN1wmIs1A0,2333
|
|
84
90
|
je_editor/pyside_ui/main_ui/menu/python_env_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -93,7 +99,7 @@ je_editor/pyside_ui/main_ui/menu/run_menu/under_run_menu/utils.py,sha256=zk5adQ7
|
|
|
93
99
|
je_editor/pyside_ui/main_ui/menu/style_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
94
100
|
je_editor/pyside_ui/main_ui/menu/style_menu/build_style_menu.py,sha256=OjfcjQ7fA1Z1rMwIS9oGkIkC-jy-e0jdGoYo1btTqUQ,1852
|
|
95
101
|
je_editor/pyside_ui/main_ui/menu/tab_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
96
|
-
je_editor/pyside_ui/main_ui/menu/tab_menu/build_tab_menu.py,sha256=
|
|
102
|
+
je_editor/pyside_ui/main_ui/menu/tab_menu/build_tab_menu.py,sha256=gUua9jFTGbfW6tN9Jd_TQluSObaXJC75YfEcqY-I0q8,9312
|
|
97
103
|
je_editor/pyside_ui/main_ui/menu/text_menu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
98
104
|
je_editor/pyside_ui/main_ui/menu/text_menu/build_text_menu.py,sha256=k3pOpK4i8ccs3D8VIrNx8g3kUDp1fZdqv9H5uEvNl5c,3558
|
|
99
105
|
je_editor/pyside_ui/main_ui/save_settings/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -120,15 +126,15 @@ je_editor/utils/json_format/json_process.py,sha256=tszo48OnVivVkuuPrl-FtGaaq-1YO
|
|
|
120
126
|
je_editor/utils/logging/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
121
127
|
je_editor/utils/logging/loggin_instance.py,sha256=5MUuLesU_WpR_Iu1uoAATi5Bj2yMYkimZrMfiXbk5pI,881
|
|
122
128
|
je_editor/utils/multi_language/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
123
|
-
je_editor/utils/multi_language/english.py,sha256=
|
|
129
|
+
je_editor/utils/multi_language/english.py,sha256=r1GSpQZNGoeqgvOvaz1r9rJgEMGLjHIIyn7UHiKILBg,10047
|
|
124
130
|
je_editor/utils/multi_language/multi_language_wrapper.py,sha256=_MtYrE51poQ1p_iWvT2eg_604uj6IsiBgGpifWpYLGc,1050
|
|
125
|
-
je_editor/utils/multi_language/traditional_chinese.py,sha256=
|
|
131
|
+
je_editor/utils/multi_language/traditional_chinese.py,sha256=JS47iDkVgPQBQi-13Zr32joN8rnz22HBR79vaiEz8W4,10102
|
|
126
132
|
je_editor/utils/redirect_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
127
133
|
je_editor/utils/redirect_manager/redirect_manager_class.py,sha256=1gICetKpohBvmxmVhnqeCRq7AQS2YWK4AURmrqnVYVw,2277
|
|
128
134
|
je_editor/utils/venv_check/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
129
135
|
je_editor/utils/venv_check/check_venv.py,sha256=oCrMdue4NYUUGrVifh_iHFwIgxVx9azYN4jz3Xiulgg,999
|
|
130
|
-
je_editor-0.0.
|
|
131
|
-
je_editor-0.0.
|
|
132
|
-
je_editor-0.0.
|
|
133
|
-
je_editor-0.0.
|
|
134
|
-
je_editor-0.0.
|
|
136
|
+
je_editor-0.0.223.dist-info/licenses/LICENSE,sha256=KMhUHh6pnIUvmXDW-49L_Sz63bqkOlPDqsecaqKiitU,1091
|
|
137
|
+
je_editor-0.0.223.dist-info/METADATA,sha256=tEHTB17ubfoQ13yiiKadUPfiuztKPQGQkWVcdOuSHhg,3487
|
|
138
|
+
je_editor-0.0.223.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
139
|
+
je_editor-0.0.223.dist-info/top_level.txt,sha256=_9YA7BgxpkmdLs-5V_UQILxClcMRgPyG1a3qaE-Bkcs,10
|
|
140
|
+
je_editor-0.0.223.dist-info/RECORD,,
|
je_editor/git_client/github.py
DELETED
|
@@ -1,50 +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
|
-
Can be reused in UI or CLI contexts.
|
|
11
|
-
"""
|
|
12
|
-
|
|
13
|
-
def __init__(self, audit_log_path: str = "git_clone_audit.log"):
|
|
14
|
-
self.audit_log_path = audit_log_path
|
|
15
|
-
|
|
16
|
-
def clone_repo(self, remote_url: str, local_path: str) -> str:
|
|
17
|
-
"""
|
|
18
|
-
Clone a remote repository to a local path.
|
|
19
|
-
|
|
20
|
-
:param remote_url: The Git repository URL (e.g., https://github.com/user/repo.git)
|
|
21
|
-
:param local_path: The local directory to clone into
|
|
22
|
-
:return: The path to the cloned repository
|
|
23
|
-
:raises: Exception if cloning fails
|
|
24
|
-
"""
|
|
25
|
-
try:
|
|
26
|
-
self._log_audit(f"Cloning started: {remote_url} -> {local_path}")
|
|
27
|
-
Repo.clone_from(remote_url, local_path)
|
|
28
|
-
self._log_audit(f"Cloning completed: {remote_url} -> {local_path}")
|
|
29
|
-
return local_path
|
|
30
|
-
except (GitCommandError, InvalidGitRepositoryError, NoSuchPathError) as e:
|
|
31
|
-
self._log_audit(
|
|
32
|
-
f"ERROR: Git operation failed: {remote_url} -> {local_path}\n{str(e)}\nTraceback:\n{traceback.format_exc()}")
|
|
33
|
-
raise RuntimeError(f"Git operation failed: {str(e)}") from e
|
|
34
|
-
except Exception as e:
|
|
35
|
-
self._log_audit(
|
|
36
|
-
f"ERROR: Unexpected error during clone: {remote_url} -> {local_path}\n{str(e)}\nTraceback:\n{traceback.format_exc()}")
|
|
37
|
-
raise RuntimeError(f"Unexpected error during clone: {str(e)}") from e
|
|
38
|
-
|
|
39
|
-
def _log_audit(self, message: str):
|
|
40
|
-
"""
|
|
41
|
-
Append an audit log entry with timestamp.
|
|
42
|
-
"""
|
|
43
|
-
timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
44
|
-
log_entry = f"[{timestamp}] {message}\n"
|
|
45
|
-
try:
|
|
46
|
-
with open(self.audit_log_path, "a", encoding="utf-8") as f:
|
|
47
|
-
f.write(log_entry)
|
|
48
|
-
except Exception:
|
|
49
|
-
# Never let audit logging failure break the flow
|
|
50
|
-
pass
|