Utils

Sorting and filtering utilities for file listings.

Sorting and Filtering


source

filter_files


def filter_files(
    files:List, # Files to filter
    filter_config:FilterConfig, # Filter configuration
)->List: # Filtered file list

Filter files based on configuration.


source

sort_files


def sort_files(
    files:List, # Files to sort
    sort_by:str='name', # Sort field
    descending:bool=False, # Sort direction
    folders_first:bool=True, # Sort folders before files
)->List: # Sorted file list

Sort files by the specified field.

# Test sorting
files = [
    FileInfo(name="zebra.txt", path="/zebra.txt", is_directory=False, size=100, extension="txt"),
    FileInfo(name="alpha", path="/alpha", is_directory=True),
    FileInfo(name="beta.py", path="/beta.py", is_directory=False, size=50, extension="py"),
]

# Sort by name, folders first
sorted_files = sort_files(files, sort_by="name", folders_first=True)
assert sorted_files[0].name == "alpha"  # Folder first
assert sorted_files[1].name == "beta.py"  # Then files alphabetically

# Sort by size
sorted_files = sort_files(files, sort_by="size", folders_first=False)
assert sorted_files[0].size == 0 or sorted_files[0].size is None  # Folder has no size

# Test filtering
filter_cfg = FilterConfig(allowed_extensions=[".py"])
filtered = filter_files(files, filter_cfg)
assert len(filtered) == 2  # One .py file + folder (folders pass extension filter)
assert any(f.name == "beta.py" for f in filtered)
assert any(f.name == "alpha" for f in filtered)

print("Sorting and filtering tests passed!")