import tkinter as tk from tkinter import messagebox from api import get_repo_data, get_commits, get_code_lines from parser import parse_repo_info, parse_authors class GiteaAnalyzer: def __init__(self): self.root = tk.Tk() self.root.title("Gitea Analyzer") self.root.geometry("1000x700") self.root.minsize(850, 600) self.root.configure(bg="#eef4ff") self.build_interface() self.root.mainloop() def build_interface(self): title = tk.Label( self.root, text="Gitea Repository Analyzer", font=("Arial", 22, "bold"), bg="#eef4ff", fg="#1d3557", ) title.pack(pady=(20, 5)) subtitle = tk.Label( self.root, text="Введите ссылку на репозиторий Gitea и получите информацию о нём", font=("Arial", 12), bg="#eef4ff", fg="#333333", ) subtitle.pack(pady=(0, 15)) input_frame = tk.Frame(self.root, bg="#eef4ff") input_frame.pack(fill="x", padx=30) self.repo_entry = tk.Entry(input_frame, font=("Arial", 12)) self.repo_entry.pack(side="left", fill="x", expand=True, ipady=6) self.repo_entry.insert(0, "https://iux-gitea.myddns.me/owner/repo") self.repo_entry.bind("", self.clear_placeholder) self.repo_entry.bind("", lambda event: self.analyze()) analyze_button = tk.Button( input_frame, text="Анализировать", command=self.analyze, bg="#4d8ee8", fg="white", font=("Arial", 11, "bold"), relief="flat", padx=20, pady=7, cursor="hand2", ) analyze_button.pack(side="left", padx=(10, 0)) self.result_text = tk.Text( self.root, font=("Consolas", 11), wrap="word", state="disabled", bg="#ffffff", fg="#111111", ) self.result_text.pack(fill="both", expand=True, padx=30, pady=20) def clear_placeholder(self, event): if self.repo_entry.get() == "https://iux-gitea.myddns.me/owner/repo": self.repo_entry.delete(0, tk.END) def set_text(self, text): self.result_text.config(state="normal") self.result_text.delete("1.0", tk.END) self.result_text.insert(tk.END, text) self.result_text.config(state="disabled") def analyze(self): repo_link = self.repo_entry.get().strip() if not repo_link or repo_link == "https://iux-gitea.myddns.me/owner/repo": messagebox.showerror("Ошибка", "Введите ссылку на репозиторий") return try: self.set_text("Загрузка данных...\n") self.root.update() repo_data = get_repo_data(repo_link) commits = get_commits(repo_link) lines = get_code_lines(repo_link) info = parse_repo_info(repo_data) authors = parse_authors(commits) output = [] output.append(f"Ссылка: {repo_link}\n") output.append(info) output.append("\nАвторы / соавторы по коммитам:\n") if authors: for author in sorted(authors): output.append(f"- {author}\n") else: output.append("- нет данных\n") output.append(f"\nСтрок Python-кода: {lines}\n") self.set_text("".join(output)) except Exception as error: self.set_text("") messagebox.showerror("Ошибка", f"Не удалось получить данные:\n{error}") if __name__ == "__main__": GiteaAnalyzer()