# Utils


<!-- WARNING: THIS FILE WAS AUTOGENERATED! DO NOT EDIT! -->

## Sorting and Filtering

------------------------------------------------------------------------

<a
href="https://github.com/cj-mills/cjm-fasthtml-file-browser/blob/main/cjm_fasthtml_file_browser/components/utils.py#L43"
target="_blank" style="float:right; font-size:smaller">source</a>

### filter_files

``` python

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

```

*Filter files based on configuration.*

------------------------------------------------------------------------

<a
href="https://github.com/cj-mills/cjm-fasthtml-file-browser/blob/main/cjm_fasthtml_file_browser/components/utils.py#L15"
target="_blank" style="float:right; font-size:smaller">source</a>

### sort_files

``` python

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.*

``` python
# 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!")
```
