my_gradio / test /components /test_file.py
xray918's picture
Upload folder using huggingface_hub
0ad74ed verified
import os
from pathlib import Path
import pytest
from gradio_client import media_data
import gradio as gr
from gradio.data_classes import FileData, ListFiles
class TestFile:
def test_component_functions(self):
"""
Preprocess, serialize, get_config, value
"""
x_file = FileData(path=media_data.BASE64_FILE["path"])
file_input = gr.File()
output = file_input.preprocess(x_file)
assert isinstance(output, str)
input1 = file_input.preprocess(x_file)
input2 = file_input.preprocess(x_file)
assert input1 == input1.name # type: ignore # Testing backwards compatibility
assert input1 == input2
assert isinstance(input1, str)
assert Path(input1).name == "sample_file.pdf"
file_input = gr.File(label="Upload Your File")
assert file_input.get_config() == {
"file_count": "single",
"file_types": None,
"name": "file",
"show_label": True,
"label": "Upload Your File",
"container": True,
"min_width": 160,
"scale": None,
"elem_id": None,
"elem_classes": [],
"visible": True,
"value": None,
"interactive": None,
"proxy_url": None,
"_selectable": False,
"key": None,
"height": None,
"type": "filepath",
}
assert file_input.preprocess(None) is None
assert file_input.preprocess(x_file) is not None
zero_size_file = FileData(path="document.txt", size=0)
temp_file = file_input.preprocess(zero_size_file)
assert isinstance(temp_file, str)
assert not Path(temp_file).exists()
file_input = gr.File(type="binary")
output = file_input.preprocess(x_file)
assert isinstance(output, bytes)
output1 = file_input.postprocess("test/test_files/sample_file.pdf")
output2 = file_input.postprocess("test/test_files/sample_file.pdf")
assert output1 == output2
def test_preprocess_with_multiple_files(self):
file_data = FileData(path=media_data.BASE64_FILE["path"])
list_file_data = ListFiles(root=[file_data, file_data])
file_input = gr.File(file_count="directory")
output = file_input.preprocess(list_file_data)
assert isinstance(output, list)
assert isinstance(output[0], str)
def test_file_type_must_be_list(self):
with pytest.raises(
ValueError, match="Parameter file_types must be a list. Received str"
):
gr.File(file_types=".json") # type: ignore
def test_in_interface_as_input(self):
"""
Interface, process
"""
x_file = media_data.BASE64_FILE["path"]
def get_size_of_file(file_obj):
return os.path.getsize(file_obj.name)
iface = gr.Interface(get_size_of_file, "file", "number")
assert iface(x_file) == 10558
def test_as_component_as_output(self):
"""
Interface, process
"""
def write_file(content):
with open("test.txt", "w") as f:
f.write(content)
return "test.txt"
iface = gr.Interface(write_file, "text", "file")
assert iface("hello world").endswith(".txt")