Lists
pytypeinput supports dynamic lists with add/remove functionality and validation at both list and item levels.
String List
Basic list of strings:
from dataclasses import dataclass
from pytypeinput import analyze_dataclass
@dataclass
class TagsForm:
tags: list[str]
params = analyze_dataclass(TagsForm)
print(params[0].name) # "tags"
print(params[0].param_type) # <class 'str'>
print(params[0].list) # ListMetadata(constraints=None)
HTML Renderer Demo:
Click + to add items, × to remove them.
Integer List
List of integers:
from dataclasses import dataclass
from pytypeinput import analyze_dataclass
@dataclass
class ScoresForm:
scores: list[int]
params = analyze_dataclass(ScoresForm)
print(params[0].name) # "scores"
print(params[0].param_type) # <class 'int'>
print(params[0].list) # ListMetadata(constraints=None)
HTML Renderer Demo:
Float List
List of floats:
from dataclasses import dataclass
from pytypeinput import analyze_dataclass
@dataclass
class MeasurementsForm:
measurements: list[float]
params = analyze_dataclass(MeasurementsForm)
print(params[0].name) # "measurements"
print(params[0].param_type) # <class 'float'>
HTML Renderer Demo:
Boolean List
List of booleans:
from dataclasses import dataclass
from pytypeinput import analyze_dataclass
@dataclass
class PermissionsForm:
permissions: list[bool]
params = analyze_dataclass(PermissionsForm)
print(params[0].name) # "permissions"
print(params[0].param_type) # <class 'bool'>
HTML Renderer Demo:
Date List
List of dates:
from dataclasses import dataclass
from datetime import date
from pytypeinput import analyze_dataclass
@dataclass
class EventsForm:
event_dates: list[date]
params = analyze_dataclass(EventsForm)
print(params[0].name) # "event_dates"
print(params[0].param_type) # <class 'datetime.date'>
HTML Renderer Demo:
Time List
List of times:
from dataclasses import dataclass
from datetime import time
from pytypeinput import analyze_dataclass
@dataclass
class ScheduleForm:
meeting_times: list[time]
params = analyze_dataclass(ScheduleForm)
print(params[0].name) # "meeting_times"
print(params[0].param_type) # <class 'datetime.time'>
HTML Renderer Demo:
Email List
List of emails:
from dataclasses import dataclass
from pytypeinput import Email, analyze_dataclass
@dataclass
class InviteForm:
recipients: list[Email]
params = analyze_dataclass(InviteForm)
print(params[0].name) # "recipients"
print(params[0].widget_type) # "Email"
print(params[0].list) # ListMetadata(constraints=None)
HTML Renderer Demo:
File List
List of file uploads:
from dataclasses import dataclass
from pytypeinput import ImageFile, analyze_dataclass
@dataclass
class GalleryForm:
photos: list[ImageFile]
params = analyze_dataclass(GalleryForm)
print(params[0].name) # "photos"
print(params[0].widget_type) # "ImageFile"
print(params[0].list) # ListMetadata(constraints=None)
HTML Renderer Demo:
Select multiple files at once or use + to add more.
Lists of Choices
All choice types work with lists:
from dataclasses import dataclass
from typing import Literal
from enum import Enum
from pytypeinput import Annotated, Dropdown, analyze_dataclass
class Tag(Enum):
BUG = "Bug"
FEATURE = "Feature"
DOCS = "Documentation"
def get_colors():
return ["Red", "Blue", "Green", "Yellow"]
@dataclass
class ProjectForm:
categories: list[Literal["Frontend", "Backend", "DevOps"]]
tags: list[Tag]
colors: list[Annotated[str, Dropdown(get_colors)]]
params = analyze_dataclass(ProjectForm)
print(params[0].list) # ListMetadata(constraints=None)
print(params[1].list) # ListMetadata(constraints=None)
print(params[2].list) # ListMetadata(constraints=None)
HTML Renderer Demo:
Default Values
Lists support default values:
from dataclasses import dataclass
from pytypeinput import analyze_dataclass
@dataclass
class PreferencesForm:
favorite_colors: list[str] = ["red", "green", "blue"]
lucky_numbers: list[int] = [7, 11, 42]
params = analyze_dataclass(PreferencesForm)
print(params[0].default) # ['red', 'green', 'blue']
print(params[1].default) # [7, 11, 42]
HTML Renderer Demo: