Special Types
pytypeinput provides specialized input types with built-in validation and custom UI widgets.
Email input with validation:
from dataclasses import dataclass
from pytypeinput import Email, analyze_dataclass
@dataclass
class ContactForm:
email: Email
params = analyze_dataclass(ContactForm)
print(params[0].name) # "email"
print(params[0].widget_type) # "Email"
HTML Renderer Demo:
Try entering an invalid email like test@ or invalid.com!
Color
Color picker input:
from dataclasses import dataclass
from pytypeinput import Color, analyze_dataclass
@dataclass
class ThemeForm:
primary_color: Color
params = analyze_dataclass(ThemeForm)
print(params[0].name) # "primary_color"
print(params[0].widget_type) # "Color"
HTML Renderer Demo:
File Upload
Generic file upload:
from dataclasses import dataclass
from pytypeinput import File, analyze_dataclass
@dataclass
class UploadForm:
document: File
params = analyze_dataclass(UploadForm)
print(params[0].name) # "document"
print(params[0].widget_type) # "File"
HTML Renderer Demo:
Image File
Image file upload with preview:
from dataclasses import dataclass
from pytypeinput import ImageFile, analyze_dataclass
@dataclass
class ProfileForm:
avatar: ImageFile
params = analyze_dataclass(ProfileForm)
print(params[0].name) # "avatar"
print(params[0].widget_type) # "ImageFile"
HTML Renderer Demo:
Accepts: .png, .jpg, .jpeg, .gif, .webp, .bmp, .svg, and more.
Video File
Video file upload:
from dataclasses import dataclass
from pytypeinput import VideoFile, analyze_dataclass
@dataclass
class MediaForm:
video: VideoFile
params = analyze_dataclass(MediaForm)
print(params[0].name) # "video"
print(params[0].widget_type) # "VideoFile"
HTML Renderer Demo:
Accepts: .mp4, .mov, .avi, .mkv, .webm, and more.
Audio File
Audio file upload:
from dataclasses import dataclass
from pytypeinput import AudioFile, analyze_dataclass
@dataclass
class PodcastForm:
episode: AudioFile
params = analyze_dataclass(PodcastForm)
print(params[0].name) # "episode"
print(params[0].widget_type) # "AudioFile"
HTML Renderer Demo:
Accepts: .mp3, .wav, .aac, .flac, .ogg, .m4a.
Data File
Data file upload (CSV, Excel, JSON, etc.):
from dataclasses import dataclass
from pytypeinput import DataFile, analyze_dataclass
@dataclass
class ImportForm:
spreadsheet: DataFile
params = analyze_dataclass(ImportForm)
print(params[0].name) # "spreadsheet"
print(params[0].widget_type) # "DataFile"
HTML Renderer Demo:
Accepts: .csv, .xlsx, .xls, .json, .xml, .yaml, .yml.
Text File
Text file upload:
from dataclasses import dataclass
from pytypeinput import TextFile, analyze_dataclass
@dataclass
class EditorForm:
notes: TextFile
params = analyze_dataclass(EditorForm)
print(params[0].name) # "notes"
print(params[0].widget_type) # "TextFile"
HTML Renderer Demo:
Accepts: .txt, .md, .log, .rtf.
Document File
Document file upload (PDF, Word, Excel, PowerPoint):
from dataclasses import dataclass
from pytypeinput import DocumentFile, analyze_dataclass
@dataclass
class SubmissionForm:
resume: DocumentFile
params = analyze_dataclass(SubmissionForm)
print(params[0].name) # "resume"
print(params[0].widget_type) # "DocumentFile"
HTML Renderer Demo:
Accepts: .pdf, .doc, .docx, .xls, .xlsx, .ppt, .pptx, and more.