Code
  • Free Code for AI & Python Projects
  • LLM Checkers - Play Checkers Against Your Local AI Llamas
Powered by GitBook
On this page

Free Code for AI & Python Projects

Some scripts for automating functions

Automated Backup - saves a version history of your selected filetypes.

import os
import time
import shutil
import tkinter as tk
from tkinter import filedialog, messagebox
from datetime import datetime
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

class FileMonitor(FileSystemEventHandler):
    def __init__(self, watch_dir, backup_dir, extensions, log_text):
        self.watch_dir = watch_dir
        self.backup_dir = backup_dir
        self.extensions = extensions if extensions else ['.py', '.bat']
        self.log_text = log_text
        
        os.makedirs(self.backup_dir, exist_ok=True)
        
        self.initial_backup()

    def log(self, message):
        self.log_text.insert(tk.END, message + '\n')
        self.log_text.see(tk.END)

    def initial_backup(self):
        self.log("Starting initial backup...")
        for root, _, files in os.walk(self.watch_dir):
            if self.backup_dir in root:
                continue  # Skip backup directory
            for file in files:
                if any(file.lower().endswith(ext) for ext in self.extensions):
                    self.create_backup(os.path.join(root, file))
        self.log("Initial backup complete.")

    def on_modified(self, event):
        if event.is_directory or event.src_path.endswith('.tmp') or self.backup_dir in event.src_path:
            return
        self.process_file(event.src_path)

    def on_created(self, event):
        if event.is_directory or event.src_path.endswith('.tmp') or self.backup_dir in event.src_path:
            return
        self.process_file(event.src_path)

    def process_file(self, filepath):
        if self.backup_dir in filepath:
            return
        if any(filepath.lower().endswith(ext) for ext in self.extensions):
            self.create_backup(filepath)
    
    def create_backup(self, filepath):
        try:
            relative_path = os.path.relpath(filepath, self.watch_dir)
            backup_subdir = os.path.join(self.backup_dir, os.path.dirname(relative_path))
            os.makedirs(backup_subdir, exist_ok=True)

            timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
            filename, ext = os.path.splitext(os.path.basename(filepath))
            backup_filename = f"{filename}_{timestamp}{ext}"
            backup_path = os.path.join(backup_subdir, backup_filename)

            shutil.copy2(filepath, backup_path)
            self.log(f"Backup created: {backup_path}")
        except Exception as e:
            self.log(f"Error backing up {filepath}: {str(e)}")

class BackupApp:
    def __init__(self, root):
        self.root = root
        self.root.title("File Backup System")
        self.root.geometry("500x400")
        self.root.configure(bg="#e0e0e0")
        
        self.frame_expanded = tk.Frame(root, padx=15, pady=15, bg="#ffffff", relief=tk.RIDGE, borderwidth=2)
        self.frame_expanded.pack(fill=tk.BOTH, expand=True)

        tk.Label(self.frame_expanded, text="Select Watch Directory:", font=("Arial", 10, "bold"), bg="#ffffff").pack(anchor="w", pady=(5, 0))
        self.watch_entry = tk.Entry(self.frame_expanded, width=50)
        self.watch_entry.pack(pady=2)
        tk.Button(self.frame_expanded, text="Browse", command=self.select_watch_dir, bg="#4CAF50", fg="white").pack(pady=2)

        tk.Label(self.frame_expanded, text="Select Backup Directory:", font=("Arial", 10, "bold"), bg="#ffffff").pack(anchor="w", pady=(5, 0))
        self.backup_entry = tk.Entry(self.frame_expanded, width=50)
        self.backup_entry.pack(pady=2)
        tk.Button(self.frame_expanded, text="Browse", command=self.select_backup_dir, bg="#4CAF50", fg="white").pack(pady=2)

        tk.Label(self.frame_expanded, text="File Extensions (default: .py, .bat):", font=("Arial", 10, "bold"), bg="#ffffff").pack(anchor="w", pady=(5, 0))
        self.ext_entry = tk.Entry(self.frame_expanded, width=50)
        self.ext_entry.insert(0, ".py,.bat")
        self.ext_entry.pack(pady=2)

        self.start_button = tk.Button(self.frame_expanded, text="Start Backup", command=self.start_monitoring, bg="#008CBA", fg="white", font=("Arial", 10, "bold"))
        self.start_button.pack(pady=10)

        self.frame_collapsed = tk.Frame(root, padx=10, pady=10, bg="#ffffff", relief=tk.RIDGE, borderwidth=2)
        self.log_text = tk.Text(self.frame_collapsed, height=10, width=60, bg="#f9f9f9", fg="black", wrap=tk.WORD, font=("Courier", 10))
        self.log_text.pack(pady=5, padx=5, fill=tk.BOTH, expand=True)

        self.stop_button = tk.Button(self.frame_collapsed, text="Stop Backup", command=self.stop_monitoring, bg="#D32F2F", fg="white", font=("Arial", 10, "bold"))
        self.stop_button.pack(pady=10)
        
        self.observer = None

    def select_watch_dir(self):
        directory = filedialog.askdirectory()
        if directory:
            self.watch_entry.delete(0, tk.END)
            self.watch_entry.insert(0, directory)
    
    def select_backup_dir(self):
        directory = filedialog.askdirectory()
        if directory:
            self.backup_entry.delete(0, tk.END)
            self.backup_entry.insert(0, directory)

    def start_monitoring(self):
        watch_dir = self.watch_entry.get()
        backup_dir = self.backup_entry.get()
        extensions = [ext.strip() for ext in self.ext_entry.get().split(',')]
        
        if not watch_dir or not backup_dir:
            messagebox.showerror("Error", "Please select both watch and backup directories.")
            return
        
        self.event_handler = FileMonitor(watch_dir, backup_dir, extensions, self.log_text)
        self.observer = Observer()
        self.observer.schedule(self.event_handler, watch_dir, recursive=True)
        self.observer.start()
        
        self.frame_expanded.pack_forget()
        self.frame_collapsed.pack(fill=tk.BOTH, expand=True)
        
        self.log_text.insert(tk.END, "Monitoring started...\n")

    def stop_monitoring(self):
        if self.observer:
            self.observer.stop()
            self.observer.join()
            self.observer = None
        
        self.frame_collapsed.pack_forget()
        self.frame_expanded.pack(fill=tk.BOTH, expand=True)
        
        self.log_text.insert(tk.END, "Monitoring stopped.\n")

if __name__ == "__main__":
    root = tk.Tk()
    app = BackupApp(root)
    root.mainloop()

Create .exe files from Python files

import os
import subprocess
import tkinter as tk
from tkinter import filedialog, messagebox

def select_python_file():
    file_path = filedialog.askopenfilename(filetypes=[("Python Files", "*.py")])
    if file_path:
        entry_path.delete(0, tk.END)
        entry_path.insert(0, file_path)

def create_exe():
    python_file = entry_path.get()
    if not python_file:
        messagebox.showerror("Error", "Please select a Python file.")
        return
    
    output_folder = filedialog.askdirectory(title="Select Output Folder")
    if not output_folder:
        return
    
    try:
        os.chdir(output_folder)  # Set working directory to output folder
        command = [
            "pyinstaller", "--onefile", "--windowed", "--name", os.path.splitext(os.path.basename(python_file))[0], python_file
        ]
        subprocess.run(command, check=True)
        messagebox.showinfo("Success", "Executable created successfully in 'dist' folder!")
    except subprocess.CalledProcessError as e:
        messagebox.showerror("Error", f"Failed to create executable: {e}")

def setup_gui():
    global entry_path
    
    root = tk.Tk()
    root.title("Python to EXE Converter")
    root.geometry("400x200")
    root.configure(bg="#f0f0f0")
    
    frame = tk.Frame(root, padx=10, pady=10, bg="#f0f0f0")
    frame.pack(fill=tk.BOTH, expand=True)
    
    tk.Label(frame, text="Select Python File:", bg="#f0f0f0").pack(anchor="w")
    entry_path = tk.Entry(frame, width=50)
    entry_path.pack(pady=5)
    tk.Button(frame, text="Browse", command=select_python_file).pack(pady=5)
    
    tk.Button(frame, text="Create .exe", command=create_exe, bg="#4CAF50", fg="white", width=20).pack(pady=10)
    
    root.mainloop()

if __name__ == "__main__":
    setup_gui()
NextLLM Checkers - Play Checkers Against Your Local AI Llamas

Last updated 2 months ago