|
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"]) |
|
|