Interactive CLI prompts for nested dataclasses.
Project description
dc-input
A tiny, dependency-free library that lets you interactively fill dataclass instances via the command line. Useful for quick data entry, prototyping, or structured configuration; integrates easily with your own CLI tools.
Features
- Supports defaults and nested dataclasses
- Supports custom parsers
- Structures prompts to flow naturally through nested structures
Installation
pip install dc_input
Usage
from dataclasses import dataclass
from datetime import date
from dc_input import from_dataclass
# --- Setup custom parsers as required ---
def _parse_bool(s: str) -> bool:
if s.lower() in ("y", "yes", "1", "true", "t"):
return True
elif s.lower() in ("n", "no", "0", "false", "f"):
return False
raise ValueError(f"Can't parse {s!r}")
parsers = {
bool: _parse_bool,
date: lambda s: date.fromisoformat(s)
}
# --- Example dataclass schema with nesting and defaults ---
@dataclass
class Address:
city: str
postal_code: str
country: str = "Germany"
@dataclass
class Employee:
name: str
birthdate: date
address: Address
active: bool = True
# --- Use the CLI to fill in all values interactively ---
if __name__ == "__main__":
employee = from_dataclass(Employee, parsers=parsers)
print("\n--- Final result ---")
print(employee)
Interactive Session Example
name (str): Alice
birthdate (date): 1982-07-08
active (bool, default=True): 0
address.city (str): Beriln
address.postal_code (str): .. > 💡 Undo previous input.
address.city (str): Berlin
address.postal_code (str): 10084
address.country (str, default=Germany): > 💡 Accept default value.
New data: > 💡 Edit values as needed.
[0] name (str): Alice
[1] birthdate (date): 1982-07-08
[2] active (bool): False
[3] address.city (str): Berlin
[4] address.postal_code (str): 10084
[5] address.country (str): Germany
Change value? (n / {index} {new_value}): 4 10085
New data:
[0] name (str): Alice
[1] birthdate (date): 1982-07-08
[2] active (bool): False
[3] address.city (str): Berlin
[4] address.postal_code (str): 10085
[5] address.country (str): Germany
Change value? (n / {index} {new_value}): n > 💡 Session complete.
Final Result
Employee(
name='Alice',
birthdate=datetime.date(1982, 7, 8),
address=Address(
city='Berlin',
postal_code='10085',
country='Germany'
),
active=False
)
Planned Features
- Support for
attrsandpydantic - Optional JSON/YAML import/export
- Better colorized CLI output
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
dc_input-0.1.0.tar.gz
(4.1 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dc_input-0.1.0.tar.gz.
File metadata
- Download URL: dc_input-0.1.0.tar.gz
- Upload date:
- Size: 4.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3d76e2df0b0f11e7f2c73993ca9094ac985e15bbccdbbcecaf4e9e03749ab189
|
|
| MD5 |
e80f2d7961f1856d469ba180c90839a2
|
|
| BLAKE2b-256 |
4a8569b72ec8dbb5d88322630f03b6656696251f99d2a89ccd28f9ba0d953262
|
File details
Details for the file dc_input-0.1.0-py3-none-any.whl.
File metadata
- Download URL: dc_input-0.1.0-py3-none-any.whl
- Upload date:
- Size: 4.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a2da3171dbb993cdcafadabbf378c326550c837515e9a5bc29c458f43ce38e09
|
|
| MD5 |
5ece234b121faf9fd83bf68e8f072144
|
|
| BLAKE2b-256 |
9584791cd88edf500c639fc8ed9f8d045aa49b8b0f9957db3287df70a905c6fb
|