| from pathlib import Path | |
| import pytest | |
| import gradio as gr | |
| from gradio.components.file_explorer import FileExplorerData | |
| from gradio.exceptions import InvalidPathError | |
| class TestFileExplorer: | |
| def test_component_functions(self): | |
| """ | |
| Preprocess, get_config | |
| """ | |
| file_explorer = gr.FileExplorer(file_count="single") | |
| config = file_explorer.get_config() | |
| assert config["glob"] == "**/*" | |
| assert config["value"] is None | |
| assert config["file_count"] == "single" | |
| assert config["server_fns"] == ["ls"] | |
| input_data = FileExplorerData(root=[["test/test_files/bus.png"]]) | |
| preprocessed_data = file_explorer.preprocess(input_data) | |
| assert isinstance(preprocessed_data, str) | |
| assert Path(preprocessed_data).name == "bus.png" | |
| input_data = FileExplorerData(root=[]) | |
| preprocessed_data = file_explorer.preprocess(input_data) | |
| assert preprocessed_data is None | |
| file_explorer = gr.FileExplorer(file_count="multiple") | |
| config = file_explorer.get_config() | |
| assert config["glob"] == "**/*" | |
| assert config["value"] is None | |
| assert config["file_count"] == "multiple" | |
| assert config["server_fns"] == ["ls"] | |
| input_data = FileExplorerData(root=[["test/test_files/bus.png"]]) | |
| preprocessed_data = file_explorer.preprocess(input_data) | |
| assert isinstance(preprocessed_data, list) | |
| assert Path(preprocessed_data[0]).name == "bus.png" | |
| input_data = FileExplorerData(root=[]) | |
| preprocessed_data = file_explorer.preprocess(input_data) | |
| assert preprocessed_data == [] | |
| def test_file_explorer_txt_only_glob(self, tmpdir): | |
| tmpdir.mkdir("foo") | |
| (Path(tmpdir) / "foo" / "bar").mkdir() | |
| (Path(tmpdir) / "foo" / "file.txt").touch() | |
| (Path(tmpdir) / "foo" / "file2.txt").touch() | |
| (Path(tmpdir) / "foo" / "file3.log").touch() | |
| (Path(tmpdir) / "foo" / "img.png").touch() | |
| (Path(tmpdir) / "foo" / "bar" / "bar.txt").touch() | |
| file_explorer = gr.FileExplorer(glob="*.txt", root_dir=Path(tmpdir)) | |
| tree = file_explorer.ls(["foo"]) | |
| answer = [ | |
| {"name": "bar", "type": "folder", "valid": False}, | |
| {"name": "file.txt", "type": "file", "valid": True}, | |
| {"name": "file2.txt", "type": "file", "valid": True}, | |
| ] | |
| assert tree == answer | |
| def test_file_explorer_prevents_path_traversal(self, tmpdir): | |
| file_explorer = gr.FileExplorer(glob="*.txt", root_dir=Path(tmpdir)) | |
| with pytest.raises(InvalidPathError): | |
| file_explorer.ls(["../file.txt"]) | |