update progress bar

This commit is contained in:
zachary62
2025-05-05 11:53:53 -04:00
parent a1d1ab697c
commit 060bc9d50e
2 changed files with 26 additions and 24 deletions
+1 -11
View File
@@ -62,22 +62,12 @@ class FetchRepo(Node):
else: else:
print(f"Crawling directory: {prep_res['local_dir']}...") print(f"Crawling directory: {prep_res['local_dir']}...")
def progress_callback(processed, total):
percentage = (processed / total) * 100 if total > 0 else 0
rounded_percentage = int(percentage)
if rounded_percentage > progress_callback.last_reported:
progress_callback.last_reported = rounded_percentage
print(f"\033[92mProgress: {processed}/{total} files ({rounded_percentage}%)\033[0m")
progress_callback.last_reported = -1
result = crawl_local_files( result = crawl_local_files(
directory=prep_res["local_dir"], directory=prep_res["local_dir"],
include_patterns=prep_res["include_patterns"], include_patterns=prep_res["include_patterns"],
exclude_patterns=prep_res["exclude_patterns"], exclude_patterns=prep_res["exclude_patterns"],
max_file_size=prep_res["max_file_size"], max_file_size=prep_res["max_file_size"],
use_relative_paths=prep_res["use_relative_paths"], use_relative_paths=prep_res["use_relative_paths"]
progress_callback=progress_callback
) )
# Convert dict to list of tuples: [(path, content), ...] # Convert dict to list of tuples: [(path, content), ...]
+25 -13
View File
@@ -2,13 +2,13 @@ import os
import fnmatch import fnmatch
import pathspec import pathspec
def crawl_local_files( def crawl_local_files(
directory, directory,
include_patterns=None, include_patterns=None,
exclude_patterns=None, exclude_patterns=None,
max_file_size=None, max_file_size=None,
use_relative_paths=True, use_relative_paths=True,
progress_callback=None,
): ):
""" """
Crawl files in a local directory with similar interface as crawl_github_files. Crawl files in a local directory with similar interface as crawl_github_files.
@@ -18,7 +18,6 @@ def crawl_local_files(
exclude_patterns (set): File patterns to exclude (e.g. {"tests/*"}) exclude_patterns (set): File patterns to exclude (e.g. {"tests/*"})
max_file_size (int): Maximum file size in bytes max_file_size (int): Maximum file size in bytes
use_relative_paths (bool): Whether to use paths relative to directory use_relative_paths (bool): Whether to use paths relative to directory
progress_callback (callable): Function to report progress, takes (processed, total) as arguments
Returns: Returns:
dict: {"files": {filepath: content}} dict: {"files": {filepath: content}}
@@ -91,28 +90,41 @@ def crawl_local_files(
else: else:
included = True included = True
processed_files += 1 # Increment processed count regardless of inclusion/exclusion
status = "processed"
if not included or excluded: if not included or excluded:
processed_files += 1 status = "skipped (excluded)"
if progress_callback: # Print progress for skipped files due to exclusion
progress_callback(processed_files, total_files) if total_files > 0:
continue percentage = (processed_files / total_files) * 100
rounded_percentage = int(percentage)
print(f"\033[92mProgress: {processed_files}/{total_files} ({rounded_percentage}%) {relpath} [{status}]\033[0m")
continue # Skip to next file if not included or excluded
if max_file_size and os.path.getsize(filepath) > max_file_size: if max_file_size and os.path.getsize(filepath) > max_file_size:
processed_files += 1 status = "skipped (size limit)"
if progress_callback: # Print progress for skipped files due to size limit
progress_callback(processed_files, total_files) if total_files > 0:
continue percentage = (processed_files / total_files) * 100
rounded_percentage = int(percentage)
print(f"\033[92mProgress: {processed_files}/{total_files} ({rounded_percentage}%) {relpath} [{status}]\033[0m")
continue # Skip large files
# --- File is being processed ---
try: try:
with open(filepath, "r", encoding="utf-8") as f: with open(filepath, "r", encoding="utf-8") as f:
content = f.read() content = f.read()
files_dict[relpath] = content files_dict[relpath] = content
except Exception as e: except Exception as e:
print(f"Warning: Could not read file {filepath}: {e}") print(f"Warning: Could not read file {filepath}: {e}")
status = "skipped (read error)"
processed_files += 1 # --- Print progress for processed or error files ---
if progress_callback: if total_files > 0:
progress_callback(processed_files, total_files) percentage = (processed_files / total_files) * 100
rounded_percentage = int(percentage)
print(f"\033[92mProgress: {processed_files}/{total_files} ({rounded_percentage}%) {relpath} [{status}]\033[0m")
return {"files": files_dict} return {"files": files_dict}