Skip to content

Optionals

pytypeinput supports optional fields with toggle switches. Optional fields can be enabled or disabled by default.

Basic Optional

Optional field with default disabled:

from dataclasses import dataclass
from pytypeinput import analyze_dataclass

@dataclass
class UserForm:
    username: str
    bio: str | None = None

params = analyze_dataclass(UserForm)

print(params[1].name)      # "bio"
print(params[1].optional)  # OptionalMetadata(enabled=False)

HTML Renderer Demo:

Toggle the switch to enable/disable the field!

Optional with Default Value

Optional field enabled by default (has a value):

from dataclasses import dataclass
from pytypeinput import analyze_dataclass

@dataclass
class SettingsForm:
    theme: str | None = "dark"
    language: str | None = "en"

params = analyze_dataclass(SettingsForm)

print(params[0].optional)  # OptionalMetadata(enabled=True)
print(params[0].default)   # "dark"
print(params[1].optional)  # OptionalMetadata(enabled=True)
print(params[1].default)   # "en"

HTML Renderer Demo:

Fields are enabled by default because they have values.

Explicitly Enabled Optional

Force optional field to be enabled even without a default:

from dataclasses import dataclass
from pytypeinput import Annotated, OptionalEnabled, analyze_dataclass

@dataclass
class ProfileForm:
    name: str
    nickname: str | OptionalEnabled = None

params = analyze_dataclass(ProfileForm)

print(params[1].optional)  # OptionalMetadata(enabled=True)
print(params[1].default)   # None

HTML Renderer Demo:

Field is enabled by default even though it has no value.

Explicitly Disabled Optional

Force optional field to be disabled even with a default value:

from dataclasses import dataclass
from pytypeinput import Annotated, OptionalDisabled, analyze_dataclass

@dataclass
class ConfigForm:
    api_key: str
    debug_mode: str | OptionalDisabled = "false"

params = analyze_dataclass(ConfigForm)

print(params[1].optional)  # OptionalMetadata(enabled=False)
print(params[1].default)   # "false"

HTML Renderer Demo:

Field is disabled by default even though it has a value.

Optional with All Types

Any type can be optional:

from dataclasses import dataclass
from datetime import date
from pytypeinput import Email, analyze_dataclass

@dataclass
class ContactForm:
    email: Email
    phone: str | None = None
    age: int | None = None
    birthday: date | None = None
    verified: bool | None = None

params = analyze_dataclass(ContactForm)

print(params[1].optional)  # OptionalMetadata(enabled=False)
print(params[2].optional)  # OptionalMetadata(enabled=False)
print(params[3].optional)  # OptionalMetadata(enabled=False)
print(params[4].optional)  # OptionalMetadata(enabled=False)

HTML Renderer Demo: