1
from collections import namedtuple
2
from datetime import datetime, timedelta
4
from pathlib import Path
5
from typing import ClassVar, Dict, List, Literal, Optional, Set, Tuple, Union
9
from gradio_client.utils import json_schema_to_python_type
10
from pydantic import Field, confloat, conint, conlist
11
from pydantic.networks import AnyUrl, EmailStr, IPvAnyAddress
13
from gradio.data_classes import GradioModel, GradioRootModel
16
class StringModel(GradioModel):
18
answer: ClassVar = "Dict(data: str)"
21
class IntegerRootModel(GradioRootModel):
24
answer: ClassVar = "int"
27
class FloatModel(GradioModel):
30
answer: ClassVar = "Dict(data: float)"
33
class ListModel(GradioModel):
36
answer: ClassVar = "Dict(items: List[int])"
39
class DictModel(GradioModel):
40
data_dict: Dict[str, int]
42
answer: ClassVar = "Dict(data_dict: Dict(str, int))"
45
class DictModel2(GradioModel):
46
data_dict: Dict[str, List[float]]
48
answer: ClassVar = "Dict(data_dict: Dict(str, List[float]))"
51
class OptionalModel(GradioModel):
52
optional_data: Optional[int]
54
answer: ClassVar = "Dict(optional_data: int | None)"
63
class EnumRootModel(GradioModel):
66
answer: ClassVar = "Dict(color: Literal['red', 'green', 'blue'])"
69
class EmailModel(GradioModel):
72
answer: ClassVar = "Dict(email: str)"
75
class RootWithNestedModel(GradioModel):
76
nested_int: IntegerRootModel
77
nested_enum: EnumRootModel
78
nested_dict: DictModel2
80
answer: ClassVar = "Dict(nested_int: int, nested_enum: Dict(color: Literal['red', 'green', 'blue']), nested_dict: Dict(data_dict: Dict(str, List[float])))"
83
class LessNestedModel(GradioModel):
85
nested_enum: ColorEnum
86
nested_dict: Dict[str, List[Union[int, float]]]
88
answer: ClassVar = "Dict(nested_int: int, nested_enum: Literal['red', 'green', 'blue'], nested_dict: Dict(str, List[int | float]))"
91
class StatusModel(GradioModel):
92
status: Literal["active", "inactive"]
94
answer: ClassVar = "Dict(status: Literal['active', 'inactive'])"
97
class PointModel(GradioRootModel):
98
root: Tuple[float, float]
100
answer: ClassVar = "Tuple[float, float]"
103
class UuidModel(GradioModel):
106
answer: ClassVar = "Dict(uuid: str)"
109
class UrlModel(GradioModel):
112
answer: ClassVar = "Dict(url: str)"
115
class CustomFieldModel(GradioModel):
116
name: str = Field(..., title="Name of the item", max_length=50)
117
price: float = Field(..., title="Price of the item", gt=0)
119
answer: ClassVar = "Dict(name: str, price: float)"
122
class DurationModel(GradioModel):
125
answer: ClassVar = "Dict(duration: str)"
128
class IPv4Model(GradioModel):
129
ipv4_address: IPvAnyAddress
131
answer: ClassVar = "Dict(ipv4_address: str)"
134
class DateTimeModel(GradioModel):
138
answer: ClassVar = "Dict(created_at: str, updated_at: str)"
141
class SetModel(GradioModel):
142
unique_numbers: Set[int]
144
answer: ClassVar = "Dict(unique_numbers: List[int])"
147
class ItemModel(GradioModel):
152
class OrderModel(GradioModel):
153
items: List[ItemModel]
155
answer: ClassVar = "Dict(items: List[Dict(name: str, price: float)])"
158
class TemperatureUnitEnum(Enum):
160
FAHRENHEIT = "Fahrenheit"
164
class TemperatureConversionModel(GradioModel):
165
temperature: confloat(ge=-273.15, le=1.416808)
166
from_unit: TemperatureUnitEnum
167
to_unit: TemperatureUnitEnum = Field(..., title="Target temperature unit")
169
answer: ClassVar = "Dict(temperature: float, from_unit: Literal['Celsius', 'Fahrenheit', 'Kelvin'], to_unit: All[Literal['Celsius', 'Fahrenheit', 'Kelvin']])"
172
class CartItemModel(GradioModel):
173
product_name: str = Field(..., title="Name of the product", max_length=50)
174
quantity: int = Field(..., title="Quantity of the product", ge=1)
175
price_per_unit: float = Field(..., title="Price per unit", gt=0)
178
class ShoppingCartModel(GradioModel):
179
items: List[CartItemModel]
181
answer: ClassVar = "Dict(items: List[Dict(product_name: str, quantity: int, price_per_unit: float)])"
184
class CoordinateModel(GradioModel):
189
class PathModel(GradioModel):
190
coordinates: conlist(CoordinateModel, min_length=2, max_length=2)
193
"Dict(coordinates: List[Dict(latitude: float, longitude: float)])"
197
class CreditCardModel(GradioModel):
198
card_number: conint(ge=1, le=9999999999999999)
200
answer: ClassVar = "Dict(card_number: int)"
203
class TupleListModel(GradioModel):
204
data: List[Tuple[int, str]]
206
answer: ClassVar = "Dict(data: List[Tuple[int, str]]"
209
class PathListModel(GradioModel):
210
file_paths: List[Path]
212
answer: ClassVar = "Dict(file_paths: List[str])"
215
class PostModel(GradioModel):
221
answer: ClassVar = "Dict(author: str, content: str, tags: List[str], likes: int)"
224
Person = namedtuple("Person", ["name", "age"])
227
class NamedTupleDictionaryModel(GradioModel):
228
people: Dict[str, Person]
230
answer: ClassVar = "Dict(people: Dict(str, Tuple[Any, Any]))"
255
TemperatureConversionModel,
260
NamedTupleDictionaryModel,
264
@pytest.mark.parametrize("model", MODELS)
265
def test_api_info_for_model(model):
266
assert json_schema_to_python_type(model.model_json_schema()) == model.answer