Effortless type-safe user input for integers, floats, dates, and more...
Project description
Typed Input
Effortless type-safe user input for integers, floats, dates, and more...
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. |
Here's an updated README section to showcase how typed_input
supports the same API as input()
:
🧑💻 Seamless Input API Compatibility
The typed_input
library is designed to feel natural for Python developers by
supporting the same API as the standard input()
function. You can use it
without providing a prompt
, making it simple to integrate into existing
REPL-style workflows.
Example Usage (like input()
)
>>> from typed_input import int_input
>>> x = int_input()
42
>>> type(x)
<class 'int'>
>>> from typed_input import float_input
>>> x = float_input()
3.14
>>> type(x)
<class 'float'>
>>> from typed_input import decimal_input
>>> x = decimal_input()
1.45
>>> type(x)
<class 'decimal.Decimal'>
>>> from typed_input import datetime_input
>>> dt = datetime_input()
2024-01-01
>>> type(dt)
<class 'datetime.datetime'>
Example with a prompt
Just like input()
, you can also pass a prompt
to guide the user:
>>> from typed_input import int_input
>>> int_input('Enter a number: ')
Enter a number: 7
7
This compatibility makes typed_input
a drop-in replacement for input()
in
many scenarios, with the added benefit of type safety and validation!
More Examples
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
outsidemin_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
Built Distribution
File details
Details for the file typed_input-1.2.2.tar.gz
.
File metadata
- Download URL: typed_input-1.2.2.tar.gz
- Upload date:
- Size: 141.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.5.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8e8aa02a685ab0053db5e565d2cedccff4bc4d0f728a74193513f1ad61e5d160 |
|
MD5 | c5d6c4dd984ffef8e5a239509629b86d |
|
BLAKE2b-256 | 96681b6133f84590d8b883eb92308c1f462e91ee5c019e78b91a6e0a0332b9f7 |
File details
Details for the file typed_input-1.2.2-py3-none-any.whl
.
File metadata
- Download URL: typed_input-1.2.2-py3-none-any.whl
- Upload date:
- Size: 6.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.5.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 95bab94ea25139ce61eee6c9ce00f2620a9a88d2b571cc30c738d3b9d89eb273 |
|
MD5 | a9ae526f1a72c0e40752bfa5286db62a |
|
BLAKE2b-256 | 446be04865d7edd946ffaba2608f4861226d2c0d8cd7becd43468a0750682fb6 |