def LocalFileSystemProvider( extension_mapping:Optional=None, # For file type detection):
Local file system provider for interactive navigation.
import tempfile# Test LocalFileSystemProviderprovider = LocalFileSystemProvider()# Test propertiesassert provider.name =="local"assert provider.root_path =="/"assert provider.path_separator in ["/", "\\"]# Test with a temporary directorywith tempfile.TemporaryDirectory() as tmpdir:# Create some test files (Path(tmpdir) /"file1.py").write_text("print('hello')") (Path(tmpdir) /"file2.txt").write_text("hello world") (Path(tmpdir) /"subdir").mkdir() (Path(tmpdir) /".hidden").write_text("hidden file")# Test list_directory listing = provider.list_directory(tmpdir)assert listing.error isNoneassert listing.path ==str(Path(tmpdir).resolve())assert listing.parent_path isnotNoneassert listing.total_items ==4# file1.py, file2.txt, subdir, .hidden# Verify files are in listing names = [f.name for f in listing.items]assert"file1.py"in namesassert"file2.txt"in namesassert"subdir"in names# Test get_file_info py_file = Path(tmpdir) /"file1.py" info = provider.get_file_info(str(py_file))assert info isnotNoneassert info.name =="file1.py"assert info.is_directory ==Falseassert info.extension =="py"assert info.file_type == FileType.CODE# Test directory info subdir = Path(tmpdir) /"subdir" dir_info = provider.get_file_info(str(subdir))assert dir_info isnotNoneassert dir_info.is_directory ==True# Test get_parent_path parent = provider.get_parent_path(str(subdir))assert parent ==str(Path(tmpdir).resolve())# Test root has no parentassert provider.get_parent_path("/") isNone# Test join_path joined = provider.join_path(tmpdir, "subdir", "file.txt")assert"subdir"in joinedassert"file.txt"in joined# Test normalize_path normalized = provider.normalize_path(tmpdir +"/subdir/../file1.py")assert".."notin normalized# Test is_valid_path valid, error = provider.is_valid_path(tmpdir)assert valid ==Trueassert error isNone valid, error = provider.is_valid_path("/nonexistent/path/here")assert valid ==Falseassert error isnotNone# Test path_existsassert provider.path_exists(tmpdir) ==Trueassert provider.path_exists("/nonexistent") ==False# Test is_directoryassert provider.is_directory(tmpdir) ==Trueassert provider.is_directory(str(py_file)) ==False# Test get_home_path home = provider.get_home_path()assert provider.path_exists(home)assert provider.is_directory(home)print("LocalFileSystemProvider tests passed!")
LocalFileSystemProvider tests passed!
# Test error handlingprovider = LocalFileSystemProvider()# Test listing non-existent directorylisting = provider.list_directory("/nonexistent/path/here")assert listing.error isnotNoneassert"does not exist"in listing.errorassert listing.items == []# Test listing a file (not a directory)with tempfile.NamedTemporaryFile() as f: listing = provider.list_directory(f.name)assert listing.error isnotNoneassert"not a directory"in listing.error# Test get_file_info for non-existent fileinfo = provider.get_file_info("/nonexistent/file.txt")assert info isNoneprint("Error handling tests passed!")
Error handling tests passed!
from cjm_fasthtml_file_browser.core.protocols import FileSystemProvider# Verify LocalFileSystemProvider implements the protocolprovider = LocalFileSystemProvider()assertisinstance(provider, FileSystemProvider)print("Protocol implementation verified!")
Protocol implementation verified!
# Test async method (using top-level await for Jupyter compatibility)provider = LocalFileSystemProvider()with tempfile.TemporaryDirectory() as tmpdir: (Path(tmpdir) /"test.txt").write_text("hello") listing =await provider.list_directory_async(tmpdir)assert listing.error isNoneassertlen(listing.items) ==1print("Async tests passed!")