File size: 2,320 Bytes
f51c1fd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
"""
File: components.py
Author: Elena Ryumina and Dmitry Ryumin
Description: Utility functions for creating Gradio components.
License: MIT License
"""

import gradio as gr
from typing import Union, List, Callable, Optional


def html_message(
    message: str = "", error: bool = True, visible: bool = True
) -> gr.HTML:
    css_class = "noti_err" if not error else "noti_true"

    return gr.HTML(value=f"<h3 class='{css_class}'>{message}</h3>", visible=visible)


def files_create_ui(
    value: Union[str, List[str], Callable, None] = None,
    file_count: str = "multiple",
    file_types: List = ["video"],
    label: str = "Video Files",
    show_label: bool = True,
    interactive: bool = True,
    visible: bool = True,
    elem_classes: Optional[str] = "files-container",
) -> gr.File:
    return gr.File(
        value=value,
        file_count=file_count,
        file_types=file_types,
        label=label,
        show_label=show_label,
        interactive=interactive,
        visible=visible,
        elem_classes=elem_classes,
    )


def video_create_ui(
    value: Optional[str] = None,
    label: str = "Video Player",
    file_name: Optional[str] = None,
    show_label: bool = True,
    interactive: bool = False,
    visible: bool = True,
    elem_classes: Optional[str] = "files-container",
) -> gr.Video:
    if file_name is not None:
        label += f" ({file_name})"

    return gr.Video(
        value=value,
        label=label,
        show_label=show_label,
        interactive=interactive,
        visible=visible,
        elem_classes=elem_classes,
    )


def dataframe(
    headers: Optional[List] = None,
    values: Optional[List] = None,
    height: int = 500,
    wrap: bool = True,
    visible: bool = True,
) -> gr.Dataframe:
    if headers is None or values is None:
        datatype = "str"
    else:
        datatype = ["markdown"] * len(headers)

    return gr.Dataframe(
        value=values,
        headers=headers,
        datatype=datatype,
        height=height,
        wrap=wrap,
        visible=visible,
    )


def button(
    value: str = "",
    interactive: bool = True,
    scale: int = 3,
    elem_classes: Optional[str] = None,
) -> gr.Button:
    return gr.Button(
        value=value, interactive=interactive, scale=scale, elem_classes=elem_classes
    )