Download 57/watcher.py from dejanseo/chrome_models: direct link, hf CLI and curl.
- Browser
- Download file 5.09 kB
-
https://huggingface.co/dejanseo/chrome_models/resolve/refs%2Fpr%2F21/57/watcher.py
- Command line
-
hf download hf://dejanseo/chrome_models@refs/pr/21/57/watcher.py
-
curl -L -o watcher.py https://huggingface.co/dejanseo/chrome_models/resolve/refs%2Fpr%2F21/57/watcher.py
5.09 kB
| #!/usr/bin/env python3 | |
| import time | |
| import sys | |
| import os | |
| import json | |
| from datetime import datetime | |
| from watchdog.observers import Observer | |
| from watchdog.events import FileSystemEventHandler | |
| # ANSI color codes | |
| class Colors: | |
| RED = '\033[91m' | |
| GREEN = '\033[92m' | |
| ORANGE = '\033[93m' | |
| RESET = '\033[0m' | |
| # Load optimization target mappings from models.txt | |
| def load_optimization_targets(filename="models.txt"): | |
| with open(filename, "r") as file: | |
| content = file.read() | |
| start_index = content.find("{") | |
| end_index = content.rfind("}") + 1 | |
| json_data = content[start_index:end_index] | |
| return {k: v.replace("OPTIMIZATION_TARGET_", "") for k, v in json.loads(json_data).items()} | |
| OPTIMIZATION_TARGETS = load_optimization_targets() | |
| class MyHandler(FileSystemEventHandler): | |
| def __init__(self, log_file, base_path): | |
| self.log_file = log_file | |
| self.base_path = base_path | |
| self.suppress_log = log_file # Avoid infinite loop | |
| def get_target_descriptions(self, event_path): | |
| """ Extracts all matching optimization targets from the path. """ | |
| folder_names = set(event_path.split(os.sep)) # Get all path components | |
| matched_targets = [ | |
| (folder, OPTIMIZATION_TARGETS[folder]) | |
| for folder in folder_names if folder in OPTIMIZATION_TARGETS | |
| ] | |
| return matched_targets if matched_targets else [("Unknown", "[Unknown]")] | |
| def format_path(self, path): | |
| """ Returns relative path from base directory. """ | |
| return f".{path.replace(self.base_path, '')}" if path.startswith(self.base_path) else path | |
| def get_event_color(self, event_type): | |
| """ Returns the appropriate color for each event type """ | |
| if "DELETED" in event_type: | |
| return Colors.RED | |
| elif "NEW" in event_type: | |
| return Colors.GREEN | |
| else: | |
| return Colors.ORANGE | |
| def log_event(self, event_type, event_path): | |
| if os.path.abspath(event_path) == os.path.abspath(self.suppress_log): | |
| return # Ignore log file modifications | |
| matched_targets = self.get_target_descriptions(event_path) | |
| timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") | |
| formatted_path = self.format_path(event_path) | |
| color = self.get_event_color(event_type) | |
| # Log each event separately in a stacked format | |
| log_entries = [] | |
| colored_entries = [] | |
| for folder, target in matched_targets: | |
| base_entry = ( | |
| f"------------------------------\n" | |
| f"Timestamp: {timestamp}\n" | |
| f"Event: {event_type}\n" | |
| f"Folder: {folder}\n" | |
| f"Optimization Target: {target}\n" | |
| f"Path: {formatted_path}\n" | |
| f"------------------------------\n" | |
| ) | |
| # Create colored version for console | |
| colored_entry = ( | |
| f"------------------------------\n" | |
| f"Timestamp: {timestamp}\n" | |
| f"Event: {color}{event_type}{Colors.RESET}\n" | |
| f"Folder: {folder}\n" | |
| f"Optimization Target: {target}\n" | |
| f"Path: {formatted_path}\n" | |
| f"------------------------------\n" | |
| ) | |
| log_entries.append(base_entry) | |
| colored_entries.append(colored_entry) | |
| log_message = "\n".join(log_entries) | |
| colored_message = "\n".join(colored_entries) | |
| print(colored_message) # Print colored version to console | |
| with open(self.log_file, "a") as f: | |
| f.write(log_message + "\n") # Write uncolored version to file | |
| def on_created(self, event): | |
| what = "NEW FOLDER" if event.is_directory else "NEW FILE" | |
| self.log_event(what, event.src_path) | |
| def on_deleted(self, event): | |
| what = "FOLDER DELETED" if event.is_directory else "FILE DELETED" | |
| self.log_event(what, event.src_path) | |
| def on_modified(self, event): | |
| what = "FOLDER MODIFIED" if event.is_directory else "FILE MODIFIED" | |
| self.log_event(what, event.src_path) | |
| def on_moved(self, event): | |
| what = "FOLDER MOVED" if event.is_directory else "FILE MOVED" | |
| self.log_event(f"{what}: from {self.format_path(event.src_path)} to {self.format_path(event.dest_path)}", event.src_path) | |
| if __name__ == "__main__": | |
| path = sys.argv[1] if len(sys.argv) > 1 else os.getcwd() | |
| log_file = "log.txt" | |
| event_handler = MyHandler(log_file, path) | |
| observer = Observer() | |
| observer.schedule(event_handler, path, recursive=True) | |
| observer.start() | |
| print(f"Monitoring folder: {os.path.abspath(path)}") | |
| with open(log_file, "a") as f: | |
| f.write(f"Monitoring folder: {os.path.abspath(path)}\n") | |
| try: | |
| while True: | |
| time.sleep(1) | |
| except KeyboardInterrupt: | |
| observer.stop() | |
| observer.join() |