Skip to main content

Effortless type-safe user input for integers, floats, dates, and more...

Project description

Typed Input Logo

Typed Input

Effortless type-safe user input for integers, floats, dates, and more...

License: MIT Supported Platforms PyPI Supported Versions PyPI PyPI Status

Installation

PyPI

pip install typed-input

uv

uv add typed-input

Supported Functions:

Each function has this structure:

<type>_input(
  prompt: str | None = None,
  min_value: <type> | None = None,
  max_value: <type> | None = None,
  default_value: <type> | None = None,
  type_error_message: str | None = None,
) -> <type>

Parameters:

  • prompt: (Optional) Message displayed to the user when prompting for input.
  • min_value / max_value: (Optional) Bounds for input validation.
  • default_value: (Optional) Value returned if no input is provided. Must fall within bounds.
  • type_error_message: (Optional) Error message shown when input cannot be converted to expected type. Defaults are provided for each function.

Default Type Error Messages:

Function Default type_error_message
int_input Error: You must enter a valid integer.
float_input Error: You must enter a valid float.
decimal_input Error: You must enter a valid Decimal.
datetime_input Error: You must enter a valid datetime in valid ISO 8601 format e.g. YYYY-MM-DD.
See documentation for all allowed options.

Example Usage

int_input for validated integer input

>>> from typed_input import int_input
>>> int_input(prompt="Enter a number (1-10): ", min_value=1, max_value=10)
Enter a number (1-10): abc
Error: You must enter a valid integer.
Enter a number (1-10): 20
Error: Value must be between 1 and 10.
Enter a number (1-10): 5
5

float_input for validated floating-point input

>>> from typed_input import float_input
>>> float_input(prompt="Enter a temperature (-50 to 50): ", min_value=-50.0, max_value=50.0)
Enter a temperature (-50 to 50): 
Error: You must enter a valid float.
Enter a temperature (-50 to 50): 100
Error: Value must be between -50.0 and 50.0.
Enter a temperature (-50 to 50): 22.5
22.5

decimal_input for validated decimal input

>>> from typed_input import decimal_input
>>> from decimal import Decimal
>>> decimal_input(prompt="Enter a price (min 0.01): ", min_value=Decimal("0.01"))
Enter a price (min 0.01): -10
Error: Value must be at least 0.01.
Enter a price (min 0.01): 19.99
Decimal('19.99')

datetime_input for validated datetime input

>>> from typed_input import datetime_input
>>> from datetime import datetime
>>> datetime_input(prompt="Enter a date (YYYY-MM-DD): ", min_value=datetime(2023, 1, 1))
Enter a date (YYYY-MM-DD): invalid
Error: You must enter a valid datetime in ISO 8601 format (e.g., YYYY-MM-DD).
Enter a date (YYYY-MM-DD): 2022-12-31
Error: Date must be on or after 2023-01-01.
Enter a date (YYYY-MM-DD): 2023-01-15
datetime.datetime(2023, 1, 15, 0, 0)

❌ Error Handling

All functions raise a ValueError for:

  • Invalid Range: min_value > max_value.
  • Default Out of Bounds: default_value outside min_value/max_value.

Example:

>>> int_input(min_value=10, max_value=5)
Traceback (most recent call last):
  ...
ValueError: min_value (10) cannot be greater than max_value (5).

🛠️ Development

  • Run formater:
    • uv run ruff check --select I --fix && uv run ruff format
  • Run type checking:
    • uv run mypy .
  • Run all unit tests:
    • uv run typed_input_test.py
  • Run specific unit test:
    • uv run python -m unittest int_input_test.py

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

typed_input-1.2.0.tar.gz (140.0 kB view details)

Uploaded Source

Built Distribution

typed_input-1.2.0-py3-none-any.whl (6.2 kB view details)

Uploaded Python 3

File details

Details for the file typed_input-1.2.0.tar.gz.

File metadata

  • Download URL: typed_input-1.2.0.tar.gz
  • Upload date:
  • Size: 140.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.5.2

File hashes

Hashes for typed_input-1.2.0.tar.gz
Algorithm Hash digest
SHA256 aa74d33097af6b88f1f45627ea5be8c39261e2faf0f5f39f8a0de6275b118339
MD5 f18a42d7a8627e60ffa4649efd524f63
BLAKE2b-256 b68bfe7544f59c696e6357db01cbdad62cc45717363f5cc62cc65a6788ab0232

See more details on using hashes here.

File details

Details for the file typed_input-1.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for typed_input-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3ed008a6a23daf1f430968082f48c533f5e366fff52e1baa6709a230f3feb9e2
MD5 36ae5c3ebeae1e5aadaf6dd4a513a97d
BLAKE2b-256 ec6d89127f4c3f5000f236e262e5e14ef05650403b4d14d49df7272bcf170665

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page