|
import shutil
|
|
import gradio as gr
|
|
from mysite.libs.utilities import chat_with_interpreter, completion, process_file
|
|
from interpreter import interpreter
|
|
import mysite.interpreter.interpreter_config
|
|
import importlib
|
|
import os
|
|
import pkgutil
|
|
import async_timeout
|
|
import asyncio
|
|
|
|
|
|
def list_files_in_directory(directory):
|
|
tree = []
|
|
for root, dirs, files in os.walk(directory):
|
|
path = root.split(os.sep)
|
|
for dir_name in dirs:
|
|
tree.append((os.path.join(root, dir_name), '/'.join(path + [dir_name])))
|
|
for file_name in files:
|
|
tree.append((os.path.join(root, file_name), '/'.join(path + [file_name])))
|
|
return tree
|
|
|
|
def read_file(file_path):
|
|
try:
|
|
with open(file_path, 'r', encoding='utf-8') as file:
|
|
return file.read()
|
|
except UnicodeDecodeError:
|
|
with open(file_path, 'rb') as file:
|
|
content = file.read()
|
|
try:
|
|
return content.decode('utf-8')
|
|
except UnicodeDecodeError:
|
|
try:
|
|
return content.decode('latin-1')
|
|
except UnicodeDecodeError:
|
|
return "Cannot decode file content with utf-8 or latin-1 encoding."
|
|
|
|
def save_file(file_path, content):
|
|
with open(file_path, 'w', encoding='utf-8') as file:
|
|
file.write(content)
|
|
return "File saved successfully"
|
|
|
|
def on_file_select(selected_file):
|
|
if os.path.isfile(selected_file):
|
|
return read_file(selected_file)
|
|
return ""
|
|
|
|
def build_interface(base_directory):
|
|
file_list = list_files_in_directory(base_directory)
|
|
file_display = [f[1] for f in file_list]
|
|
file_paths = {f[1]: f[0] for f in file_list}
|
|
|
|
with gr.Blocks() as demo:
|
|
gr.Markdown("## File Explorer and Editor")
|
|
|
|
file_dropdown = gr.Dropdown(label="Select a file or folder", choices=file_display)
|
|
file_editor = gr.Textbox(label="File Editor", lines=20)
|
|
save_button = gr.Button("Save File")
|
|
|
|
def update_editor(selected_display):
|
|
selected_file = file_paths.get(selected_display, "")
|
|
return on_file_select(selected_file)
|
|
|
|
def on_edit_button_click(selected_display, new_content):
|
|
selected_file = file_paths.get(selected_display, "")
|
|
if os.path.isfile(selected_file):
|
|
return save_file(selected_file, new_content)
|
|
return "File not found"
|
|
|
|
file_dropdown.change(fn=update_editor, inputs=file_dropdown, outputs=file_editor)
|
|
save_button.click(fn=on_edit_button_click, inputs=[file_dropdown, file_editor], outputs=None)
|
|
|
|
return demo
|
|
|
|
|
|
|
|
|
|
base_directory = "/home/user/app/controllers/github"
|
|
gradio_interface = build_interface(base_directory) |